我想在我的架构上添加这个约束

时间:2012-03-24 22:27:39

标签: mysql sql

我将我的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 ?????
)

那么,有没有人知道如何在架构上推出这个约束?

1 个答案:

答案 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,
   ...
 )

当你这样做时,你不需要触发器。触发器可能很棘手。如果可以避免使用它们,请不要使用它们。它们是数据库中的“暗物质”。您可能会在数据库中找到没人输入的内容。机会很高,这是一些模糊触发器的工作。有时,当您更改表时,在其上定义的触发器可能会变为非活动状态。突然间,你的数据库不再运行,因为它应该......暗物质。