3

スレッド化されたメッセージ ボードを作成していますが、シンプルにしようとしています。メッセージ テーブルがあり、次に返信テーブルがあります。このテーブルには、トップ レベルの応答を示すために null にすることも、スレッド化された応答を示す値にすることもできる「reply_id」フィールドがあります。

このタイプのテーブルで 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

ツリーを保存する単純な「教科書」の方法を使用しています。つまり、直接の親への参照を保存しています。この設計はAdjacency Listと呼ばれます。他の解決策があります:

  • Path Enumeration。ツリーの各ノードに、すべての直接の祖先をエンコードする文字列を格納します。
  • Nested Setsは、ノードごとに 2 つの数値を使用してすべての子孫をバインドする、Joe Celko による巧妙なアプローチです。
  • Closure Table (または Adjacency Relation)。個別のテーブルを使用して、すべての祖先と子孫のペアをリストします。

Closure Table 設計のリファレンスと例については、「フラット テーブルをツリーに解析する最も効率的でエレガントな方法は何ですか?」に対する私の回答を参照してください。

于 2009-01-11T23:37:55.560 に答える