質問

スレッド化されたメッセージボードを作成し、それをシンプルにしようとしています。メッセージテーブルがあり、次に、トップレベルの応答を示すために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

これは、特にパフォーマンスに関して複雑な問題になる可能性があることはわかっていますが、実際にはこれに対する最も基本的な解決策を探しています。

ありがとう...

役に立ちましたか?

解決

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

  • Path Enumeration 。ツリーの各ノードに、すべての直接の祖先をエンコードする文字列を保存します。
  • Nested Sets 。JoeCelkoによる巧妙なアプローチで、ノードごとに2つの数値を使用してすべての子孫をバインドします。
  • クロージャーテーブル(または隣接関係)。個別のテーブルを使用して、すべての祖先と子孫のペアをリストします。

" フラットテーブルをツリーに解析する最も効率的でエレガントな方法は何ですか"クロージャーテーブルデザインのリファレンスと例については、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top