多态关联 - 不好吗?

Rob*_*ous 4 schema database-design inheritance polymorphic-associations

在以下架构中:

Collections
   Upvotes
Reports
   Upvotes
Reviews
   Upvotes
Run Code Online (Sandbox Code Playgroud)

我很想有一个Upvotes表,一个单一的"entityId"列存储要么CollectionIdReportIdReviewId。还将有一个枚举用于Type存储collection, report, 或review

entityId会一直是必需的,而逻辑将始终确保刀片在每个实施唯一性type

这样做的好处是添加另一种类型只是扩展枚举的问题。一切都将生活在一张没有冗余的桌子上。

成本似乎是逻辑方面增加的复杂性,它包含在我的应用程序逻辑中将新实体插入表中的一个地方。

实际上,这种方法有什么问题吗?避免这种情况的其他原因是什么?

Mat*_*all 5

我不能推荐多态关联。

根据我的经验,这将导致数据一致性问题,因为您不能在架构中使用外键约束。这意味着您依赖于您的应用程序写入数据库的这一部分没有错误,并且没有人手动更改数据。

它还可以使连接Upvotes到 >1 个其他表的查询更复杂/更难理解。

  • 每个集合/报告/评论都有一个单独的赞成表。 (2认同)