在SQL中使用相同属性分隔表

在SQL中使用相同属性分隔表,sql,database,database-design,complexity-theory,Sql,Database,Database Design,Complexity Theory,当使用SQL数据库时,当我有具有相同属性的表时 例如,如果我有 [posts]带有属性(id、图像、描述、喜欢和不喜欢的数量) [注释]带有属性(id、图像、描述、喜欢和不喜欢的数量) 及 [回复]带有属性(id、图像、描述、喜欢和不喜欢的数量) 我还有另外一种类型的帖子、评论、回复,原因不同,但属性相同 对于每种类型的帖子,我应该将它们分为三个表,还是应该将它们放在一个表中,因为我在每个表中都有相同的属性 所以,如果我想将数据加载到web应用程序中,会发生什么?将数据放在一个表中或将其分开

当使用SQL数据库时,当我有具有相同属性的表时

例如,如果我有

  • [posts]
    带有属性(id、图像、描述、喜欢和不喜欢的数量)
  • [注释]
    带有属性(id、图像、描述、喜欢和不喜欢的数量)
  • [回复]
    带有属性(id、图像、描述、喜欢和不喜欢的数量)
我还有另外一种类型的帖子、评论、回复,原因不同,但属性相同

对于每种类型的帖子,我应该将它们分为三个表,还是应该将它们放在一个表中,因为我在每个表中都有相同的属性


所以,如果我想将数据加载到web应用程序中,会发生什么?将数据放在一个表中或将其分开,在检索数据的复杂性上有什么不同吗?或者什么是最好的?

你有一个经典的“视情况而定”

如果决定将post类型列全部保存在一个表中,则必须对其编制索引。但是,由于只有少量的值,因此可能没有效率

您可以按post类型对表进行分区,这会有所帮助

如果有3个表,则可能需要三种不同的方法来检索数据


就我个人而言,我会将一个表分区并存储在一起。

答案完全取决于如何使用这些表

将它们统一起来,可以更容易地编写以相同方式处理所有三种类型的逻辑(例如,向累积X喜欢的用户授予徽章,或删除用户的所有内容)


如果您想在将来更改这些表(例如,添加编辑日期,该日期只能应用于帖子而不能用于评论),将它们分开将允许更大的灵活性。

这三个实体可能共享一些属性,但在逻辑上它们仍然是分开的实体,一篇帖子可能有0-n条评论和0-n条回复。我会很清楚地把它们分成不同的表,我个人会把它们分开,因为这会使表更容易扩展,就像你提到的那样。在开发后期(不幸的是),在实体中进行更改是很常见的。