数据库设计问题:树(一个表)与两个表的推文和转推?

时间:2009-09-29 01:54:47

标签: sql mysql database database-design

我听说stackoverflow上的问题和答案都存储在同一个数据库表中。

如果您要构建类似Twitter的服务,只允许1级评论。即1条推文,然后评论/回复该推文,但没有重新评论或​​重新回复。

你会使用两张表来发推文和转发吗?或者只是一个表,其中字段parent_tweet_id是可选的?

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

一个表的优点:

  • 您可以通过简单的方式搜索所有推文和评论。
  • 您可以轻松地为所有帖子使用一个identity列。
  • 每个帖子都有相同的列。

两个表的优点:

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

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

答案 2 :(得分:0)

与所有设计问题一样,这取决于。

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