繁体   English   中英

SQL表中的通用ID列是一个坏主意吗?

[英]Is a generic ID column in a SQL table a bad idea?

在我们的数据库中,我们有许多带有“注释”列的表。 这是重要的功能,但是对于大多数行,Notes的值为null。 这些表有很多列,我们希望删除一些列以提高可读性。

我们可以为每个具有notes列的表添加一个Notes表。 但这会造成另一种混乱—太多的小桌子。

我的想法是创建一个通用的Notes表和一个参考表。 Notes表将具有用于注释文本的列,用于链接至该行的ID的列以及指向参考表的外键。 对于每个需要我们注意的表,参考表都有一个文本值。 使用这两个表,我们应该能够将注释链接回它来自哪个表和列。

通过使用此解决方案,我们从便笺中删除了所有空值的情况,并精简了一些表。 全部以两张额外桌子的适中价格出售。 但是,对我来说,这感觉很“ hacky”。 从数据库管理的角度来看,使用“通用” id列或其他表的引用表是一个不好的主意吗?

在SQL Server中,管理对完全不同的实体的引用可能确实具有挑战性。 相比之下,Postgres支持继承,这使继承更加简单。

因此,我的建议是向要注释的每个实体添加一个notes列。 如果需要所有笔记的视图,则可以添加视图以将所有笔记放在一起。

这对性能或数据大小的影响最小。 除了额外的NULL位之外,对于varchar列没有任何额外的开销-这是非常小的。

IMO,另一个管理两个表的解决方案效率不高,但是增加了解决方案的复杂性。 您可能应该坚持使用数据类型为varchar的原始表中的notes列。

通用id列从本质上来说还不错,但是使用它通常会让人闻到不好/过时的设计。

对于SQL Server,您还可以在注释列中使用稀疏来减小大小。 但是我本人也使用类似的方法。 (请注意,许多列都需要写信息/ changerequest / lockcomment的列。但通常不会使用)。 工作正常,可以在源代码中进行通用编程。 但是,如果每张表只需要一个注释列,我会选择稀疏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM