因为我的内存不好,所以我想编写一个简单的应用程序来存储表列信息,尤其是表列的含义。现在我的桌面设计有问题。我打算让表格包含以下列:
id, table_name, column_name, data_type, is_pk, meaning
但是这个设计 无法表达外键关系 。例如: table1.column1 和 table2.column3 和 table8.column5 都具有相同的数据类型和相同的含义,如何修改我的表设计来表达这些信息(关系)?
非常感谢!
PS: 事实上,最近我正在研究遗留应用程序。数据库设计不佳。外键关系不在数据库层上表示,而是在应用程序层上表示。现在我的老板不允许我们修改数据库。我们只需要使应用程序正常工作。所以我不能直接在数据库上做一些工作。
答案 0 :(得分:3)
根据您的DBMS,您可以使用表/列上的注释来记录每个列的含义。大多数DBMS允许您执行某种注释。
如果你必须在桌子上有它,你有几个选择。
你可以尝试为此设计一个完全去规范化的模式,但我认为那些认真地过度思考一些只是作为记忆辅助的东西。
答案 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 。
至少你可以制作一些图表,无论是手工制作还是使用某些设计应用程序。
如果所有这些都无法解决您的问题,则需要更多详细信息来确定您需要解决的问题:)