首页 > 解决方案 > 识别 MySQL 数据库中未在创建数据库时定义的 FK?

问题描述

创建了一个包含 5 个表的数据库。这些表在创建时填充了数据——可能是从以前的数据库中导入的。

创建数据库时,为每个表创建了主键,但没有创建外键。

如何运行查询以识别哪些表列包含与其他表中的 PK 相关的数据?实际上,如何识别每个表上的 FK 列?有些表可能包含 2 个 FK。

最终目标是识别每个表中的 FK('s) 并正确设置具有适当 FK 结构和表关系的表。

标签: mysqlmysql-workbench

解决方案


不要尝试使用查询来自动化这个数据库设计/逆向工程过程。(如果你有 500 张桌子,也许。但你只有 5 张。)

关注您的表格定义。例如,如果您的表中有一个id主键列user,则您的contact表可能有一个user_id列。那就是 FK 到user.id. 如果您真正了解您的表是如何与 FK 绑定在一起的,它将对您有很大帮助。

而且,请记住,如果您不费心实际声明这些外键,您的系统仍然可以正常工作。你会失去什么:

  • 约束,其中数据库引擎会阻止,例如contact.user_id不指向任何user.id行的列值。
  • 可能有一些有用的索引。

MySql Workbench具有逆向工程功能。它检查数据库的定义,并尽最大努力整理各种实体(表)和它们之间的关系(外键依赖关系)。它呈现图形化的e:r 图并可以生成DDL。这可以帮助您了解数据库并设置适当的 FK。但是,请检查它所暗示的关系:这些数据是您的,而不是 Workbench 的。


推荐阅读