【问题标题】:How to generate a diagram of a very large database schema (SQL Server)如何生成一个非常大的数据库架构图(SQL Server)
【发布时间】:2011-03-31 00:20:45
【问题描述】:

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

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

我尝试在另一台机器上使用 Visio 的逆向工程功能来连接并绘制图表,但这已经持续了几个小时,没有完成的迹象。

构建这个巨大架构的脚本由我们为这项工作构建的工具提供。虽然该工具运行良好,但很难将其输出可视化。

我正在寻找一个工具来绘制这个数据库的图表,以便我们可以做到这一点。有什么建议吗?

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

【问题讨论】:

标签: sql-server database-design schema database-diagramming


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    schemaspy 提供了一个方便的界面来生成跨多个模式的交互式图表,使用 graphviz 作为后端。不过,我从来没有尝试过这种尺寸的任何东西。

    【讨论】:

      【解决方案3】:

      使用图形可视化。使用一些 SQL 语句生成 digram,然后通过 dot.exe 运行它以生成 PDF 或 PNG。

      我用它在 SQL Server 表中生成数据图。没有理由也可以将它用于表格。

      http://www.graphviz.org/

      还有用于导航超大图形的 java、silverlight 和 AJAX 实用程序,因为 PDF 仅用于一页。

      【讨论】:

        【解决方案4】:

        我在一个有数百张桌子(接近 1k)的地方工作,没有人真正知道系统中发生了什么,公司正在发展壮大并招聘了很多人。一个人的任务是做一个图表,他自动神奇地创建了一个巨大的瓷砖海报,其中包含每张桌子和连接不同桌子的线条(到处都是)。我不确定他用的是什么,几年前是 Unix 和 Oracle(早于 Linux 和开源)。他的图表中的表格布局没有真正的韵律或理由。他已经成功地创建了每张桌子的图表。 “海报”贴在公共区域的墙上,看了几眼,但没有人真正使用过,它无法使用,太杂乱,太杂乱无章。结果,我使用 MS-Word 创建了一个包含 20 个主表的单页图(当我“发现”新的主表时,它经历了几次迭代),每个外键的行和每个表以逻辑方式定位.我展示了列名、数据类型、可空性、PK 和所有 FK。我把我的图表贴在我的显示器旁边的墙上。最终每个人都想要我的图表的副本,包括制作“海报”的人。当我离开那份工作时,他们仍在向新员工提供我的图表。

        我建议您像探索者一样工作,找到关键表并在进行过程中对其进行映射,根据需要制作尽可能多的特定图表,因为您发现了系统。试图自动制作一张巨大的“海报”效果不佳。

        【讨论】:

        • +1 - 更明智。在图表中仍然可以处理的项目是有限的。
        • @TomTom,是的,making as many specific diagrams as necessary。谁有一张全世界的街道地图?通常每个重要区域都有详细的地图,在一个城市开车时,不需要另一个城市的详细信息。
        • @KM: 好点子,虽然世界的街道地图有点酷,如果只是为了它的新颖性。我想这是 GPS 制造商将他们的整个办公室包裹起来作为营销噱头的那种东西。
        【解决方案5】:

        FWIW,假设您确实想继续进行此操作对于 Linq2SQL

        【讨论】:

        • 不是真的 - 不是用户发布的数据库。这将最终得到一个图表,其中每个表都是一个 POINT ;)
        • 我一夜之间生成了一个图表。它还在继续。如果可行,将更新问题并将其标记为答案:-)
        • 没有骰子。最终完成时,Visual Studio 完全没有响应。
        【解决方案6】:

        由于您有多个架构,因此最好为每个架构生成图表

        【讨论】:

          【解决方案7】:

          我会避免在一个图表中完成整个事情。正如您所提到的,这些工具会崩溃,并且可能无法轻松理解包含数百个表且每个表可能有数千条记录的图表。你能生成一些与其他部分重叠的较小逻辑区域的图表吗? 逻辑区域?

          或者,您可以尝试使用类似 graphviz 的工具来解析 DDL 语句,然后生成图表。它可能会持续一段时间,但我记得在大学海报大小的图表中看到过小字,可能和你的一样复杂。祝你好运!

          【讨论】:

          • 是的,当我们以前做过大型数据库时,将它们分成逻辑区域已经很有效了。如果你不能把这么大的东西分解成松散耦合的逻辑区域,你可能会遇到比你的图表更多的问题。 Visio 逆向工程工具实际上非常好,但可能会在那么大的事情上呕吐。作为替代方案,Erwin 可能会处理它,并且有免费试用,因此您可以提前了解。
          【解决方案8】:

          为这种大小的数据库生成任何类型的图像只会变成粘在墙上的吸引眼球的糖果,老实说,除了偶尔瞥一眼之外,没有任何实际用途。为什么不使用像Red Gate's Documentation tool 这样可以达到实际目的的工具呢?请理解我并不是以嘲弄的方式说这句话,但在尝试绘制一个巨大的数据库之前,我一直在走这条路,我在某种程度上取得了成功,但从未找到一个有用的出路。

          【讨论】:

          • 我曾经尝试过一张包含 800 个表格的图表。那是我 60 页宽。和30高左右。不是办公室的墙壁 - 办公室建筑的侧壁。海报显然没有通过他真正想要的。
          • @TomTom:也许他们会在晚上使用投影仪将其显示在建筑物的一侧。相当于免下车电影的数据库。
          • 只要有爆米花,我就在!
          • 最终提供了这个工具的输出 - 更有用(除了似乎没有图形工具能胜任这项工作的事实)
          猜你喜欢
          • 2018-12-01
          • 2010-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          • 2010-11-13
          相关资源
          最近更新 更多