我有2個表,User
和Employee
。每個用戶都有一個User_ID
,這是User
表中的主鍵和Employee
表中的外鍵。 Employee
表中的該屬性是否也是主鍵?數據庫屬性可以是主鍵和外鍵嗎?
5
A
回答
20
如果您在兩個表之間有一對一的關係,那麼細節表的主鍵也是一個外鍵。
master detail (1 : 1)
+----------+ 1:1 +-------------+
| PK id |<---o| PK FK id |
+----------+ +-------------+
| col1 | | col1 |
| col2 | | col2 |
| etc. | | etc. |
+----------+ +-------------+
如果你有米對n關係,結合表具有與所述m的兩個主鍵和n的表列。這些列同時是主鍵和外鍵。
m : n
m_table junction
+----------+ 1:m +------------+ n_table
| PK id1 |<---o| PK FK1 id1 | n:1 +----------+
+----------+ | PK FK2 id2 |o--->| PK id2 |
| col1 | +------------+ +----------+
| col2 | | | | col1 |
| etc. | +------------+ | etc. |
+----------+ +----------+
請注意,這個結構,一個表的記錄只能鏈接到其他表的特定記錄一次,因爲路口表中的每一複合主鍵必須是唯一的。如果你想允許非唯一配對,確定在結合表一個單獨的主鍵:
m : n
junction
+---------+
m_table | PK id |
+----------+ 1:m +---------+ n_table
| PK id1 |<---o| FK1 id1 | n:1 +----------+
+----------+ | FK2 id2 |o--->| PK id2 |
| col1 | | | +----------+
| col2 | +---------+ | col1 |
| etc. | | etc. |
+----------+ +----------+
在這種情況下,主鍵和外鍵約束在不同的欄目設置。或者,您也可以使用兩個外鍵加上一個分子或另一個辨別屬性來構建主鍵。
在你的情況,如果有一個一對一或一對零或一User
和Employee
之間的關係,那麼,在Employee
表User_ID
可外鍵(FK)和主鍵(PK)。換言之,這意味着:用戶也可以是員工,在這種情況下,員工數據將被附加到用戶。如果他不是員工(他可能是外部專家),則不附加員工記錄。如果User_ID
是Employee
中的FK和PK,則每個用戶最多可以附加一個員工記錄。如果User_ID
在表Employee
中只有FK但不是PK,則用戶可能有多個相關的員工記錄。
2
是的。例如,如果您想要強制所有員工都是用戶,並且某些用戶可以成爲員工,則會這樣做。這將是(零或一)到一個關係。
否則,您通常不會將主鍵與外鍵相同,儘管它可能包含外鍵,例如多點對多點關係的結點表。
相關問題
- 1. 外鍵屬性可以是組合主鍵的一部分嗎?
- 2. 我可以在數據庫中只有外鍵而不是主鍵嗎?
- 3. Mysql數據庫...主鍵和外鍵
- 4. 外鍵可以作爲主鍵嗎?
- 5. 將外鍵作爲主鍵可以嗎?
- 6. 我可以根據特定字段(不是主鍵!,唯一鍵還是外鍵)具有導航屬性嗎?
- 7. 數據庫規範化:外鍵=主鍵?
- 8. 外鍵引用的主鍵可以是mysql中的varchar(255)嗎?
- 9. 主屬性和鍵
- 10. 使用外鍵和非鍵屬性創建複合主鍵
- 11. 爲什麼(默認)外鍵是空的? 。 。並且外鍵和主鍵可以是同一列嗎?
- 12. 如何判斷EntityObject的屬性是主鍵還是外鍵?
- 13. 主鍵和外鍵
- 14. 主鍵和外鍵
- 15. 主鍵和外鍵?
- 16. 外鍵和主鍵
- 17. 外鍵可以唯一主鍵
- 18. 合併具有重複主鍵和外鍵的數據庫
- 19. 關係數據庫繼承外鍵和主鍵
- 20. 在sql2000到sql 2008r2中,可以使用bigint作爲數據庫中所有表的主鍵和外鍵嗎?
- 21. 我可以有一個表與數據庫的外鍵但沒有主鍵
- 22. 我可以跨數據庫創建外鍵嗎?
- 23. 具有屬性的多對多映射 - 主鍵是外鍵
- 24. 單個外鍵可以指向多個主鍵嗎?
- 25. 非主鍵列可以從外鍵引用嗎?
- 26. 外鍵可以爲空嗎?
- 27. 主數據庫表和主數據庫以及'屬性'表
- 28. 表中的列可以是主鍵還是外鍵?
- 29. 數據庫主鍵
- 30. 數據庫主鍵
Employee表中的主鍵是什麼?每個表中只允許有一個主鍵。您可以執行復合主鍵(多個列)。 – 2012-02-11 22:08:18