MySQL外键依赖解析

时间:2011-11-10 22:58:41

标签: mysql database dependencies foreign-keys rdbms

我正在为关系数据库建模,其中以下模式用于描述2个表:ERD Model

指定的规则是:

  1. 办公室有经理
  2. 每名工作人员被分配到办公室
  3. 为了对此进行建模,我使用MySQL工作台创建了一个ERD,它提供了以下DDL

    我遇到的问题是,为了强制办公室必须拥有经理,办公室表中的外键不可为空。同样,每个员工都需要代表他们工作的办公室的员工表中的外键,因此可以为空。这对我来说在模型中是有意义的,但是对于实现它使得无法插入数据,因为每个都依赖于表中元组的存在。

    我能想到的唯一答案是让密钥可以为空,这样一个人可以暂时不存在另一个。

    这是解决问题的正确方法吗?数据库最终将标准化为3NF,也许是BCNF。

1 个答案:

答案 0 :(得分:1)

问题是你试图记录办公室和员工之间的关系两次。一旦进入办公室记录,再次在员工记录中。您应该只在一个地方记录关系。通常,这是在具有两列的交叉引用表中完成的:Office_ID和Staff_ID。但跳过第三个表并在其中一个表中记录关系也很常见。

在这种情况下,您可以通过从Staff表中删除Office字段和外键来消除您的问题。您将能够根据需要创建任意数量的员工记录。然后,当您创建Office记录时,您将能够将其中一个人员分配给Office。