例如,我有帖子、帖子的答案和答案的评论。
有什么更好的方法:为每个实体(帖子、答案、评论)提供每个表,还是一个带有“post_type”和“parent_id”参数的表?
UPD:答案和评论与属性相似。
例如,我有帖子、帖子的答案和答案的评论。
有什么更好的方法:为每个实体(帖子、答案、评论)提供每个表,还是一个带有“post_type”和“parent_id”参数的表?
UPD:答案和评论与属性相似。
最好的路线是 3 张桌子:
帖子是最终父级,与之相关的答案以及与答案相关的评论。
您是否有单独的帖子和评论表,部分取决于是否可以使用一个来代替另一个,部分取决于每个处理的相似程度。换句话说,每个人有多少信息是独一无二的?如果每张桌子都没有或几乎没有独特的东西,那么一张桌子很可能会起作用。
在某些情况下,使用带有微分列(选项 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).