mysql - 识别 MySQL 数据库中未在创建数据库时定义的 FK?
问题描述
创建了一个包含 5 个表的数据库。这些表在创建时填充了数据——可能是从以前的数据库中导入的。
创建数据库时,为每个表创建了主键,但没有创建外键。
如何运行查询以识别哪些表列包含与其他表中的 PK 相关的数据?实际上,如何识别每个表上的 FK 列?有些表可能包含 2 个 FK。
最终目标是识别每个表中的 FK('s) 并正确设置具有适当 FK 结构和表关系的表。
解决方案
不要尝试使用查询来自动化这个数据库设计/逆向工程过程。(如果你有 500 张桌子,也许。但你只有 5 张。)
关注您的表格定义。例如,如果您的表中有一个id
主键列user
,则您的contact
表可能有一个user_id
列。那就是 FK 到user.id
. 如果您真正了解您的表是如何与 FK 绑定在一起的,它将对您有很大帮助。
而且,请记住,如果您不费心实际声明这些外键,您的系统仍然可以正常工作。你会失去什么:
- 约束,其中数据库引擎会阻止,例如
contact.user_id
不指向任何user.id
行的列值。 - 可能有一些有用的索引。
MySql Workbench具有逆向工程功能。它检查数据库的定义,并尽最大努力整理各种实体(表)和它们之间的关系(外键依赖关系)。它呈现图形化的e:r 图并可以生成DDL。这可以帮助您了解数据库并设置适当的 FK。但是,请检查它所暗示的关系:这些数据是您的,而不是 Workbench 的。
推荐阅读
- pdf - Power Query - 当文件具有不同页面时从 PDF 中获取数据
- python - 无法通过 Python 使用特定 macOS 应用程序打开文件
- slack - 每次发布新消息时,是否都会调用监听特定消息事件的 Slack 机器人?有没有人遇到过这个问题?
- javascript - Cloudfront 不断将我重定向到 index.html
- docker - Redis HA 与 Docker 上的 Sentinel
- forms - Symfony 5 如何使用 paramconverter 作为字段之一的值创建表单
- java - 如何对 Lucene 查询搜索结果执行新的查询搜索
- bash - 如何提取没有 zip 文件夹名称的 .zip
- sql - STRING_AGG 替代 SQL Server 2008
- reactjs - 使用 recharts 或 react-chartjs-2 使用 ReactJS 创建混合条形图