我正在为我的数据库考试做一个项目,但我陷入了一个棘手的问题。这是我的 ER 图的摘录:
如您所见,实体 Employee 是 Waiter 和 Cook 的泛化。Head Waiter 和 Chief Cook 分别是 Waiter 和 Cook 的专长。只有酋长可以为供应商完成订单(不包括在此摘录中)。显然,一次只有一个酋长可以履行订单(我已经建立了一个履行关系以使图表不那么混乱)。
改造ER图后(对不起,如果我没有使用正确的单词,我正在翻译成英文),结果如下:
因此,员工必须有一个角色(服务员、厨师或其他任何角色),并且每个角色(显然)可能只有一个酋长。我真的不知道这是否正确,双重概括让我很困惑。
下一步是逻辑图(表格),这完全是一团糟!这是一个可能的解决方案:
这是对关系模型的可能转换(在 tblChief 中对 FK2 具有唯一非空约束),但它有一个弱点:如果您更改 tblEmployee 中的员工角色,tblChief 将不会看到此错误并且完整性将被破坏。在 tblEmployee(Role) 和 tblChief(Role) 之间添加 FK 会是一个好的解决方案吗?还是会丑陋/凌乱?
我想到了第二种可能的解决方案。我更喜欢它,但我仍然不知道它是否可以:
在这里,我将实体 Role 与实体 Chief 合并到一个表中。字段 Chief 引用 IDEmployee,同样它必须是唯一且非空。
这些解决方案是否正确?我确信在插入和更新员工和角色时这将是一个大麻烦(AFAIK 如果不暂时删除完整性检查就无法完成)。这可以以不同的方式完成吗?
对不起,很长的帖子(以及图片链接,但我不能直接发布它们),如果你能回答我,非常感谢:)