65.9K
CodeProject 正在变化。 阅读更多。
Home

数据库可视化

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (10投票s)

2006年5月29日

7分钟阅读

viewsIcon

85557

downloadIcon

2848

本文旨在创建一个简单的工具来可视化数据库表和关系,生成一个可供参考的数据库图。

带颜色的示例输出

带关系的示例输出

不带关系的示例输出

目录

本文摘要

当处理包含数百个表的大型项目时,理解数据库中的数据流需要花费一些时间。尤其是在没有文档可供参考的情况下。一种可能的情况是遗留代码需要维护或迁移。在浏览了几个表之后,在脑海中维护好它们之间的关系会变得非常麻烦。本文旨在创建一个简单的工具来可视化数据库表和关系,生成一个可供参考的数据库图。

主要目标是根据需要自动生成数据库关系的文档。使用 WinGraphViz 库的原因是为了确保数据库关系不会有太多交叉,并且最终结果看起来整洁且具有可呈现性。

可视化概念

"一图胜千言"。俗话说,对于任何复杂的实体,最好有一张图来轻松理解它。特别是在那些在逻辑层面进行大量操作而不是处理物理对象的领域。实体关系图、用例图、数据库图、组织结构图,甚至家谱都适合用一种能够很好地布局关系、使其易于区分的**可视化方法**。

一个好的可视化算法可以让用户看到在原始数据形式下难以或不可能看到的一个模式。这种可视化被称为“平面图”。在开发可视化工具时,有三个主要方面需要注意。它们是

  • 图布局
  • 与用户的交互,以及
  • 演示

我们将使用 WinGraphViz 库来解决上述所有问题。WinGraphviz 是一个免费软件,基于 AT&T 的Graphviz项目。图布局由算法处理,我们将以**SVG**格式生成输出,用于处理交互和呈现部分。

平面图论

在图论中,平面图是指可以绘制而不发生边相交的图。有兴趣了解详细信息的读者,请下载此文件。图由两部分组成:顶点和边。顶点只是标签,例如数字,边是顶点之间的连接。边也可以有方向,从而创建一个有向图,简称**Digraph**。WinGraphViz 库旨在创建这样的有向平面图。由于它是一个 COM 库,我们将使用它来创建我们的数据库可视化工具。作为图优化可以做什么的示例,请查看以下图表。

该图片来自论文:自动图绘制。该网站还提到了自动图库,或简称AGD Library,也可用于可视化目的。

我们将使用类似的图绘制算法来使我们的输出图整洁且清晰。

关于SVG的说明

SVG 是一种用 XML 描述二维图形和图形应用程序的语言。SVG 文件小巧,可在 Web、印刷品和资源有限的手持设备上提供高质量图形。此外,SVG 支持脚本和动画,因此非常适合交互式图形。Adobe SVG Viewer是免费的,并可作为 ActiveX 控件使用,使我们可以在浏览器或 Windows 应用程序中查看输出。SVG 输出强烈推荐,因为它具有**缩放功能**。由于 SVG 是基于矢量的,因此**输出的清晰度将保持不变**,无论您是放大还是缩小。

关于使用 Adobe SVG Viewer 的提示
  • 使用 Ctrl 键放大。
  • 使用 Shift + Ctrl 键缩小。
  • 使用 Alt 键进行平移。

步骤 1: 数据库连接

为了实现这部分,我们将使用“SQLSrvEnumerator”类,该类可在此处找到。选择服务器组合框后,网络上可用的服务器列表将被枚举并显示。将获取用户凭据以登录所选服务器。数据库列表将被枚举并自动填充到组合框中,然后我们从中选择一个。数据库连接此处使用 ODBC 处理。其余操作使用 ADO 完成。虽然也可以使用 ADO 进行连接,但在决定使用 ADO 而不是 ODBC 后,我懒得更改代码了。

步骤 2: 选择所需数据

在这个简单的操作中,我们将选择所需的列。加载页面后,“表”组合框将根据上一步数据库的选择自动填充。从列表中选择一个表后,“列”组合框将填充所选表中的所有列。从组合框中选择“全部”值将选择表中的所有列。您可以根据我们希望图表的外观来向上或向下移动列名。此选项纯粹用于美观目的。

步骤 3: 选择关系

此操作对于我们图表的生成至关重要。在此步骤中,我们需要选择表之间的关系。首先选择表,然后选择它们实际关联的列。例如,Table1->PK 和 Table2->FK。此处输入的关联用于生成我们的可视化。

步骤 4: 可视化和代码生成

现在我们已经到达最后一步。您可以根据需要输入任何注释。“生成查询”按钮顾名思义。它会根据我们选择的表、列和关系生成一个 SQL 查询。目前它只生成一个简单的查询,在本文的第一个升级版中,我保证会做得更好。它是在事后添加的,因为本文只专注于可视化部分。“图像类型”组合框支持 JPG、SVG、PNG、GIF 和 EMF 等各种图像格式。根据您的选择,将生成输出图。“显示关系标签”复选框会在图中显示选定的关系。

CVisualization 类

CVisualization 类封装了图绘制的所有功能。可用的方法有:

  • void AddComment(CString strComment);
  • void AddTable(CString strTableName,CStringArray &strArrayFields);
  • void AddLink(CString strNodeOne, CString strNodeTwo, CString strLabel,CString strColor = "black");
  • BOOL SaveToFile(int nImageFormat,BOOL bOpenFile);

相关链接

结论

源代码中提供的CVisualization类封装了我们数据库可视化工具所需的所有绘图功能和输出功能。请安装Wingraphviz库才能正确执行我们的工具。

当前限制

此工具只能处理简单关系。它无法处理嵌套的Select语句。用于选择表和列的方法也相当粗糙。可视化仅生成指向表的链接,而不是实际的键。

此工具仅在 SQL Server 2000 下进行了测试,未在其他数据库上进行测试。

建议功能

  1. 处理嵌套的Select语句。
  2. 处理复杂关系。
  3. 更直观地表示表和列的选择。
  4. 基于所选关系的代码生成(客户端和服务器)。
  5. 复杂的 SQL 查询生成。

您也可以在我的网站找到此工具的最新副本。

免责声明

此工具并非旨在取代 SQL Server 数据库图设计器。它只是一个补充。在数据库中关系维护不当以及需要更好的可视化表示的情况下,可以使用此工具。

© . All rights reserved.