如何记录数据库

时间:2008-12-15 18:25:22

标签: sql oracle documentation

(注意:我意识到这接近How do you document your database structure?,但我认为它不相同。)

我已经开始在一个拥有数百个表和视图的数据库的地方工作,所有这些都使用含有极少元音的神秘名称,而且没有文档。他们也不允许对数据库模式进行无偿更改,也不能触摸除我自己的机器上的测试数据库之外的任何数据库(它会被吹走并定期重新创建),因此我无法添加可以帮助任何人的注释。

我尝试使用“Toad”来创建一个ER图,但是在让它连续运行48小时之后它仍然没有产生任何可见的东西,我需要我的电脑。我正在与其他一些最近招聘的人员交谈,我们都建议每当我们弄清楚某个特定表格或其中某些列的含义时,我们都应该在开发人员维基中更新它。

那么这样做的好方法是什么?只需列出表格/视图及其列,并在我们去的时候填写它们?我必须掌握的基本工具是Toad,Oracle的“SQL Developer”,MS Office和Visio。

10 个答案:

答案 0 :(得分:58)

根据我的经验,ER(或UML)图表并不是最有用的工件 - 大量的表格,图表(特别是逆向工程图表)往往是一个令人费解的混乱,没有人从中学到任何东西。

对于我的钱,一些好的人类可读的文档(可能补充了系统较小部分的图表)将给你最大的里程数。对于每个表格,这将包括:

  • 表格的含义及其功能使用方式的说明(在用户界面等)
  • 每个属性的含义说明,如果不明显
  • 从此表到其他人的关系(外键)的说明,反之亦然
  • 其他约束和/或触发器的说明
  • 主要观点的补充说明&触摸表格的过程,如果他们没有很好地记录

有了上述所有内容,请不要为了记录而记录文档 - 重述显而易见的文档只会以人的方式进行。相反,首先关注那些困扰你的东西,并花几分钟时间写出清晰简洁的解释。这将帮助您思考,并且大量帮助其他第一次遇到这些表格的开发人员。

正如其他人所提到的,有很多工具可以帮助您管理这些工具,例如Enterprise ArchitectRed Gate SQL Doc以及各个供应商提供的内置工具。但是,虽然工具支持是有用的(甚至是更重要的,在更大的数据库中),但是理解解释数据库概念模型的艰苦工作才是真正的胜利。从这个角度来看,你甚至可以在一个文本文件中做到这一点(尽管在Wiki表单中进行这项工作会让几个人合作逐步添加到那些文档中 - 所以,每当有人想出某些东西时,他们就可以将它添加到不断增长的身体中文件即时)。

答案 1 :(得分:7)

要考虑的一件事是DBMS中内置的COMMENT工具。如果您对DBMS本身中的所有表和所有列添加注释,那么您的文档将位于数据库系统中。

使用COMMENT工具不会对架构本身进行任何更改,它只会将数据添加到USER_TAB_COMMENTS目录表中。

答案 2 :(得分:7)

我们使用Enterprise Architect作为数据库定义。我们包括存储过程,触发器和UML中定义的所有表定义。该计划的三大亮点是:

  1. 从ODBC连接导入UML图。
  2. 立即为整个数据库生成SQL脚本(DDL)
  3. 生成数据库的自定义模板文档。
  4. 您可以在UML工具中编辑类/表定义,并生成包含文档的完全描述性图片。自动生成的文档可以是多种格式,包括MSWord。我们的架构中只有不到100个表,并且它是可管理的。

    作为开发人员,我在10多年的时间里从未对任何其他工具印象深刻。 EA一举支持Oracle,MySQL,SQL Server(多个版本),PostGreSQL,Interbase,DB2和Access。任何时候我遇到问题,他们的论坛都会及时回答我的问题。强烈推荐!!

    当DB更改进来时,我们在EA中创建,生成SQL,并将其检入我们的版本控制(svn)。我们使用Hudson进行构建,当它看到您修改了签入的sql时,它会自动从脚本构建数据库。

    Mostly stolen from another answer of mine

答案 3 :(得分:7)

在我们的团队中,我们采用了有用的方法来记录传统的大型Oracle和SQL Server数据库。我们使用Dataedo来记录数据库模式元素(数据字典)和创建ERD图。 Dataedo附带文档存储库,因此您的所有团队都可以在线记录和阅读最新文档。而且您不需要干扰数据库(Oracle注释或SQL Server MS_Description)。

首先导入模式(所有表,视图,存储过程和函数 - 使用触发器,外键等)。然后定义逻辑域/模块并将所有对象(拖放)分组到它们中,以便能够分析和处理较小的数据库块。对于每个模块,您可以创建ERD图并编写顶级描述。然后,当您发现表格和视图的含义时,请为每个表格写一个简短的描述。对每列执行相同操作。 Dataedo使您可以为每个对象和列添加有意义的标题 - 如果对象名称含糊或无效,则它很有用。 Pro版本使您能够描述外键,唯一键/约束和触发器 - 这对于理解数据库很有用但不是必不可少的。

您可以通过用户界面访问文档,也可以将其导出为PDF或交互式HTML(后者仅在专业版中可用)。

这里描述的是一个连续的过程而不是一次性的工作。如果您的数据库发生了变化(例如,新列,视图),您应该定期同步文档(使用Dataedo进行几次点击)。

参见示例文档: http://dataedo.com/download/Dataedo%20repository.pdf

