Database 我该如何设计这张桌子?

Database 我该如何设计这张桌子?,database,database-design,Database,Database Design,由于内存不足,我想编写一个简单的应用程序来存储表列信息,特别是表列的含义。现在我的桌子设计有问题了。我计划使该表具有以下列: id, table_name, column_name, data_type, is_pk, meaning id, fk_name, primary_table_id, foreign_table_id 但是这种设计不能表达外键关系。例如:表1.column1和表2.column3和表8.column5都具有相同的数据类型和含义,如何修改表设计以表达此信息(关系)

由于内存不足,我想编写一个简单的应用程序来存储表列信息,特别是表列的含义。现在我的桌子设计有问题了。我计划使该表具有以下列:

id, table_name, column_name, data_type, is_pk, meaning
id, fk_name, primary_table_id, foreign_table_id
但是这种设计不能表达外键关系。例如:表1.column1表2.column3表8.column5都具有相同的数据类型和含义,如何修改表设计以表达此信息(关系)

非常感谢

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

我只想在您的设计中添加一列“FK_column_ID”,它将在出现FK约束时保存对列ID的引用


另一种方法是创建数据库的副本作为DBDefinitions或类似的内容。

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

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

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

您可以尝试为此设计一个完全非规范化的模式,但我认为这严重超出了仅作为内存辅助的考虑。

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

甲骨文:

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

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

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

id, table_name, column_name, data_type, is_pk, meaning
id, fk_name, primary_table_id, foreign_table_id
并添加一个
fk_id
列来关联外键关系中使用的字段。这适用于单列外键和复合外键


或者,通过一些外交手段,告诉你的老板,如果你不能解决问题的根本原因,那么完成项目所需的时间将比预期的要长得多。首先,您需要花一些时间来实施一个无法充分执行的解决方案,然后您需要花更多的时间来实施一开始就应该实施的修复(在本例中是修复数据库)。

如果不允许您编辑数据库,那么您大概是在另一个独立的DBMS中创建的。我不认为这是一件简单的事情,你最好把它写在一个文本文档中

我想你需要不止一张桌子。如果创建一个表的表:

id,表名,含义

然后是一个列表:

id,列名,数据类型,含义

然后可以创建链接表:

table\u id,column\u id是pk,意思是


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

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

我使用一个页面来定义表/列,并根据需要使用额外的页面来处理FK关系、查找值等

此应用程序的电子表格的一大优点是,根据需要在工作表中添加列,不需要时删除列


电子表格的索引功能也是v。当您要处理大量表时,此功能非常有用

我知道这并不能直接回答您的问题,但是使用数据库图怎么样?
我的记忆力也很差(我猜是年龄),墙上总是挂着最新的图表。

您可以显示所有表、字段和外键,还可以添加注释。

我使用PowerAMC(Sybase的又名PowerDesigner)数据库设计器,它还生成SQL脚本来创建数据库,对于遗留数据库可能不是很有用,但它将对数据库进行反向工程并自动创建图表(使图表可读可能需要一些时间).

我看不出你为什么要实现一些应用程序来存储一些信息。您也可以像OneNote或任何其他可用的管理器、开发wiki等一样使用smth:有很多方法可以存储信息,以便在将来查找时使用

如果可以进行一些内部更改,则可以将键的约束名称更改为可读模式,如table1\u colName\u table2\u colName

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


如果所有这些都不能解决您的问题,则需要更多关于您需要解决的具体问题的详细信息:)

SQL server是否默认已存储此信息?SQL server为每列都提供“Description”属性。我不确定他说的是SQLServer,而是一个通用数据库.H