创建了一个包含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的。