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。 。 。这可能是一个风格问题,但我喜欢在所有表中都有一个唯一的主键。对于这个表格尤其如此,因为我可能会希望另一个表格指的是行 - 例如表格中有一个员工安排在分支机构或他/她在那里工作的小时数。 –