0

例如,我有帖子、帖子的答案和答案的评论。

有什么更好的方法:为每个实体(帖子、答案、评论)提供每个表,还是一个带有“post_type”和“parent_id”参数的表?

UPD:答案和评论与属性相似。

4

3 回答 3

3

最好的路线是 3 张桌子:

  • 帖子
  • 答案
    • Posts_ID(父)
  • 评论
    • Answers_ID(父)

帖子是最终父级,与之相关的答案以及与答案相关的评论。

于 2012-08-24T04:31:53.810 回答
1

您是否有单独的帖子和评论表,部分取决于是否可以使用一个来代替另一个,部分取决于每个处理的相似程度。换句话说,每个人有多少信息是独一无二的?如果每张桌子都没有或几乎没有独特的东西,那么一张桌子很可能会起作用。

于 2012-08-24T04:47:16.987 回答
0

在某些情况下,使用带有微分列(选项 2)的单个表是有意义的,但是任何仅属于一种类型的列都应该进入它自己的表,并且该表将具有一个外键映射回主表。这将形成一个表继承层次结构

如果这些表所代表的对象共享大量列,这是有道理的;并且它们的共性允许一些处理在不同类型之间进行泛化,而不必知道特定的子类型。

如果您的大多数查询最终都必须按差异列进行过滤,那么将它们存储在同一个位置可以获得什么真正的优势?

In short: K.I.S.S. applies; if there is a programming advantage to be had by using the single table approach, use that; otherwise keep it simple and use 3 (counter intuitive I know, but the added cognitive load just to do self-joins all the time should convince you).

于 2012-08-24T05:11:47.707 回答