有关文件处理的一些指导原则:

图:

  • 保持您的图表小巧可读 - 只需包含重要的表格,关系和列 - 只有那些有意义理解大图片的图表 - 主要/业务键,重要属性和关系,
  • 为图表中的关键表使用不同的颜色
  • 每个模块可以有多个图表,
  • 您可以将图表添加到最重要的表格/大多数关系的描述中。

说明:

  • 不要记录显而易见的事项 - 不要为document.date列写下描述“文档日期”。如果没有任何意义可以添加,请将其留空,
  • 如果存储在表格中的对象具有类型或状态,最好将它们列在表格的一般描述中,
  • 定义预期的格式,例如。 “mm / dd / yy”表示存储在文本字段中的日期,
  • 列出所有已知/重要的值及其含义,例如:对于状态列,可能是这样的:“文档状态:A - 活动,C - 已取消,D - 已删除”,
  • 如果表中有任何API - 应该用于读取数据的视图和插入/更新数据的函数/过程 - 将其列在表的描述中,
  • 描述行/列的值来自哪里(过程,表单,界面等),
  • 对不应使用的列使用“[deprecated]”标记(或类似标记)(标题列对此有用,请说明应在说明字段中使用哪个字段)。

答案 4 :(得分:4)

答案 5 :(得分:3)

维基解决方案支持超链接和协作编辑,但维基只有保持组织和更新的人才一样好。无论您使用什么工具,都需要有人来获取文档项目的所有权。该人可能需要其他知识渊博的人填写详细信息,但是一个人应该负责组织信息。

如果您无法使用工具通过逆向工程生成ERD,则必须使用TOAD或VISIO手动设计ERD。

任何包含数百个对象的ERD对于开发人员来说可能都是无用的,因为对于这么多的框和行来说它是不可读的。在具有如此多对象的数据库中,可能存在几十个表和视图的“子系统”。因此,您应该制作这些子系统的自定义图表,而不是期望一个工具为您完成。

您还可以设计一个伪ERD,其中一组表由一个图中的单个对象表示,该组在另一个图中展开。

单个ERD或一组ERD不足以记录这种复杂性的系统,只需一个类图就足以记录OO系统。您必须使用ERD作为插图来编写文档。您需要有关每个表,每列以及表之间关系的含义和用法的文本描述(特别是在这些关系是隐式而不是由引用完整性约束表示的情况下)。

所有这些都是很多工作,但值得。如果有一个清晰且最新的地方可以记录架构,整个团队将从中受益。

答案 6 :(得分:3)

这个答案扩展了Kieveli的上述内容,我对此表示赞同。如果您的EA版本支持对象角色建模(概念设计,逻辑设计= ERD),请对其进行逆向工程,然后使用它给您的富有表现力的丰富度填写模型。

便宜且重量更轻的选项是从MS免费下载Visiomodeler,并对此做同样的事情。

ORM(称之为ORMDB)是我发现的唯一一个支持和鼓励与非IS利益相关者就BL对象和关系进行数据库设计对话的工具。

现实检查 - 在生成DDL的过程中,它会通过一个完整的ERD阶段,在这个阶段,您可以满足您关于它是否有任何麻烦的问题。它没有。它可能会向您展示您自己设计的ERD中的弱点。

ORMDB是一个经典案例,原则是工具越概念化,市场越小。女孩们只是想玩得开心,程序员只想编码。

答案 7 :(得分:1)

由于您可以与同一船上的开发人员合作,我建议他们最容易地向他们询问他们认为能够传达所需信息的信息。我的公司有超过100个桌子,我的老板给了我一个ERD,用于所有连接的特定表格。同样,你可能想尝试将一个大规模的ERD分解成一堆较小的,可管理的ERD。

答案 8 :(得分:1)

如果向最终用户描述您的数据库是您的主要目标Ooluk Data Dictionary Manager可以证明是有用的。它是一个基于Web的多用户软件,允许您将描述附加到表和列,并允许对这些描述进行全文搜索。它还允许您使用标签对表进行逻辑分组,并使用这些标签浏览表。可以标记表和列以查找数据库/数据库中的类似数据项。

该软件允许您使用API​​将元数据信息(如表名,列名,列数据类型,外键)导入其内部存储库。对JDBC数据源的支持是内置的,并且可以在API源在ASL 2.0下分发时进一步扩展。它编码为从许多RDBMS读取COMMENTS / REMARKS。您始终可以手动覆盖导入的信息。您可以使用自定义字段扩展有关表和列的信息。

数据字典管理器使用“数据对象”和“属性”术语而不是表和列,因为它不是专门为关系数据库设计的。

注释

  • 如果描述数据库的技术方面,例如触发器, 索引,统计很重要这个软件不是最好的选择。 然而,可以将技术解决方案与此相结合 软件使用超链接自定义字段。
  • 该软件不会产生ERD

披露:我在开发此产品的公司工作。

答案 9 :(得分:0)

嗯,一张图片说了千言万语,所以我建议你创建一个ER图表,你可以一目了然地查看表格之间的关系,这是一个很难用纯文字描述的东西。

您不必在一个图表中执行整个数据库,而是将其分解为多个部分。我们在工作中使用Visual Paradigm,但EA是ERWIN的一个很好的选择,毫无疑问,还有很多其他的同样好。

如果您有耐心,那么使用html来记录表格和列会使您的文档更容易访问。