3

我正在创建一个线程留言板,并试图使其保持简单。有一个消息表,然后是一个回复表,其中包含一个“reply_id”字段,该字段可以为 null 以指示顶级响应,或者一个值指示线程响应。

我对如何在这种类型的表上进行 SELECT 调用有点困惑?

Reply
-id (every reply gets a unique id)
-message_id (the message it is replying to)
-reply_id (the id of the reply it may be replying to - for threading)
-reply

我知道这可能是一个复杂的问题,尤其是在性能方面,但我真的只是在寻找最基本的解决方案。

谢谢...

4

1 回答 1

1

您正在使用存储树的天真“教科书”方式,即存储对直接父级的引用。这种设计称为邻接表。还有其他解决方案:

  • 路径枚举,您在树的每个节点中存储一个编码其所有直接祖先的字符串。
  • Nested Sets,Joe Celko 的一种巧妙方法,您可以使用每个节点的两个数值来绑定其所有后代。
  • 闭包表(或邻接关系),您使用单独的表列出每个祖先-后代对。

有关Closure Table 设计的参考和示例,请参阅我对“将平面表解析为树的最有效/优雅的方法是什么? ”的回复。

于 2009-01-11T23:37:55.560 回答