Database-Design
父關係上的冗餘 FK 是非規範化嗎?
假設我有這個數據庫
client | id | status | sale | id | client_id | date | sale_item | id | sale_id | *client_id* |
該
*client_id*
列是多餘的,因為我們可以 JOIN 並client
從sale_item
行中獲取。但是,如果我經常需要按客戶列出銷售,那麼 JOIN 可能會很昂貴。這被認為是非規範化嗎?還是它有另一個技術名稱?
據我了解,保留的決定
*client_id*
是關於空間 x 速度。常見的非規範化範例引入的一致性問題在這裡不適用,因為id
將永遠不會更改也不會被刪除(如果我們需要“刪除”,我們可以設置 status=0)。
是的,它是非規範化。每當您將數據從數據庫中的一個位置複製到另一個位置(可以輕鬆地從其原始位置獲取數據)時,根據定義,它就是非規範化。
而且,提高性能是非規範化的絕佳理由。也就是說,除非您有大量客戶,或者這是您通常需要
client_id
的表中唯一的數據,否則它不應該是一個主要問題。sale
導致這種非規範化“級聯密鑰結構”的特定實例或其他任何適當的情況是完全合理的。並不意味著它也不是非規範化。而且,關於沒有一致性問題 - 永遠不要說永遠……