识别 MySQL 数据库中未在创建数据库时定义的 FK?



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

创建DB时,会为每个表创建主键,但不会创建外键。

如何运行查询来确定哪些表列包含与其他表中PK相关的数据?如何有效地识别每个表上的FK列?某些表可能包含2个FK。

最终目标是识别每个表中的FK,并使用适当的FK结构和表关系正确设置表。

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

Eyeball您的表格定义。例如,如果user表中有一个id主键列,那么contact表可能有一个user_id列。这就是FK到user.id。如果你真的了解你的桌子是如何与FK结合在一起的,这将对你有很大帮助。

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

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

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

最新更新