你如何记录你的数据库结构?

31
许多数据库系统不允许对表和字段进行注释或描述,那么除了采用良好的命名约定之外,如何记录表/字段的用途呢?
(假设“优秀”的表和字段名称还不足以完全记录数据库中每个表、字段和关系的含义。)
我知道很多人使用UML图来可视化数据库,但我很少看到包括字段注释的UML图——如果有的话。然而,我在使用.sql文件内部注释方面有很好的经验。这种方法的缺点是需要手动更新.sql文件,以跟随数据库结构随时间变化——但如果您这样做,还可以将其纳入版本控制。
我见过的其他一些技术是单独编写描述数据库结构和关系的文档,以及在ORM代码或其他数据库映射代码中手动维护注释。
你过去是怎么解决这个问题的?存在哪些方法,它们各自的优缺点是什么?在“完美的世界”中,你希望如何解决这个问题?
更新
正如其他人所指出的,大多数流行的SQL引擎确实允许注释,这非常棒。奇怪的是,在我过去参与的项目中,人们似乎并没有多少使用这些功能。
12个回答

11

MySQL 允许在表和行上添加注释。PostgreSQL 也可以。从其他答案得知,Oracle和MSSQL也有注释。

对于我来说,使用UML图表来快速查看字段名称、类型和约束的组合,以及一个外部文档(TeX,但可以是任何格式)以扩展描述所有与数据库相关的内容 - 特殊值、字段注释、访问说明等等 - 是最好的选择。


编写一个脚本来从MySQL数据库中提取结构和注释,并生成一组HTML文档来描述该数据库是相当简单的。 - Colonel Sponsz
4
我正在寻找这样的脚本。书面的。 - greenoldman
我使用Toad制作我的图表、报告和SQL创建/删除脚本。有一个免费版本。虽然不是脚本,但它非常适合这个目的。 - Termiux

8
希望这个过程对您有所帮助... 在我们开发相对大型的数据库时(约100张表,总共约350个对象),我们采用了以下过程:
  • 要求开发人员使用扩展属性为所有对象添加详细信息。
  • 管理员拒绝任何没有扩展属性的DDL。
  • 每天使用第三方工具通过命令行界面自动生成可视化文档。我们使用了ApexSQL Doc并且效果非常好,但我也在另一家公司成功地使用了Red Gate的SQL Doc。
这个过程确保我们有所有的对象文档,并且文档是最新的。
虽然有点困难,但让开发人员始终写好的注释仍是重要的;)

6

我使用附加在表格和列上的注释。 SchemaSpy 是一个很棒的工具,可以生成包括注释在内的模式的 HTML 文档文件。


6

2

曾经,我编写了一个基本的SQL解析器,它可以解析CREATE TABLE语句并去除特定格式的注释。然后,将这些注释后处理为LaTeX源代码并呈现为PDF格式。这个想法来自于Javadoc,并被用于为这个产品创建文档。之后,数据字典功能被集成到数据仓库管理器中,修改后的LaTeX生成器被用于从数据仓库管理器呈现数据字典。

在另一个项目中,我使用了Visio——与Visual Studio Enterprise Architect捆绑的版本可以实现向前设计数据库。生成的SQL具有表和列注释,这些注释被呈现为注释字符串,非常容易解析。我编写的工具生成了可以包含在使用FrameMaker构建的规范文档中的MIF文件。

如果您有像Powerdesigner这样的代码库工具,您可以在其中维护数据模型,并获得包括您输入的文档的存储库报告。如果您需要更深入地将数据字典与功能规范集成(对于涉及派生值计算和复杂ETL的数据仓库系统非常有用),您仍然可以提取元数据并编写实用程序来生成将数据字典集成到规范文档中的内容。这也允许数据字典项与其他规范文档进行交叉引用,并生成覆盖数据字典定义和相关文档的索引,例如计算方式及其示例的规范。


1
您的“此产品”链接已失效。 - Dan Bechard

1
我像注释程序一样注释我的数据库。通过在源代码(包含DDL指令的SQL文件)中编写良好的(希望如此)注释。
使用SQL COMMENT是另一个可能性。它们的好处是它们始终与您的对象一起,并且与它们一起备份等。坏处是它们更有限(例如长度)。

1

最近我开始写Markdown文档,其中包括链接到单个表格的.sql文件(表格和字段都希望以直观易懂的名称和大量注释命名)。

我使用以下命令将单个表格模式存储在版本控制中:

mysqldump --no-data --tab=./tables dbname

单个表格的模式可以让您查看注释、索引、唯一键等,因此相当容易理解(至少这是想法)。

主要的Markdown文档中有像“user”表格这样的超链接,因此读者可以轻松地转到不同的表格。


1
我们编写了一个Word文档,列出了表格、字段以及它们的作用。这个文档还配备了一张图表,展示了所有内容之间的联系和关联。实际上,这是一个非常简单的文档,只是一堆表格,其中包含字段名称、数据类型和用途。

你如何确保文档与当前的实现/生产环境保持同步? - Anders Sandvig
Anders - 这个结构很少改变(幸运的是!)我们通常在流程开始时使用它,以便我们可以绘制后端集成点。 - user12035

1

我正在使用 Firebird,它为所有系统对象(表、列、视图、存储过程和参数、触发器等)提供了描述字段。这很好,因为你可以轻松地与他人分享(文档随数据库一起,不会分开),而且你永远不会失去它。

大多数 Firebird 管理工具都允许你编辑这些描述,还有一些专业工具(例如 IBDesc)可以创建漂亮的 HTML 或 PDF 报告,你可以轻松地打印(针对某些或所有表)。


1

这是一种非常简单的方法,但我使用了一对维基页面:一个包含数据库的mysqldump,另一个以稍微类似英语的格式编写。

对于我所做的项目,这已经足够了(通过数十个表级别)。我不知道它在更大的项目中(比如数百个表)是否能很好地扩展,但到目前为止它一直很好用。


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