多态关联——它总是不好的吗?

Polymorphic Association - Is it always bad?

我理解多态关联的概念以及如何使用 Martin Fowler 解释的 Table 继承模式来避免它们。

假设您的数据库由大量 table 组成,其中包含许多实体类型 (1000+),并且假设您需要能够添加诸如评论或注释之类的内容存储在数据库中的任何实体。

使用多态关联,您将创建一个 table 可以有评论或注释的实体类型,以及一个 table 在其 table 和评论。您显然无法获得参照完整性。

使用我遇到的基于继承的解决方案,在这种情况下的建议是创建一个 table 作为数据库中所有实体的根 'class',这样你可以在此 table 中的 ID 和注释中的 EntityID 之间创建一个外键 table.

这意味着每个 table 中的每一行都需要在此 table 中插入一行,并且您需要在此 table 中插入一条记录以生成实体的 ID (我知道您可以使用 uniqueidentifier,但它有其自身的缺陷)。对我来说,table.

似乎会出现瓶颈

另一种选择是在每个实体 table 和评论 table 之间创建一个 table。但是,如果您需要评论、注释、标签等,您最终会大量增加数据库中 table 的数量。

有没有人在现实世界中尝试过这样做,您是否发现使用多态关联是更好的解决方案,尽管数据库中缺乏引用完整性?

这完全取决于您确定哪种解决方案更好的标准。

更简单的解决方案是创建单个多态关联 table。对于程序员来说,这最初会更快地产生。它符合有据可查的模式;特别是在当今流行的一些 MVC 类型框架中。然而,这实际上是更复杂的解决方案,因为现在只有一个包含许多概念的 table。此外,由于无法实现参照完整性,因此无法保证数据的正确性。

更简单的解决方案是为每个关系创建一个 table,这样就有一个包含一个概念的 table。它允许使用参照完整性来保证数据的正确性和质量,并且软件维护者可以更快地评估系统更改的影响。但是,这是更难的解决方案,因为它需要最初创建更多 table。

现在由您自行决定是否要选择更容易或更简单的解决方案。