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

时间:2008-10-09 08:23:02

标签: sql database documentation relational

许多数据库系统不允许对表和字段进行注释或描述,那么除了明显具有良好命名约定外,如何记录表/字段的用途呢?

(我们假设现在“优秀”的表和字段名称不足以记录数据库中每个表,字段和关系的完整含义。)

我知道很多人使用UML图来可视化数据库,但我很少 - 如果见过UML图包括字段注释。但是,我在.sql文件中使用评论方面有很好的经验。这种方法的缺点是,随着数据库结构随时间的变化,它需要手动保持.sql文件的最新状态 - 但如果这样做,您也可以将其置于版本控制之下。

我见过的其他一些技术是描述数据库结构和关系的单独文档,以及在ORM代码或其他数据库映射代码中手动维护的注释。

过去你是如何解决这个问题的?存在哪些方法以及与它们相关的各种利弊?您如何在“完美的世界”中解决这个问题?

更新

正如其他人所指出的那样,大多数流行的SQL引擎实际上都允许注释,这很好。奇怪的是,人们似乎并没有太多使用这些功能。至少不是我过去参与的项目。

12 个答案:

答案 0 :(得分:9)

MySQL allows对表和行的评论。 PostgreSQL does也是如此。从其他答案来看,Oracle和MSSQL也有评论。

对我来说,UML图的组合可以快速刷新字段名称,类型和约束,以及外部文档(TeX,但可以是任何格式),扩展描述与数据库相关的所有内容 - 特殊值,字段评论,访问笔记,无论什么 - 效果最好。

答案 1 :(得分:8)

迟到但希望有用...... 这是我们在开发相对较大的数据库时使用的过程(大约100个表和大约350个对象)

  • 开发人员需要使用扩展属性向所有对象添加详细信息。
  • 管理员拒绝任何没有扩展属性的DDL
  • 第三方工具用于每天通过命令行界面自动生成可视化文档。我们使用ApexSQL Doc并且它运行得很好,但我也成功地使用了其他公司的Red Gate的SQL Doc。

此过程确保我们记录所有对象并记录最新文档。

但困难的是让开发人员始终如一地写好评论;)

答案 2 :(得分:6)

SQL Server具有可以处理此问题的扩展属性。

本文介绍如何在SQL Sever中进行设置 http://www.developer.com/db/article.php/3677766

MSDN Reference

它可以与RedGate SQL Doc一起使用来创建一个很好的数据字典。

答案 3 :(得分:5)

我使用附加到表和列的注释。 SchemaSpy是一个很棒的工具,用于从您的架构生成html文档文件,包括注释。

答案 4 :(得分:2)

有一次,我编写了一个基本的SQL解析器,它将解析CREATE TABLE语句并删除特殊格式的注释。然后将这些后处理后转换为LaTeX源并呈现为PDF。这受Javadoc的启发,用于创建This product的文档。随后,仓库管理器中内置了数据字典功能,并使用LaTeX生成器的修改版本从仓库管理器中呈现数据字典。

在我使用Visio的另一个项目上 - Visual Studio Enterprise Architect附带的版本将转发工程师数据库。这样生成的SQL具有在注释字符串中呈现的表和列注释,这些注释字符串相当简单。我编写的工具生成了MIF文件,这些文件包含在使用FrameMaker构建的规范文档中。

如果您拥有Powerdesigner等存储库工具,则可以在其中维护数据模型并获取包含您输入的文档的存储库报告。如果您需要将数据字典与功能规范进行更深入的集成(对于ETL很复杂且涉及导出值的重要计算的数据仓库系统非常有用),您仍然可以提取元数据并编写实用程序以生成将集成数据的内容字典成规范文档。 这还允许数据字典项和其他规范文档之间的交叉引用以及覆盖数据字典定义和相关文档的索引的生成,例如使用示例计算某些内容的规范。

答案 5 :(得分:1)

我们写了一个单词文档,列出了表格,字段以及所有内容。这由一个图表支持,该图表显示了所有链接/彼此之间的关系。这真的是一个非常简单的文档,只是一大堆表字段名称>数据类型>目的

答案 6 :(得分:1)

我正在使用Firebird,其中包含所有系统对象(表,列,视图,过程和参数,触发器等)的描述字段。这很好,因为您可以轻松地与其他人共享它(docs go with数据库,而不是单独的),你永远不会失去它。

大多数管理员。 Firebird的工具允许您编辑这些描述,并且有一些专门的工具(例如IBDesc)可以创建可以轻松打印(适用于部分或全部表格)的精美HTML或PDF报告。

答案 7 :(得分:1)

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

对于我参与过的项目,这已经足够了(通过几十个表级)。我不知道它可以扩展到更大的项目(例如在数百个表中),但到目前为止一直很好。

答案 8 :(得分:1)

我在评论我的节目时评论我的数据库。通过在源代码中编写好的(我希望)注释(包含DDL指令的SQL文件)。

使用SQL COMMENT是另一种可能性。对他们来说,好处是他们总是随身携带物品,与他们一起备份等等。坏事是他们更受限制(例如长度)。

答案 9 :(得分:0)

由于我们使用Rational Software Architect,我们使用其数据发现功能来记录我们的数据库,然后从那里注释它们。

答案 10 :(得分:0)

在Oracle中,您可以对表进行注释,并将其存储在数据字典中。

但是,我将所有表格,列,索引注释存储在一个非常旧版本的ERWin中。它是真实的主要来源,并生成DDL来创建表格等。从那里,我可以将其提取到word文档或pdf中。

答案 11 :(得分:0)

我最近转向编写markdown文档,其中包括链接到单个表.sql文件(其中表和字段希望直观地用大量注释命名)。

我使用以下命令将各个表模式保留在版本控制中:

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

单个表的模式允许您查看注释,索引,唯一键等,因此是相当自我解释的(至少这是个想法)。

主降价文档具有超链接,例如遍及用户表,因此读者可以轻松转到不同的表。