您可以选择在关系窗口的外键选项卡中取消选中 Mandatory,但这并不能完全捕捉不相交关系的含义,即多个关系之间的 EITHER-OR 关系。
问问题
5815 次
1 回答
1
您提到外键的强制属性使我相信您要么误解了不相交关系的含义,要么是在错误的“方向”上使用关系来实现它。
假设我们要实现以下模式:
- 班级:职员
- 类别:永久(专攻工作人员)
- 类:临时(专攻工作人员)
- 工作人员是永久雇员或临时承包商
相应的 EER 模式将是(MySQL 语法):
CREATE TABLE staff_member (
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
CREATE TABLE permanent (
id INT PRIMARY KEY,
next_appraisal DATETIME NOT NULL,
FOREIGN KEY (id) REFERENCES staff_member(id)
);
CREATE TABLE temporary (
id INT PRIMARY KEY,
contract_end DATETIME NOT NULL,
FOREIGN KEY (id) REFERENCES staff_member(id)
);
请注意,外键是从专用实体到父实体(id
作为主键,根据定义它也始终是强制性的)。
这仍然不能回答你的问题。如何建模这种关系的不相交属性?你不能轻易做到这一点(顺便说一句,你也不能模拟一个专业化是完整的)。
许多 RDBMS 支持使用CHECK
约束来强制执行这些额外条件,但 MySQL 不支持(注意,语法被 MySQL 解析器接受,但声明被忽略)。但是,存在导致相同效果的简单解决方法。
于 2013-07-30T15:05:40.807 回答