2009-12-16 29 views
0

因为我的内存不足,我想编写一个简单的应用程序来存储表列信息,特别是表列的含义。现在我的桌子设计出现了问题。我计划让该表有以下栏目:我应该如何设计这张桌子?

id, table_name, column_name, data_type, is_pk, meaning 

但是这种设计无法表达的外键关系。例如:table1.column1table2.column3table8.column5都具有相同的数据类型和相同的意思,我怎么能修改我的表的设计来表达这种信息(关系)?

非常感谢!

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

+1

没有SQL服务器存储这些信息已经默认? – Kimvais 2009-12-16 08:16:17

+0

SQL Server为每列执行“描述”属性。我不确定他是在谈论SQLServer,而是一个通用数据库。 – Faruz 2009-12-16 08:19:53

+0

嗨Kimvais,我没有使用SQL服务器,我想写这个应用程序仅供我个人使用。例如,我可以在这个简单的应用程序中保存我的生产数据库元数据。修改生产数据库设计并不方便。 – 2009-12-16 08:23:21

回答

3

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

如果你必须在你的表中有它,你有几个选择。

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

你可以尝试为此设计一个完整的非标准化模式,但我认为这是认真的过度思考一些只是意味着记忆辅助的东西。

1

我只是将一列添加到您的设计“FK_Column_ID”,该列将在FK约束的情况下保存对列ID的引用。

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

+0

嗨法鲁兹, 我已经考虑过这种方式。如果是这样,我该如何编写一个查询来获取所有具有相同含义的列?也就是说,在我的例子中,我如何获得column1,column3和column5? – 2009-12-16 08:26:01

+0

你可以“分组”的意思。但我真的觉得意思应该是自由文本,不应该涉及条件。 Column3&Column5可能会指向我们添加的新字段中的Column1,因此您可以通过该字段获取 – Faruz 2009-12-16 08:41:45

1

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

甲骨文:

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

如果指定为模式的一部分外键关系,该数据库将保持对它们的跟踪,并显示它们。

+0

实际上,最近我正在开发一个遗留应用程序。数据库设计不佳。外键关系不在数据库层上表示,而在应用程序层上表示。现在我的老板不允许我们修改数据库。我们只需要让应用程序工作。所以我无法直接在数据库上做一些工作。 – 2009-12-16 08:30:49

+0

在这种情况下,我与亚当:创建(文本)文档。 – Thilo 2009-12-16 08:36:05

1

无法使用单个附加列定义复合外键关系。我会建议你创建第二个表来定义外键,或许有以下栏目:

id, fk_name, primary_table_id, foreign_table_id 

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

另外,有些尝试外交时,告诉你的老板,如果你不能解决问题的根本原因,那么完成项目所需的时间将比预期长得多。首先,您需要一些时间来实施一项工作,而这项工作将无法充分发挥作用,那么您将需要更多时间来实施您应该首先实施的修复程序(在这种情况下,修复数据库)。

1

如果你不允许编辑数据库,那么你可能想在另一个独立的DBMS中创建它。我不认为你可以简单地达到目标,你可能会更好地将它写在文本文件中。

我认为你需要多个表。如果创建表的表:

id, table_name, meaning

然后列一个表:

id, column_name, datatype, meaning

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

table_id, column_id, is_pk, meaning

这将使您可以将同一列链接到多个表 - 即expr嘲笑你的外键。正如我上面所说的 - 它可能比它的价值更努力。

1

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

我使用的表/列DEFS一个页面,多余的页面,因为我需要他们的东西像FK关系,查找值等

一个关于这个应用程序电子表格伟大的事情,是添加列当你需要它们的时候去除它们,&当你不需要时去除它们。

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

1

我知道这并不直接回答你的问题,但如何使用数据库图?
我的内存也很差(我想我的年龄),而且我的墙上总是有最新的图表。

您可以显示所有表,字段和外键,并添加注释。
我使用PowerAMC(又名PowerDesigner from Sybase)数据库设计器,它也生成SQL脚本来创建数据库,可能对遗留数据库不是很有用,尽管它会逆向设计数据库并自动创建图表(可能需要一段时间让图表可读)。

+0

如何在physicam模型图中显示表格栏的注释? – egor7 2016-10-27 11:28:29

1

我不明白为什么你应该实现一些应用程序来存储一些信息。你也可以像OneNote或任何其他可用的组织者,开发wiki等一样使用平板电脑:有很多方法可以存储信息,以便将来查找时方便使用。

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

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

如果这一切都没有解决您的问题,因此必须对您需要解决:)正是一些细节