Database-Design

父關係上的冗餘 FK 是非規範化嗎?

  • June 5, 2017

假設我有這個數據庫

client
| id | status |

sale
| id | client_id | date |

sale_item
| id | sale_id | *client_id* |

*client_id*列是多餘的,因為我們可以 JOIN 並clientsale_item行中獲取。但是,如果我經常需要按客戶列出銷售,那麼 JOIN 可能會很昂貴。

這被認為是非規範化嗎?還是它有另一個技術名稱?

據我了解,保留的決定*client_id*是關於空間 x 速度。常見的非規範化範例引入的一致性問題在這裡不適用,因為id將永遠不會更改也不會被刪除(如果我們需要“刪除”,我們可以設置 status=0)。

是的,它是非規範化。每當您將數據從數據庫中的一個位置複製到另一個位置(可以輕鬆地從其原始位置獲取數據)時,根據定義,它就是非規範化。

而且,提高性能是非規範化的絕佳理由。也就是說,除非您有大量客戶,或者這是您通常需要client_id的表中唯一的數據,否則它不應該是一個主要問題。sale導致這種非規範化“級聯密鑰結構”的特定實例或其他任何適當的情況是完全合理的。並不意味著它也不是非規範化。

而且,關於沒有一致性問題 - 永遠不要說永遠……

引用自:https://dba.stackexchange.com/questions/175472