0
比方說,銀行的模式如下:SQL:如何使參與約束在一個表中
Employee = {*ID*,salary}
Branch = {*BranchNum*, Location}
如果關係既有參與約束和鍵約束:
Employee ==> workAt -- Branch //every employee must work at one branch
我可以強制一個參與約束,通過設置BranchNum爲NOT NULL:
CREATE TABLE employee (
ID INTEGER,
BranchNum INTEGER NOT NULL,
PRIMARY KEY (ID)
FOREIGN KEY (ID) REFERENCES Employee
FOREIGN KEY (BranchNum) REFERENCES Branch
)
然而,如果只有參與約束,但無鍵約束:
Employee === workAt -- Branch //every employee must work at one or some branches
如何把參與約束創建表時?
'EmployeeBranchId'是不必要的。 '(EmployeeID,BranchNum)'上需要一個唯一的鍵。您也沒有處理員工必須在至少一個分支工作的要求,這需要從Employee.EmployeeId到EmployeeBranches.EmployeeId的附加FK約束。這樣做並不流行,因爲它需要使用延遲約束檢查進行填充的事務,但OP應該知道如果需要可以強制執行。 – reaanb
@reaanb。 。 。這可能是一個風格問題,但我喜歡在所有表中都有一個唯一的主鍵。對於這個表格尤其如此,因爲我可能會希望另一個表格指的是行 - 例如表格中有一個員工安排在分支機構或他/她在那裏工作的小時數。 –