MySQL外键依赖解析

标签 mysql database dependencies foreign-keys rdbms

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

指定的规则是:

  1. 一个办公室有一个经理
  2. 每个员工都被分配到一个办公室

为了对此建模,我使用 MySQL Workbench 创建了一个 ERD,它提供了以下 DDL .

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

我能想到的唯一答案是使键可以为空,这样一个键可以在没有另一个键的情况下暂时存在。

这是解决问题的正确方法吗?数据库最终将规范化为 3NF 或者 BCNF。

最佳答案

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

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

关于MySQL外键依赖解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087570/

相关文章:

mysql - 高级 MySQL LEFT JOIN 查询的问题

mysql - SQL检查日期之间房间是否可用

android - 使用 Realm 数据库的最佳方式

java - Jdeveloper实习生部署忽略Maven依赖

playframework - Play Framework 2.1 删除核心依赖项

php - 未返回值

php - 在准备好的语句中绑定(bind)参数

linux - 用于递归检查和选择依赖项的脚本

php - 如何缓存需要很长时间才能生成的报告或网页?

mysql - 复杂的 MySQL 查询给出了不正确的结果