我将 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 ?????
)
那么,有谁知道如何将这个约束施加到架构上?
最佳答案
您必须添加一个触发器来检查该约束。
在开始对触发器进行编程之前,我认为您的数据模型可以进一步优化。 MANAGERS 应该对 EMPLOYEES 表具有 FK。 EMPLOYEES(和 CUSTOMERS)表应该具有与 PEOPLE 表的 FK。
创建一个表来仅存储一个实例(一条记录)是很少见的。您可以在 ORGANIZATIONS 和 MANAGERS 表之间设置约束,表示一个组织只能有一名经理。通过定义从组织到经理的 FK 来实现这一点。如果您想要强制执行组织应始终拥有经理的约束,请将 NOT NULL 添加到 MANAGERS 的 FK 定义中。
CREATE TABLE ORGANISATIONS (
Id INTEGER NOT NULL,
...
ManagerId INTEGER NOT NULL,
...
)
当您这样做时,您不需要触发器。触发器可能很棘手。当您可以避免使用它们时,请不要使用它们。它们是数据库中的“暗物质”。您可能会在数据库中找到没有人输入过的内容。很有可能这是某种不明原因的触发因素。有时,当您更改表时,其上定义的触发器可能会变得不活动。突然间,你的数据库不再正常运行......暗物质。
关于mysql - 我想在我的架构上添加这个约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856182/