繁体   English   中英

DB设计问题:树(一个表)与两个表(用于推文和转发)?

[英]DB Design question: Tree (one table) vs. Two tables for tweets and retweets?

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

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

您会在推文和转推中使用两个表格吗? 还是只有一个表中的字段parent_tweet_id是可选的?

我知道这是一个悬而未决的问题,但是两种解决方案都有哪些优势?

转推还是普通的推。 所以一张桌子。 您不需要从两个表中加载来包含转推。

一张桌子的优点:

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

两个表的优点:

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

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

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

我通常不喜欢在单个表中混合概念。 我发现它会迅速破坏数据库架构的概念完整性。 例如,我不会将帖子和回复放在同一表格中,因为它们是不同的实体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM