2012-11-01 171 views
2

讓我們假設有一個小型數據庫,其中有表Person(ID, Name)Product(ID, Name, Color)。 ID列顯然是每個表的主鍵。我想像往常一樣添加關聯多對多表Order(PersonID, ProductID, Date)。我有一個印象,表訂購的主鍵是組合(PersonID, ProductID)。但是在某些方面,建議組合(PersonID, ProductID, Date)作爲主鍵。有什麼不同?我認爲即使(PersonID, ProductID)是主鍵,對於每個組合(PersonID, ProductID)只對應一個日期。如果後面的情況是真的,應該在日期中包含主鍵?關聯表中的主鍵

回答

0

如果只能有一個與人員/產品組合關聯的日期,那麼PK應該是(PersonID, ProductId)。如果可以有多個這樣的關聯,那麼你應該只在012中包含Date,並且日期是區別它們的。如果您不需要它時在PK中包含Date,那麼如果您嘗試使用相同的Person/Product而不是日期創建重複行,則數據庫不會報告錯誤。

UPDATE:

你關於添加ID列註釋使我意識到,這是不完全正確。您只需要聲明(PersonID, ProductID)作爲唯一密鑰,它不必是主密鑰。然後你可以有一個ID字段作爲主鍵;唯一的密鑰將防止重複。如果您將Date添加到PK,也可以做同樣的事情。

但是,在正常規範化的數據庫中,主鍵應該是表中唯一的唯一鍵。關係是Key-> Data的映射,PK應該反映這個映射。

+0

好的,自從我寫下這個問題以來,我一直在仔細考慮,並得出了與答案中所述相同的結論。然而,它讓我感到將日期添加到PK與將關鍵字添加到關聯表相同,這是不恰當的。有一個共同的和可以接受的方法來克服這個問題嗎? – arjacsoh

+0

查看關於唯一密鑰verus主鍵的更新。 – Barmar