Database-Design
外鍵和主外鍵有什麼區別?
我了解您使用外鍵將一個表中的行與另一個表相關聯,如果此外鍵也成為該表的主鍵,那麼它就是主外鍵。
但是,例如,如果酒店記錄了每個客戶的入住日期和時間,並且每個客戶都有一個客戶 ID,**我應該將客戶 ID 作為主外鍵還是僅包含外鍵?**因為一次可以有多個簽到所以日期和時間不足以作為主鍵?
我應該將客戶 ID 作為主外鍵還是僅作為外鍵?
它不能是“主外鍵”,因為 a
PRIMARY KEY
總是UNIQUE
(andNOT NULL
) 並且可能客戶可以再次簽到,可能在不同的日期或時間。
PRIMARY FOREIGN KEY
在我看來,在您引用的表不是複合鍵的所有情況下, A都是一種反模式。這意味著存在嚴格的 0-1:1 關係,就像所有NULLABLE
列一樣。而且在所有情況下,在大多數數據庫中,最好將此類關係放在原始表中的列中,並讓DEFAULT
它們NULL
.CREATE TABLE foo ( a int, b int );
完全沒問題。如果
b
不存在或不適用,您可以將其設置為NULL
(或讓它預設為)。CREATE TABLE foo ( a int PRIMARY KEY ); CREATE TABLE bar ( a int PRIMARY KEY REFERENCES foo, b int );
有點傻。我唯一能看到這有意義的是這樣的,
CREATE TABLE foo (a int PRIMARY KEY); CREATE TABLE bar (a int REFERENCES TABLE foo, b int, PRIMARY KEY (a,b) );
在上述情況下
bar
,有一個複合主鍵,它a
是引用表的一個組成部分foo
。