2012-11-16 66 views
1

我想如果這個簡單的數據庫建模是好的。特別是賬單表。 你們可以提出你的意見嗎?數據庫設計 - 與主鍵相同的外鍵?

schema

+0

除非你的外國人是獨一無二的,但你必須檢查i =在索引問題 –

+0

它是但它可以在一個表中超過一個。我的問題是,如果在這個模型中有任何問題,因爲我在EmployeeProject中的主鍵,它也是外鍵和帳單相同的情況 – Camus

回答

3

我想你問是否可以在EmployeeProject中的主鍵由兩個外鍵組成。如果我已經正確理解你的問題,那很好。

在結算中,使外鍵由兩個引用EmployeeProject的列組成是沒有問題的。 (在SQL中,foreign key (empNo, projectNo) references EmployeeProject (empNo, projectNo)。)幾乎可以肯定不需要希望在這裏引用Employee和Project的兩個獨立外鍵。

賬單中的三列主鍵(SQL,primary key (billingNo, empNo, projectNo))允許這樣的數據。

billingNo empNo projectNo hoursBilled 
-- 
1003  13  7   3 
1003  13  6   2 
1003  17  7   8 
1004  13  7   3 
1004  13  6   2 

如果這是您的意圖,那麼您的方向是正確的。

+0

謝謝你。如果我想在帳單中只有一個註冊帳戶,我將不得不刪除帳單否? – Camus

+0

如果您只想爲empNo和projectNo的每個組合添加一行,您將從PK中刪除billingNo。 –

+0

你是否建議將此表中的所有PK都編入索引 - 無重複? – Camus

3

它是完全可以接受的有一個外鍵列是一個表的主鍵的一部分。例如,這經常發生在相交表中,其實現了多對多關係。

有人發現用替代鍵代替複合鍵更好。當您使用外鍵列作爲主鍵時,您幾乎總是使用複合鍵,這些鍵可能會變得龐大而複雜。

如果您在此處搜索StackOverflow和其他地方,您可以找到關於自然與化合物與替代關鍵字的相對優點的廣泛和熱情的討論。如果您閱讀這些內容,您會發現有很多人會支持您在模型中定義主鍵的方式。