解密数据库架构

时间:2020-03-06 14:34:02  来源:igfitidea点击:

我最近继承了维护设计不佳的数据库的工作,而设计人员也无法提出任何问题。在不久的将来,我还会有更多其他方式。

试图在没有任何视觉辅助或者数据库图的情况下弄清表之间的关系非常困难。

我想知道为此推荐什么工具。我了解Visio,但是我希望那里有一些不错的开源/免费软件应用程序。我根本不需要它来更改数据库。只需阅读并创建某种视觉辅助工具即可帮助我理解事物的布局方式,并尝试弄清楚设计者在考虑数据应如何关联。

其他答案数据:SchemaSpy是我一直在寻找的那种东西,但是由于在很长一段时间内没有对命令行做太多事情,我选择使用SchemaSpyGUI。由于我使用Java的工作量不大,因此还需要一些配置,但是最终结果是我想要的(在Visio ER图的开源替换上)。

解决方案

我们正在使用哪种DBMS(数据库管理系统)?许多现代的DBMS(例如SQL Server和Access)都可以为我们创建E-R图。

Microsoft Visio是一个出色的工具,可以从任何数据源对SQL进行反向工程。

DDT(数据库设计工具)可以从Windows上的原始SQL进行反向工程,并且非常轻巧(非常小,免费下载)。

MySQL Workbench是较流行的MySQL工具之一,具有可免费下载的版本。

SQLFairy可以在Linux上对MySQL执行相同的操作。

我将mysql工作台(http://www.mysql.com/products/workbench/)用于mysql数据库。我们可以将工作台添加到数据库,它将为我们绘制ER图。

使用pgsql / win32,我发现最简单的解决方案是编写一个Perl脚本,该脚本利用了CPAN中的Graph :: Easy。在数据库中查询外键关系,使用表作为节点并以FK关系作为链接来制作有向图。如果这是设置,我可以发布代码。

那里有一些开源软件,但是Visio Professional的用于逆向工程数据库模式的工具非常好,因为它使逆向工程和图表的过程脱钩。我经常使用它,因为它在大多数站点上都易于获得。

visio的一个不错的功能是,我们可以进行逆向工程,然后从逆向工程化的架构中构建自己的图。作为交互构建架构参考文档的一部分,进行此工作是探索架构并理解它的一种很好的方法。我使用这种技术对从基于活动的成本核算系统到保险承保系统的所有项目进行反向工程,通常不需要卖方的太多帮助。修补Visio图表非常轻松。

在此与有关FK关系的一些假设检验之间(如果表格上实际不存在FK),则可以理解非常复杂的模式。我发现这种图表方法使Visio成为首屈一指的领导者,因为我们可以以相当方便的方式轻松地与逆向工程模型进行交互。我们可以填写缺少的外键,构建主题区域图,并在图上添加注释。此过程的交互性使其成为一个很好的学习工具。

这是一种主观的观点,但交互性对我来说是一种很好的学习过程,并且是我迄今为止的首选方法。如果大多数网站没有可用的许可证,则不会为我们带来300左右的费用。我曾经在其中工作的唯一站点是因为它们使用Visio Standard而不是Pro。我问得很好,PHB同意了。

我想尝试看看使用数据库的应用程序是否具有记录使用的SQL的方法(或者数据库后端本身,但这种方法不太容易处理)。了解对数据库执行的请求有助于我们将精力集中在重要的表上。

与大多数事情一样,此处适用80/20规则:20%的表将完成80%的有趣的事情。一旦弄清楚了,就几乎不需要图了。

尝试从http://www.minq.se/products/dbvis/下载DBVis,有一个专业版(不需要)和一个开放版本就足够了。

我们所要做的就是获取正确的JDBC数据库驱动程序,该工具只需按一个按钮即可将表和引用显示为正交,多层次,成圆圈;-)等。享受!

尝试使用SchemaSpy。我在一个相当复杂的数据库上运行它,结果令我感到非常满意,并提供了有关优化的建议。

dbdesc不是免费的,但是我听说过非常好的事情。它可以与几个主要数据库一起使用。

我很幸运,因为我还不必破译其他人的数据库模式。我使用了CodeSmith随附的一组模板。

查看已设置为起点的主键外键关系。

由于没有现有图表的数据库可能没有正式设置的关系,因此我查看表的结构和名称,并对可能与之相关的内容进行最佳猜测,然后深入研究结构以了解是否明显(但未定义)外键。我看一下存储的proc,以了解有关如何联接表以及查询哪些字段的想法。

虽然自动工具可以很容易地找出数据库,但我发现当我自己真正深入研究数据库的细节时,最终获得的理解要比从任何自动创建的图片获得的理解要好得多。

首先,我可以说我感到痛苦!
这是我的一些提示:

  • 通常,只有在设计人员正确定义了所有主键和外键的情况下,该工具才有用。因此请注意,该工具可能无法获取所有重要的关系。
  • 最有用的是查看客户端代码正在执行哪些查询。这不仅会告诉我们存在哪些关系,而且还会告诉我们最常用的表和关系-我们将在这里集中精力。

我对Aqua Data Studio进行逆向工程数据库架构有相当不错的经验。它具有丰富的功能,并支持更多的特殊数据库,例如Informix或者Sybase。