1
這裏是我的ERD的部分: 我的訂單明細表是否只有外鍵?
正如你可以看到,從Order Details表將訂單從Orders表的訂單ID繼承。僅在產品表中的ProductID中也是如此。我以爲我在某處讀到每個表都需要一個主鍵,但是這是個例外嗎?
這裏是我的ERD的部分: 我的訂單明細表是否只有外鍵?
正如你可以看到,從Order Details表將訂單從Orders表的訂單ID繼承。僅在產品表中的ProductID中也是如此。我以爲我在某處讀到每個表都需要一個主鍵,但是這是個例外嗎?
在任何情況下,您的訂單明細表只能使用FKS。這是總災難的祕訣。
訂單詳細信息必須記錄訂單時產品的信息。例如,價格隨時間變化。您不希望過去的訂單價格發生變化,因爲價格在未來發生變化。
這不僅會導致問題,如果一個錯誤的價格變化導致客戶意外收取更多的東西沒有立即發貨,但它會完全破壞您的信息財務完整性報告銷售,並可能發送壞的數據到你的會計系統。
訂單和訂單詳細信息是時間數據。關於訂單的一切都必須記錄在實際訂單的時間。這不是非規範化,時態數據是不同的。
如果您可以唯一地尋址表中的任何一個特定行,則不需要主ID。想想:*我可以刪除任何一個特定的行嗎?*如果答案已經*是*,沒有其他理由有額外的ID,那麼不要。 – deceze
(orderid,productid)看起來像一個優秀的*自然*候選鍵。它可以被提升爲主鍵。 – wildplasser