多态协会 - 它总是坏的吗?

时间:2016-12-21 16:07:10

标签: sql-server database database-design relational-database polymorphic-associations

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

鉴于您拥有一个包含大量包含许多实体类型(1000+)的表的数据库的情况,并假设您需要能够向存储在其中的任何实体添加注释或注释等内容。数据库。

使用多态关联,您可以创建一个表,其中包含可能包含注释或注释的实体类型,以及一个包含其表中实体的类型ID和ID以及注释的表。你显然不能通过这种方式获得参照完整性。

使用我遇到的基于继承的解决方案,在这种情况下的建议是创建一个充当根'类的表。数据库中所有实体的数据,以便您可以在此表中的ID和注释表中的EntityID之间创建外键。

这意味着每个表中的每一行都需要在此表中有一行,您需要在此表中插入一条记录来生成实体的ID(我知道您可以使用uniqueidentifier但它有自己的缺陷)。对我来说,这感觉就像这个桌子周围会出现一个瓶颈。

另一种方法是在每个实体表和注释表之间创建一个表。但是,如果您需要注释,注释,标签等,最终会增加数据库中的表数量。

有没有人试图在现实世界中做这样的事情,你是否发现使用Polymorphic Association是一个更好的解决方案,尽管数据库中缺乏参照完整性?

1 个答案:

答案 0 :(得分:0)

这一切都取决于您确定哪种解决方案更好的标准。

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

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

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

相关问题