Sql-Server
由於繼承而產生的主鍵
我正在嘗試為研究生辦公室設計一個數據庫,我們有一個父類“User”,它有一個使用者名作為身份驗證的主鍵,我們有相應的子類“Student”和“Supervisor”,它們每個都有一個 ID 作為首要的關鍵。
對應子類的主鍵是否應該是複合主鍵或者如何處理這種情況?
在這些情況下,我總是在主類和子類之間使用相同的 PK 值。這有助於確保 1:1 的關係。
Create table Users ( User_id int primary key, -- auto increment Username varchar(50) not null unique ); Create table students ( User_id int primary key references Users(User_id) ); Create table Supervisors ( User_id int primary key references Users(User_id) );
這也假設學生可以是~Master~主管。
(不確定程式碼是否正確)
正如@MichaelKatz 所提到的,通常這是使用主鍵作為外鍵來實現的。換句話說,這是一種
1:0-1
關係。但是一個有趣的轉折是添加一
Type
列,它標識基本User
行的類型,以便您知道要加入哪些行。這成為複合主鍵的一部分。子表使用相同的鍵,只有
Type
列是固定計算列Create table Users ( User_id int identity, Type tinyint, Username varchar(50) not null, primary key (User_id, Type) ); Create table students ( User_id int, Type AS 1, primary key (User_id, Type), foreign key (User_id, Type) references Users (User_id, Type) ); Create table Supervisors ( User_id int, Type AS 2, primary key (User_id, Type), foreign key (User_id, Type) references Users (User_id, Type) );