Sql-Server

由於繼承而產生的主鍵

  • November 6, 2021

我正在嘗試為研究生辦公室設計一個數據庫,我們有一個父類“User”,它有一個使用者名作為身份驗證的主鍵,我們有相應的子類“Student”和“Supervisor”,它們每個都有一個 ID 作為首要的關鍵。 EERD 圖

對應子類的主鍵是否應該是複合主鍵或者如何處理這種情況?

在這些情況下,我總是在主類和子類之間使用相同的 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)
);

引用自:https://dba.stackexchange.com/questions/302223