在我们的数据库中,我们有许多带有'Notes'列的表。这是重要的功能,但对于大多数行,Notes的值为null。这些表有很多列,我们希望删除一些列,以便更好地阅读。
我们可以为每个具有notes列的表添加一个Notes表。但这会造成一种不同类型的混乱 - 太多的小桌子。
我的想法是创建一个通用的Notes表和一个引用表。 Notes表将有一个用于notes文本的列,一个用于链接到的行的id的列,以及一个用于引用表的外键。参考表将为我们需要注释的每个表都有一个文本值。使用这两个表格,我们应该能够将笔记链接回它来自哪个表格和列。
通过使用此解决方案,我们从笔记中删除任何空值的情况,并减少我们的一些表。所有这些都是两张额外桌子的适中价格。然而,对我来说,感觉非常'hacky'。从数据库管理的角度来看,使用“通用”id列或其他表的引用表是不是一个坏主意?
答案 0 :(得分:3)
在SQL Server中管理对不同实体的引用可能非常具有挑战性。相比之下,Postgres支持继承,这使得这更加简单。
因此,我的建议是在您需要备注的每个实体中添加notes
列。如果需要查看所有音符,可以添加视图以将所有音符组合在一起。
这对性能或数据大小的影响极小。 varchar
列没有额外的开销,除了额外的NULL
位 - 这是非常小的。
答案 1 :(得分:0)
IMO,管理两个表的另一个解决方案并没有带来很高的效率,但却增加了解决方案的复杂性。您应该坚持原始表中的notes列,数据类型为varchar。
通用id列本身并不坏,但使用它通常会给出糟糕/糟糕的设计气味。
答案 2 :(得分:0)
另外,对于SQL Server,您可以将稀疏用于注释列以减小大小。 但我自己也采用了类似的方法。 (注意列需要许多列来写info / changerequest / lockcomment。但通常从未使用过)。 工作正常,可以在源代码中进行通用编程。 但是如果你每张桌子只需要一个评论栏,那么木头就更喜欢稀疏