我正在为一个关系数据库建模,其中使用以下模式来描述 2 个表:ERD Model .
指定的规则是:
- 一个办公室有一个经理
- 每个员工都被分配到一个办公室
为了对此建模,我使用 MySQL Workbench 创建了一个 ERD,它提供了以下 DDL .
我遇到的问题是,为了强制办公室必须有经理,office 表中的外键不可为空。同样,员工表中代表他们工作的办公室的外键对于每个员工都是必需的,因此不可为空。这在模型中对我来说很有意义,但是对于实现来说,它不可能插入数据,因为每个数据都依赖于表中元组的存在。
我能想到的唯一答案是使键可以为空,这样一个键可以在没有另一个键的情况下暂时存在。
这是解决问题的正确方法吗?数据库最终将规范化为 3NF 或者 BCNF。
最佳答案
问题是您试图记录办公室和员工之间的关系两次。一次进入办公室记录,一次进入员工记录。您应该只在一个地方记录关系。通常这是在具有两列的交叉引用表中完成的:Office_ID 和 Staff_ID。但是跳过第三个表而只在其中一个表中记录关系也很常见。
在这种情况下,您可以通过从 Staff 表中删除 Office 字段和外键来解决问题。您将能够根据需要创建任意数量的员工记录。然后,当您创建 Office 记录时,您将能够将其中一名员工分配给该 Office。
关于MySQL外键依赖解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087570/