将 MS SQL 数据库逆向工程为 ERD
Reverse engineer MS SQL database to ERD
如何从 Microsoft SQL Server 2014 中的现有数据库创建 ERD?
ERD 需要类似于:
最简单的方法是使用 SQL Server Management Studio (SSMS)。
转到数据库 -> 数据库图表 -> 右键单击 -> 添加新图表 -> 为您的 ERD 添加所需的表。鉴于您的表实际上定义了它们之间的关系,因此也会绘制这些关系。
应该注意,这将是一个非常基本的 ERD,可能不完全符合您对 ERD 的期望标准。
检查this discussion。
实际上没有可靠的工具来反转表之间的关系。 SQL Power Architect 比其他工具更好地建立关系。
列出的工具需要为数据库配置适当的主键和外键约束。如果您在企业工作过,您就会意识到通常情况并非如此。
搜索 Sql 球童。这是一个非常有用的工具,可通过分析 运行 对您的数据库的 sql 查询并根据这些查询中的联接而不是数据库中的键约束来查找关系来识别关系。
使用 您可以概览具有相同 name
和相同 datatype
.
的列
WITH ColumnCount AS(
SELECT s.name AS SchemaName,
t.name AS TableName,
c.name AS ColumnName,
ct.[name] AS DataType,
c.max_length,
c.precision,
c.scale,
COUNT(c.column_id) OVER (PARTITION BY c.[name], ct.[name], c.max_length, c.precision, c.scale) AS Duplicates
FROM sys.schemas s
JOIN sys.tables t ON s.schema_id = t.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ct ON c.user_type_id = ct.user_type_id)
SELECT *
FROM ColumnCount CC
WHERE CC.Duplicates > 1
ORDER BY CC.ColumnName,
CC.SchemaName,
CC.TableName;
当你没有约束时,最接近逆向工程师的事情就是试图回溯数据库的开发,开发人员在开发数据库结构时在想什么。
- 希望开发人员使用了相同的列名称。
- 希望开发人员使用相同的数据类型(并跳过隐式转换)。
是一个基于假设的查询,但对我有用。
我期待在业余时间用 chord chard 创建一个 Power BI 仪表板。完成后我会更新。
我找到的唯一解决方案是来自 https://www.malcolmhardie.com/index.html 的 SQLEditor。但是,它仅在 Macintosh 上运行。此时开发人员没有兴趣将其移植到 Windows.
对我来说,这很好,因为我的所有桌面工作都在 Mac 上进行。我已经成功地从许多 DBMS 上的现有数据库开发图表,包括网络上的 Microsoft SQL 服务器。
我已经尝试了很长时间才能在 Windows 上找到一些显示列之间的关系而不仅仅是表之间的关系的东西。
我能提供的唯一建议是获取 Mac 并获取此程序。即使包括 Mac 的成本,也比雇人为您做或盲目浏览数据库更值得。
如何从 Microsoft SQL Server 2014 中的现有数据库创建 ERD?
ERD 需要类似于:
最简单的方法是使用 SQL Server Management Studio (SSMS)。
转到数据库 -> 数据库图表 -> 右键单击 -> 添加新图表 -> 为您的 ERD 添加所需的表。鉴于您的表实际上定义了它们之间的关系,因此也会绘制这些关系。
应该注意,这将是一个非常基本的 ERD,可能不完全符合您对 ERD 的期望标准。
检查this discussion。
实际上没有可靠的工具来反转表之间的关系。 SQL Power Architect 比其他工具更好地建立关系。
列出的工具需要为数据库配置适当的主键和外键约束。如果您在企业工作过,您就会意识到通常情况并非如此。
搜索 Sql 球童。这是一个非常有用的工具,可通过分析 运行 对您的数据库的 sql 查询并根据这些查询中的联接而不是数据库中的键约束来查找关系来识别关系。
使用 name
和相同 datatype
.
WITH ColumnCount AS(
SELECT s.name AS SchemaName,
t.name AS TableName,
c.name AS ColumnName,
ct.[name] AS DataType,
c.max_length,
c.precision,
c.scale,
COUNT(c.column_id) OVER (PARTITION BY c.[name], ct.[name], c.max_length, c.precision, c.scale) AS Duplicates
FROM sys.schemas s
JOIN sys.tables t ON s.schema_id = t.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ct ON c.user_type_id = ct.user_type_id)
SELECT *
FROM ColumnCount CC
WHERE CC.Duplicates > 1
ORDER BY CC.ColumnName,
CC.SchemaName,
CC.TableName;
当你没有约束时,最接近逆向工程师的事情就是试图回溯数据库的开发,开发人员在开发数据库结构时在想什么。
- 希望开发人员使用了相同的列名称。
- 希望开发人员使用相同的数据类型(并跳过隐式转换)。
是一个基于假设的查询,但对我有用。
我期待在业余时间用 chord chard 创建一个 Power BI 仪表板。完成后我会更新。
我找到的唯一解决方案是来自 https://www.malcolmhardie.com/index.html 的 SQLEditor。但是,它仅在 Macintosh 上运行。此时开发人员没有兴趣将其移植到 Windows.
对我来说,这很好,因为我的所有桌面工作都在 Mac 上进行。我已经成功地从许多 DBMS 上的现有数据库开发图表,包括网络上的 Microsoft SQL 服务器。
我已经尝试了很长时间才能在 Windows 上找到一些显示列之间的关系而不仅仅是表之间的关系的东西。
我能提供的唯一建议是获取 Mac 并获取此程序。即使包括 Mac 的成本,也比雇人为您做或盲目浏览数据库更值得。