具有相同内容的关系表,自定义解决方案

Ale*_*lex 3 database-design application-design design-pattern

假设我正在构建一个应用程序,可以在其中添加FOO的评论。通常我会有这样的东西:

foo和表foo_comments,其中foo_comments包含idfoo_id和其他列。

目前,这是我在应用程序中使用评论的唯一方式。我确实收到了某人的留言,如果他们将来更新应用程序并且他们也想为BAR添加评论,我应该从现在开始添加一些自定义内容,即使我现在不需要它。所以有人建议我添加这样的东西

注释(一般用途),其中包含一个type列(其中 type 可以是表示引用的表的 int:foo、bar 或其他内容)和一个type_id列,其中包含来自行的 id主表。

那么这是一个好的做法吗?我是否应该构建这样的东西,仅仅因为应用程序将来可以更改?或者我只是将其与foo_comments表一起保存,然后如果应用程序将为BAR表添加注释,我也会创建一个bar_comments表。

Mic*_*een 5

我会把它们分开。尽管细节有所不同,但您的情况很像One True Lookup Table反模式。通过组合,您将在定义外键(指向哪个父键?)等方面遇到问题。索引策略本质上是将组合表拆分为其组成部分。等等...

组合的理由是,如果 Foo 和 Bar 是某些更抽象实体类型的子类型,并且所有注释都可以挂在这个超类型上。

  • 是的,我就是这么说的。对我来说这是最佳实践,但我并不代表数据库设计者的世界。我建议您权衡我的理由与其他回答者的理由(以及每个人可能收集的任何选票),并根据您的应用程序的完整要求和上下文来评估它们。 (2认同)