「ネストされたセット」と呼ばれる概念があります。基本的に、各コメントと記事には 2 つの列があり、そのサブアイテム セットの「開始」と「終了」を指定します。すべてのコメントには、完全に親アイテムのセット内にある開始と終了があり、兄弟間に重複はありません。もう一方)。
Article
/-----(1, 12)----\
Comment Comment
/---(2, 5) /--(6, 11)--\
Comment Comment Comment
(3, 4) (7, 8) (9, 10)
特定のアイテムに対してクエリを実行するときは、記事 ID が一致し、そのセットがアイテムのセット内にあるすべてのアイテムを探します。これにより、すべての子とそのすべての子などが取得されます。それらを開始または終了で並べ替えると、コメントはほとんど順番に表示されるはずです。また、他のエンドポイントと比較して、一方が他方のサブアイテムであるかどうかを判断できます。(開始順で並べ替えており、この項目の終了が前の項目よりも短い場合は、サブ項目があります。)
欠点は、すべてのコメントでこれらのセットを更新する必要があることです。これは非常に単純ですが、非常に遅い可能性があります。(7,8) の下に別の項目を追加するには、たとえば、次のようにします。
- その記事では、すべての 'end' >= 8 に 2 を追加して更新します。
- その記事では、2 を追加してすべての 'start' > 8 を更新します。
- (8, 9) のセットで、新しいアイテムを挿入します。
もちろん、挿入するコメントの「後」にコメントが多ければ多いほど、更新は遅くなります。
ちょっと待って..Google やめて...
http://en.wikipedia.org/wiki/Nested_set_model