Sql DB设计问题:tweet和retweet的树(一个表)和两个表?

Sql DB设计问题:tweet和retweet的树(一个表)和两个表?,sql,mysql,database,database-design,Sql,Mysql,Database,Database Design,我听说在stackoverflow上,问题和答案存储在同一个DB表中 如果你要建立一个类似twitter的服务,它只允许1级的评论。ie 1条推文,然后评论/回复该推文,但没有重新评论或回复 你会用两张桌子放推特和转发吗?或者只有一个表,其中字段parent_tweet_id是可选的 我知道这是一个悬而未决的问题,但这两种解决方案的优点是什么?转发仍然是正常的推特。一张桌子。您不希望必须从两个表加载才能包含转发。一个表的优点: 你可以用一种简单的方式搜索所有的推文和评论 您可以轻松地为所有帖子

我听说在stackoverflow上,问题和答案存储在同一个DB表中

如果你要建立一个类似twitter的服务,它只允许1级的评论。ie 1条推文,然后评论/回复该推文,但没有重新评论或回复

你会用两张桌子放推特和转发吗?或者只有一个表,其中字段parent_tweet_id是可选的


我知道这是一个悬而未决的问题,但这两种解决方案的优点是什么?

转发仍然是正常的推特。一张桌子。您不希望必须从两个表加载才能包含转发。

一个表的优点:

  • 你可以用一种简单的方式搜索所有的推文和评论
  • 您可以轻松地为所有帖子使用一个
    identity
  • 每个帖子都有相同的列集
两个表的优点:

  • 如果只搜索或显示顶级推文而不是推文+评论更常见,那么没有评论的推文表就会小得多
  • 两个表可以有不同的列集,因此,如果有对一种类型的post有意义的列,而对另一种类型的post没有意义,则可以将这些列放在相应的表中,而不必在不适用时将它们保留为null
  • 两个表上的索引也可能不同,因此如果需要以不同的方式搜索注释,可以将索引专用于该任务

简而言之,这取决于您如何使用数据,而不仅仅是数据的结构。您没有对需要对数据执行的操作说太多。

与所有设计问题一样,这取决于具体情况


我通常不喜欢在一张桌子上混合概念。我发现它会很快破坏数据库模式的概念完整性。例如,我不会将帖子和回复放在同一个表中,因为它们是不同的实体。

您仍然需要将该表本身连接起来,因此我看不到收益。这取决于视图。有时,您可能仍然希望只显示所有推文(包括转发)。此外,SQLServer2008具有新的分层数据功能,旨在将此类内容保存在一个表中。