如何知道表之间的关系

24

我有一个MySQL数据库是别人创建的,但我没有任何关于这个数据库的文档。

我该怎么知道表之间的关系呢?

是否有查询或者过程可以生成报告,以便更容易地找到这些关系呢?

我可以查看模式信息并手动解决它,但如果能生成一个关系报告就太好了。


1
你可以使用MySQL Workbench并获取包含所有关系的ER图。 - Smita Ahinave
3
可能是重复的问题...https://dev59.com/tGEi5IYBdhLWcg3w6PrZ - user2260040
关系并不一定在数据库中可用 - 在企业交易系统中,为了提高性能,RI通常会被剥离。此外,一些高度可定制的系统(如PeopleSoft、SAP、Maximo)在应用程序中维护RI,并具有定义关系的表。 - pojo-guy
这不是很清楚。你是想要在DBMS元数据中记录的已声明的FK,还是通过查看数据猜测应该声明哪些FK? - philipxy
8个回答

20

您可以通过以下步骤在MySQL Workbench中获得概览:

  1. 进入"数据库(Database)"菜单选项。
  2. 选择"反向工程(Reverse Engineer)"选项。
  3. 将打开向导并生成一个EER图表,显示出来。

16

从编程的角度来看,更好的方法是按照以下方式从 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;

我正在使用XAMPP,如果在那里编写相同的查询语句,它会起作用吗? - Narasimha Maiya
@Narasimha Maiya 我还没有使用过XAMPP。你可以在XAMPP上尝试一下。谢谢。 - Ankit Agrawal

12
尝试使用SchemaSpy (http://schemaspy.sourceforge.net/):SchemaSpy是一个基于Java的工具(需要Java 5或更高版本),它分析数据库中模式的元数据,并以浏览器可显示的格式生成其可视化表示。这里是从http://schemaspy.sourceforge.net/sample/中获取的示例输出的HTML页面的屏幕截图: Screenshot of the HTML page of the sample output from http://schemaspy.sourceforge.net/sample/如果您不想使用命令行,则还有一个很好的GUI界面:http://schemaspygui.sourceforge.net/。这两个工具都是开源的,并且我认为非常轻巧易用。当我处于您所描述的情况时,我会多次使用它们:获取模式概述甚至一些深入了解的详细信息。(查看“异常”报告)。
更新:请务必查看即将推出的SchemaSpy版本:http://schemaspy.org

5

你是否拥有使用数据库的SELECTs?这可能是关系的最佳来源。这些查询语句


5

如果您安装了MySQL Workbench(链接),那么另一个有价值的选择是尝试使用“从数据库创建EER模型”。这样,您肯定能够看到表之间的关系。


4
你可以查看information_scheme.KEY_COLUMN_USAGE,如建议所述,使用KEY_COLUMN_USAGE视图可以快速列出外键引用(FKs)。
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;

3

如果您正在使用phpmyadmin:

  1. 进入数据库。
  2. 选择表并进入其结构。
  3. 您可以在表结构底部找到关系视图。

0
最好使用Mysql Workbench。有一个生成ER图的选项。如果您正在使用phpmyadmin,请选择任何表格。有一个结构选项卡,您可以从中查看表格结构。希望这能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接