我将我的ER图转换为模式,但是我来到这个表中只有1个主管或1个记录
CREATE TABLE Managers
(
SIN int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK ?????
)
那么,有没有人知道如何在架构上推出这个约束?
答案 0 :(得分:1)
您必须添加TRIGGER来检查该约束。
在开始编程该触发器之前,我认为您的数据模型可以进一步优化。 经理应该有一个FK到EMPLOYEES表。 EMPLOYEES(和CUSTOMERS)表应该有一个FK到PEOPLE表。
创建一个只存储一个实例(一条记录)的表是很少见的。您可以在ORGANIZATIONS和MANAGERS表之间设置一个约束,表示组织只能有一个Manager。通过从ORGANIZATIONS到MANAGERS定义FK来做到这一点。如果要强制组织应始终具有管理器的约束,请将NOT NULL添加到FK到MANAGERS的定义中。
CREATE TABLE ORGANISATIONS (
Id INTEGER NOT NULL,
...
ManagerId INTEGER NOT NULL,
...
)
当你这样做时,你不需要触发器。触发器可能很棘手。如果可以避免使用它们,请不要使用它们。它们是数据库中的“暗物质”。您可能会在数据库中找到没人输入的内容。机会很高,这是一些模糊触发器的工作。有时,当您更改表时,在其上定义的触发器可能会变为非活动状态。突然间,你的数据库不再运行,因为它应该......暗物质。