如何生成一个非常大的数据库架构图(SQL Server)

18

我需要绘制一个非常大的数据库图。该数据库是运行在 x64 上的 SQL Server 2008。它很大,因为有数百个相关的表,每个表最多有 2000 个字段(有些是稀疏的),表之间有多个关系(实际上每个表通常都有数百个关系),还有多个架构...你明白我的意思。

我尝试使用 SQL Server Management Studio 的数据库图表功能,但它崩溃了并显示 Win32Exception:“没有足够的存储空间来处理此命令...”

我试图使用 Visio 的反向工程功能,在另一台机器上连接并绘制它,但已经执行了几个小时,没有完成的迹象。

我们正在使用一个专门为此工作而构建的工具来创建这个巨大模式的脚本。虽然该工具的功能正常,但难以可视化其输出。

我在寻找一种工具,可以输出这个数据库的图表,这样我们就可以做到这一点。有什么建议吗?

编辑: 强调一下,该图表确实不应用于实际有用的参考。它是一个客户关系管理设备,用于展示系统的复杂性/规模。


一些建议在此处:http://stackoverflow.com/questions/1307944/sql-data-modelling-mapping-software-for-200-tables - Martin Smith
我在我的帖子中分享了有关此主题的评论:https://dataedo.com/blog/do-you-really-need-a-huge-er-diagram-for-the-entire-database - Bad Pitt
8个回答

18
我曾在一家公司工作,那里有几百张表(接近1千张),但没有人真正知道系统中发生了什么,因为公司在不断壮大并招募大量员工。有一个人被派遣制作一个表结构图,他神奇地创建了一个巨大的平铺海报,其中包含每个表格和连接各种表格的线条(到处都是)。我不确定他用了什么软件,年代久远,是Unix和Oracle(远在Linux和开源之前)。他的图表中的表格布局没有任何实际的原因或逻辑。他已经成功地创建了一个包含每个表的图表。这个“海报”被放在公共区域的墙上,引起了一些关注,但没有人真正使用它,因为它太乱、太无组织了。因此,我使用 MS-Word 创建了一张单页图表,包含了20个主要表格(随着我“发现”新的主要表格,它经历了几次迭代),每个外键和每个表被以逻辑方式展示在图表中。我展示了列名、数据类型、可空性、PK和所有FK。我把我的图表挂在了电脑旁边的墙上。最终,每个人都想要一份我的图表,包括那个制作“海报”的人。当我离开那份工作时,他们仍然将我的图表交给新员工。
我建议你像探险家一样工作,找到关键的表格并在发现系统时进行映射,根据需要制作尽可能多的具体图表。试图自动制作一个巨大的“海报”不会很有效。

1
+1 - 更加明智。在图表中处理的项目数量是有限制的。 - TomTom
2
@TomTom,是的,“制作尽可能多的具体图表”。谁有全世界的街道地图?通常你会为每个重要区域准备详细的地图,在一个城市开车时,不需要关注另一个城市的细节。 - KM.
@KM:不错的观点,尽管世界街道地图可能会很酷,仅仅因为它很新颖。我想这是GPS制造商作为营销噱头会在整个办公室包围自己的东西。 - FrustratedWithFormsDesigner

11

对于那么大的数据库,生成任何类型的图像只是贴在墙上的装饰品,会引起惊叹,但实际上除了偶尔扫视之外没有真正作用。为什么不使用像Red Gate文档工具这样的工具,它将发挥实际作用?请理解我并非嘲笑,但我曾尝试过绘制巨大数据库的图表,虽然在一定程度上成功了,但从未找到一个好的出口让它有所用处。


1
我曾经尝试过绘制一个包含800个表格的图表。它大概有60页宽,30页高。这不是办公室里的一面墙,而是整座办公楼的侧墙。显然,这位发帖者并没有考虑清楚他真正想要什么。 - TomTom
1
@TomTom:也许他们会在晚上用投影仪把它显示在建筑物侧面,这相当于数据库版的汽车电影院。 - FrustratedWithFormsDesigner
2
只要有爆米花,我就在那里! - D'Arcy Rittich
2
最终交付了这个工具的输出 - 远比其他任何图形工具都更有用(完全不考虑没有任何图形工具能胜任此工作这一事实)。 - tomfanning

2

由于您有多个模式,也许一个好主意是生成每个模式的图表。


2
使用Graphviz。使用一些SQL语句生成图表,然后通过dot.exe运行以生成PDF或PNG。
我已经用它来生成SQL Server表中的数据图。你也可以用它来处理表格。 http://www.graphviz.org/ 还有Java、Silverlight和AJAX工具可用于导航超大图形,因为PDF仅适用于单页。

0

IntelliJ(特别是IDEA,我刚试过这个功能,但我相信他们的其他IDE也提供此功能https://www.jetbrains.com/)具有内置的数据库客户端工具。从这里,您可以连接到您的数据库并分析单个表、特定组合或所有表,方法是突出显示所需的表格,“右键单击”并选择“图表”选项。您可以保存以供以后参考,并进行打印。我刚刚在一个拥有500多个表格的大型数据库上尝试了这一点,它在几秒钟内呈现出来,矢量图表作为一种可视化消化数据库结构和某些表之间的关系和约束的替代方式,但不建议用于打印。

enter image description here


0

schemaspy提供了一个方便的界面,使用graphviz作为后端生成跨越多个模式的交互式图表。不过我从未尝试过在这么大的数据上使用它。


0

我会避免在单个图表中完成整个过程。正如您提到的,工具会崩溃,并且很可能难以理解具有数百个表格的图表,每个表格可能有数千条记录。您能否生成逻辑区域较小但与其他逻辑区域有一些重叠的图表呢?

或者,您可以尝试使用类似graphviz的东西来解析DDL语句,然后生成一个图表。它可能需要一段时间才能处理完毕,但我记得看到大学海报大小的图表,印刷非常小,与您的复杂性相同。祝你好运!


是的,当我们之前处理大型数据库时,将它们分成逻辑区域的做法效果非常好。如果你无法将如此庞大的东西分解成松散耦合的逻辑区域,那么你可能比图表所显示的问题还要多。Visio反向工程工具实际上相当不错,但在处理如此庞大的数据时可能会出现问题。作为替代方案,Erwin 可能可以胜任,并且有免费试用版,这样您就可以提前了解情况。 - Matt Gibson

0

顺便提一下,假设你确实想要继续这个项目,我个人发现 Visual Studio 2010 数据库建模工具制作的图表是目前我见过最漂亮的 - 只需像导入数据库用于Linq2SQL一样导入你的数据库即可。


不是真的 - 不适用于用户发布的数据库。这将导致每个表都是一个点的图表 ;) - TomTom
我已经让它生成图表过夜了,它仍在运行中。如果成功的话,我会更新问题并将其标记为答案 :-) - tomfanning
不行。当这个最终完成时,Visual Studio完全没有响应。 - tomfanning

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