SQL表中的泛型ID列是个坏主意吗?

SQL表中的泛型ID列是个坏主意吗?,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,在我们的数据库中,我们有许多带有“Notes”列的表。这是一项重要的功能,但对于大多数行,Notes的值为null。这些表有许多列,我们希望删除一些列以提高易读性 我们可以为每个具有Notes列的表添加一个Notes表。但这会造成另一种混乱——太多的小桌子 我的想法是创建一个通用Notes表和一个参考表。Notes表将有一列用于Notes文本,一列用于链接到的行的id,以及一个指向引用表的外键。对于每个需要注释的表,引用表都有一个文本值。使用这两个表,我们应该能够将注释链接回它来自哪个表和列 通

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

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

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


通过使用此解决方案,我们从notes中删除了任何空值的情况,并缩小了一些表。这一切都是以两张额外桌子的适中价格进行的。然而,我觉得它很“黑”。从数据库管理的角度来看,使用“通用”id列或其他表的引用表是一个坏主意,这有什么原因吗?

在SQL Server中,管理对不同实体的引用确实很困难。相比之下,Postgres支持继承,这使得它更简单

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


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

在SQL Server中,管理对不同实体的引用确实是一项挑战。相比之下,Postgres支持继承,这使得它更简单

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


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

IMO,管理两个表的另一种解决方案没有带来多少效率,但增加了解决方案的复杂性。您可能应该使用原始表中数据类型为varchar的notes列


通用id列本质上并不坏,但使用它通常会让人感觉到设计不好/不成熟。

IMO,另一种管理两个表的解决方案没有带来多少效率,但会增加解决方案的复杂性。您可能应该使用原始表中数据类型为varchar的notes列


通用id列本身并不坏,但使用它通常会给人一种设计不好/不成熟的感觉。

此外,对于SQL Server,您可以对注释列使用稀疏来减小大小。 但我自己也采用了类似的方法。(请注意,许多列都需要一个列来编写info/changerequest/lockcomment。但通常从不使用)。 工作正常,可以在源代码中进行一般编程。
但是,如果每个表只需要一个注释列,那么对于SQL Server,我更喜欢稀疏的

另外,您可以使用稀疏的注释列来减小大小。 但我自己也采用了类似的方法。(请注意,许多列都需要一个列来编写info/changerequest/lockcomment。但通常从不使用)。 工作正常,可以在源代码中进行一般编程。
但是,如果每个表只需要一个注释列,我更喜欢稀疏

在链接到的行的id上没有声明性引用完整性。您所考虑的并不是对您所拥有的进行改进。实际问题是什么?表应该有尽可能少的列,但不能少——听起来像是需要一个notes列。如果您面临的唯一问题是表“不整洁”的模糊概念,那么我会让事情保持目前的状态。链接到的行的id上没有声明性引用完整性。您所考虑的并不是对您所拥有的内容的改进。实际问题是什么?表应该有尽可能少的列,但不能少——听起来像是需要一个notes列。如果你面临的唯一问题是餐桌“不整洁”的模糊概念,那么我会保持现状。。