【问题标题】:What is a good db schema and method to query a "Facebook Wall" feature什么是查询“Facebook Wall”功能的好数据库模式和方法
【发布时间】:2009-11-25 11:02:55
【问题描述】:

我正在编写一个简单的“Facebook 墙”类型功能,用户可以在其他人的墙上发帖,人们可以简单地回复该墙帖,或发布新的墙帖。用户无法回复回复,您只能回复原始墙帖(就像脸书一样)

我最初想到的 mySQL db 架构是这样的:

post_id (pk) post_text(字符) date_posted(日期时间) is_parent (bool) parent_id(父母的ID)

它是如何工作的:
如果有人发布了新的墙帖,is_parent 将被设置为 1,而 parent_id 将被设置为 null。

如果有人回复了该帖子,is_parent 将为 0,而 parent_id 将设置为父帖子的 ID。

我的问题

  1. 对于此功能来说,这是一个好的架构吗?如果不是,您会使用什么架构?
  2. 如果它很好,我该如何做一个查询,将按最近发布的顺序返回所有墙帖,同时将子级与父级分组,这样当我遍历查询结果时,父级和子级大家聚在一起。
  3. 还是做 2 个查询更好? 1 次查询所有父母,1 次查询孩子。

【问题讨论】:

    标签: php mysql schema parent-child


    【解决方案1】:

    首先。 我认为您不需要两个字段来实现相同的目的。在这种情况下, parent_id 就足够了。当你有 post_id 设置自动增量时。第一个分配的值将是 1,因此 parent_id=0 永远不会发生。当 parent_id=0 时,您可以假设它是一级帖子。

    最好对所有回复使用一个查询。

    【讨论】:

    • 感谢 Darkerstar。这对于 parent_id = 0 来说非常有意义。并且还可以更简单地将所有回复作为单独的查询进行查询。
    【解决方案2】:
    1. 不知道/可能。丢失 is_parent 列。
    2. 我最近通过查询按 post_id 升序排序的所有帖子来做到这一点。然后用一些 PHP (array['parrent'] -> array['post']...[]) 将它缓存在一个二维数组中。
    3. 应该按照#2 中描述的方法进行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2020-05-25
      • 2010-11-21
      • 1970-01-01
      • 2013-06-18
      • 2016-12-04
      • 1970-01-01
      相关资源
      最近更新 更多