我该如何设计这张桌子?

时间:2009-12-16 08:09:26

标签: database database-design

因为我的内存不好,所以我想编写一个简单的应用程序来存储表列信息,尤其是表列的含义。现在我的桌面设计有问题。我打算让表格包含以下列:

id, table_name, column_name, data_type, is_pk, meaning

但是这个设计 无法表达外键关系 。例如: table1.column1 table2.column3 table8.column5 都具有相同的数据类型和相同的含义,如何修改我的表设计来表达这些信息(关系)?

非常感谢!

PS: 事实上,最近我正在研究遗留应用程序。数据库设计不佳。外键关系不在数据库层上表示,而是在应用程序层上表示。现在我的老板不允许我们修改数据库。我们只需要使应用程序正常工作。所以我不能直接在数据库上做一些工作。

8 个答案:

答案 0 :(得分:3)

根据您的DBMS,您可以使用表/列上的注释来记录每个列的含义。大多数DBMS允许您执行某种注释。

如果你必须在桌子上有它,你有几个选择。

  • 自由文本如果这只是作为记忆辅助工具,它实际上并不需要机器可读。这使您更容易直接阅读/使用。
  • fk_id 存储此外键映射到的字段的ID。然后,您可以定义一个从该外键中提取含义列的视图。
  • 含义表将含义作为ID存储到单独的表中,并使用视图使其更易于使用。
  • 创建文档将其保留在文档中。这样你就可以将它打印出来并方便使用。

你可以尝试为此设计一个完全去规范化的模式,但我认为那些认真地过度思考一些只是作为记忆辅助的东西。

答案 1 :(得分:1)

我只想在你的设计中添加一个列“FK_Column_ID”,它将在FK约束的情况下保存对列ID的引用。

另一种方法是将数据库的副本创建为DBDefinitions或类似的东西。

答案 2 :(得分:1)

几乎所有DBMS都允许您将描述或注释附加到表,索引和列定义。

Oracle:

COMMENT ON COLUMN employees.job_id  IS 'abbreviated job title';

如果您将外键关系指定为架构的一部分,数据库将跟踪它们,并将为您显示它们。

答案 3 :(得分:1)

无法使用单个附加列定义复合外键关系。我建议您创建第二个表来定义外键,可能包含以下列:

id, fk_name, primary_table_id, foreign_table_id

并添加fk_id列以关联外键关系中使用的字段。这适用于单列外键和复合外键。

或者,在尝试外交时,告诉你的老板,如果你无法解决问题的根本原因,那么完成项目所需的时间将比预期的要长得多。首先,您将花费一些时间来实现一项无法充分执行的工作,然后您将花费更多时间来实现您应该首先实现的修复(在这种情况下是修复数据库。)

答案 4 :(得分:1)

如果您不允许编辑数据库,那么可能是您在另一个独立的DBMS中创建了这个数据库。我不认为你可以简单地实现这一点,你可能更好的只是在文本文档中写下来。

我认为您需要多个表格。如果您创建表格表:

id, table_name, meaning

然后是一个列表:

id, column_name, datatype, meaning

然后,您可以创建一个链接表:

table_id, column_id, is_pk, meaning

这将使您能够将相同的列链接到多个表 - 从而表示您的外键。正如我上面所说 - 它可能比它的价值更多的努力。

答案 5 :(得分:1)

FWIW,我经常这样做,我发现的最好的“简单应用程序”是电子表格。

我使用一个页面用于表/列defs,以及额外的页面,因为我需要它们用于FK关系,查找值等等。

此应用的电子表格的一大优点是在需要时向表格添加列,&当你不这样做时删除它们。

当您有大量表格可供使用时,电子表格的索引功能也很有用。

答案 6 :(得分:1)

我知道这不能直接回答你的问题,但如何使用数据库图表? 我的记忆力也很差(我猜年龄)我的墙上总是有最新的图表
您可以显示所有表格,字段和外键,还可以添加注释 我使用PowerAMC(又名来自Sybase的PowerDesigner)数据库设计器,它还生成用于创建数据库的SQL脚本,对遗留数据库可能不是很有用,尽管它会对数据库进行逆向工程并自动创建图表(可能需要一些时间)使图表可读。)

答案 7 :(得分:1)

我没有看到为什么你应该实现一些应用程序来存储一些信息的原因。您也可以使用像OneNote或任何其他可用组织者,开发维基等的smth。:有很多方法可以存储信息,以便在将来查找它时方便使用。

如果您可以进行一些内部更改,则可以将键的约束名称更改为可读模式,例如 table1_colName_table2_colName

至少你可以制作一些图表,无论是手工制作还是使用某些设计应用程序。

如果所有这些都无法解决您的问题,则需要更多详细信息来确定您需要解决的问题:)