Database design 用于向列添加注释的数据库设计模式

Database design 用于向列添加注释的数据库设计模式,database-design,design-patterns,hsqldb,Database Design,Design Patterns,Hsqldb,我正在设计一个新的数据库,目前有50个表。对于其中的许多表,我最终必须为每个元组的每一列存储一个“注释”。 目前我只找到了两种解决方案: 对于需要注释的表的每一列,添加一个“列注释”,例如: create table tab (id integer, A varchar(100), B varchar(200)) 将成为: create table tab (id integer, A varchar(100), A_note varchar(300), B varchar(200), B_n

我正在设计一个新的数据库,目前有50个表。对于其中的许多表,我最终必须为每个元组的每一列存储一个“注释”。 目前我只找到了两种解决方案:

  • 对于需要注释的表的每一列,添加一个“列注释”,例如:

    create table tab (id integer, A varchar(100), B varchar(200))
    
    将成为:

    create table tab (id integer, A varchar(100), A_note varchar(300), B varchar(200), B_note varchar(300))
    
  • 添加存储注释的表注释。。。就像这样:

    create table notes (id integer, table_name varchar(100), reference_id integer, reference_column varchar(100), note varchar(300)
    
  • 你能建议我其他的方法吗?
    如果您感兴趣,我正在使用HsqlDB。

    是的,单独的表是最好的选择


    我会为每个实际表创建一个注释表,如cmnt\u表或notes\u表。将其与主表具有相同的id,这样就可以很容易地在查询中进行联接。

    是的,单独的表是一种方法


    我会为每个实际表创建一个注释表,如cmnt\u表或notes\u表。将其与主表具有相同的id,这样就很容易在查询中进行联接。

    这在很大程度上取决于注释的稀疏程度,如果它们偶尔分散在所有表中,那么一个好的解决方案是使用一个表,其中包含注释,通过表名和字段名的组合对它们进行索引

    这将把对模式的注释添加移到只需要维护的一个表中,而不必接触原始表。可以对表和字段名列使用约束来限制哪些列可以包含注释

    我已经实现了一个非常成功的变体,将类型化标记添加到一个大型会计系统中

    如果单个表是令人厌恶的,考虑将该模式应用于表的簇。

    单个Notes表的一大优点是,如果人们正在按note内容查找,则可以搜索一个表。当人们把笔记放错地方时,这会非常有用

    扩展

    我认为要求为每列一个注释


    如果偶尔为列中的奇数单独行值存储可选注释(或标记)(即:附加注释的Excel模型),则可以通过为行添加常规整数键来扩展上述模型。这就是我第一次使用的模型。我对答案进行了简化,但后来意识到可能要求有误导性。

    这在很大程度上取决于笔记的稀疏程度,如果它们偶尔分散在所有表中,那么一个好的解决方案是让一个表包含笔记,通过表和字段名的组合对笔记进行索引

    这将把对模式的注释添加移到只需要维护的一个表中,而不必接触原始表。可以对表和字段名列使用约束来限制哪些列可以包含注释

    我已经实现了一个非常成功的变体,将类型化标记添加到一个大型会计系统中

    如果单个表是令人厌恶的,考虑将该模式应用于表的簇。

    单个Notes表的一大优点是,如果人们正在按note内容查找,则可以搜索一个表。当人们把笔记放错地方时,这会非常有用

    扩展

    我认为要求为每列一个注释


    如果偶尔为列中的奇数单独行值存储可选注释(或标记)(即:附加注释的Excel模型),则可以通过为行添加常规整数键来扩展上述模型。这就是我第一次使用的模型。我对答案进行了简化,但后来意识到可能这些要求有误导性。

    您应该将额外的数据存储在同一个表中。这是一种一对一的关系,拆分它们不会带来任何好处,只会带来复杂性。

    您应该将额外的数据存储在同一个表中。这是一种一对一的关系,拆分它们并没有什么好处,只会带来复杂性。

    你不会说这些笔记是干什么用的。如果每个注释都对该列进行了一般性描述,例如,名为EXPIRY_DATE的列有一个注释,说明“票据到期的日期”,那么HSQLDB 2.0中有一个内置的解决方案

    MYTABLE.EXPRIRY_日期的注释是“票证过期的日期”

    您可以使用一个信息模式表上的SELECT来检索tablename、columnname对的注释

    见指南:


    你不能说这些笔记是做什么用的。如果每个注释都对该列进行了一般性描述,例如,名为EXPIRY_DATE的列有一个注释,说明“票据到期的日期”,那么HSQLDB 2.0中有一个内置的解决方案

    MYTABLE.EXPRIRY_日期的注释是“票证过期的日期”

    您可以使用一个信息模式表上的SELECT来检索tablename、columnname对的注释

    见指南:


    尽管我认为这是一个很好的解决方案,但由于我必须使用HSQLDB,我想研究一下这个解决方案:添加一个列注释,定义为基数==列计数的VARCHAR数组。所以我将访问存储在数据库元数据中的列序号位置,以访问与列相关的注释。你认为呢?使用HSQLDB的数组特性来提供一个索引层有一个肤浅的吸引力,我必须花相当多的时间来研究它,以确保它是否安全(抱歉,没有时间,尽管这很有趣)。我的直接感觉是它不起作用——表和列名的组合标识了列。我还认为,使用列序号作为索引非常容易受到攻击——如果删除列会发生什么?是的,我知道重命名一行也会破坏索引,但安全修复要容易得多。虽然我认为这是一个很好的解决方案,因为我必须使用HSQLDB,但我想研究一下这个解决方案:添加一个列注释,定义为VARCHAR数组,基数==列计数。所以我将访问