如何知道表之间的关系
Posted
技术标签:
【中文标题】如何知道表之间的关系【英文标题】:How to know relations between tables 【发布时间】:2016-05-26 07:59:23 【问题描述】:我在 mysql 中有一个由某人创建的数据库。我没有任何关于数据库的文档。
?
是否有任何查询或程序来生成报告以便于查找关系?
我可以查看 Schema 信息并手动找出它,但如果我能生成关系报告那就太好了。
【问题讨论】:
你可以使用mysql workbench,得到所有关系的ER图 可能是... ***.com/questions/20855065/… 关系在数据库中不一定可用 - 在企业事务系统中,出于性能目的而剥离 RI 的情况并不少见。此外,一些高度可定制的系统(PeopleSoft、SAP、Maximo)在应用程序中维护 RI,并使用表格来定义关系。 这不清楚。您是否希望已声明并记录在 DBMS 元数据中的 FK,还是您的意思是通过查看数据来猜测应该或应该已经声明的 FK? 【参考方案1】:你可以看看information_scheme.KEY_COLUMN_USAGE
table
建议使用 KEY_COLUMN_USAGE 视图快速列出您的 FK(外键引用):
SELECT CONCAT( table_name, '.',
column_name, ' -> ',
referenced_table_name, '.',
referenced_column_name ) AS list_of_fks
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;
【讨论】:
【参考方案2】:您可以通过以下步骤在 MySql Workbench 中获得概览:
-
转到“数据库”菜单选项。
选择“逆向工程师”选项。
将打开一个向导并生成一个显示的 EER 图
【讨论】:
【参考方案3】:从编程上讲,更好的方法是从INFORMATION_SCHEMA.KEY_COLUMN_USAGE
表中收集数据,如下所示:
SELECT
`TABLE_SCHEMA`, -- Foreign key schema
`TABLE_NAME`, -- Foreign key table
`COLUMN_NAME`, -- Foreign key column
`REFERENCED_TABLE_SCHEMA`, -- Origin key schema
`REFERENCED_TABLE_NAME`, -- Origin key table
`REFERENCED_COLUMN_NAME` -- Origin key column
FROM
`INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` -- Will fail if user don't have privilege
WHERE
`TABLE_SCHEMA` = SCHEMA() -- Detect current schema in USE
AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys
另一个是
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
【讨论】:
我正在使用 xamp,如果他们编写相同的查询,它会起作用吗? @Narasimha Maiya 我还没有在 xamp 上工作过。你可以在 xamp 上试试。谢谢【参考方案4】:您有使用数据库的SELECTs
吗? 这可能是关系的最佳来源。
【讨论】:
【参考方案5】:如果您使用的是 phpmyadmin,那么:
-
转到数据库。
选择表格并转到其结构。
您会在表格结构的底部找到关系视图。
【讨论】:
【参考方案6】:如果您只安装 mysql 工作台,可能还有一个更有价值的选择。(refers to) 并尝试“从数据库创建 EER 模型”。您一定能看到表之间的关系。
【讨论】:
【参考方案7】:试用 SchemaSpy (http://schemaspy.sourceforge.net/):
SchemaSpy 是一个基于 Java 的工具(需要 Java 5 或更高版本),它分析数据库中模式的元数据并以浏览器可显示的格式生成它的可视化表示。
这是来自http://schemaspy.sourceforge.net/sample/ 的示例输出的 html 页面的屏幕截图:
如果您不想使用命令行,还有一个不错的 GUI: http://schemaspygui.sourceforge.net/
这两个工具都是开源的,在我看来非常轻巧且易于使用。当我遇到您描述的情况时,我多次使用它们:获取架构的概述,甚至一些细节以深入了解。 (查看“异常”报告。)
更新
请务必在http://schemaspy.org查看即将推出的 SchemaSpy 版本
【讨论】:
【参考方案8】:最好使用 Mysql 工作台。有一个用于生成 ER 图的选项。如果您使用的是 phpmyadmin,请选择任何表。有一个结构选项卡,您可以从中查看表结构。希望这会有所帮助。
【讨论】:
以上是关于如何知道表之间的关系的主要内容,如果未能解决你的问题,请参考以下文章