docid という名前の列と parentid という名前の列を持つテーブルを使用して、ドキュメント間の関係を Oracle データベースに格納します。子ドキュメント child1_1 と child1_2 に関連するドキュメント doc1 がある場合、ドキュメント テーブルの次のレコードで表されます。
docid parentid
1000 null record for doc1
1001 1000 " " child1_1
1002 1000 " " child1_2
Documents テーブルには何百万もの行を含めることができるため、すべての関連ドキュメントが UI でグループ化されるようにするために、sortedfamily というインデックス付きの varchar 列を使用して Documents テーブルを事前に並べ替え、関連ドキュメントのドキュメント ID の連結を入力します。 . sortedfamily 列を使用しないと、クエリ時にレコードを並べ替えるのが遅すぎます。上記のレコードになります。
docid parentid sortedfamily
1000 null 1000 record for doc1
1001 1000 1000_1001 " " child1_1
1002 1000 1000_1002 " " child1_2
これにより、'ordered by sortedfamily' をクエリに追加でき、返されるレコードは常に関連ドキュメントでソートされます。上で概説したことはかなりうまく機能しますが、ドキュメント ファミリーの階層の深さに関連するいくつかの制限があり、レコードを並べ替えるために整数を連結するのは奇妙に感じます。整数のみを使用して上記を行う方法はありますか?
前もって感謝します。
更新: 上記の私の例は十分に詳細ではありませんでした。子供たち自身も関連する文書を持っているかもしれません。child1_1 に関連ドキュメントがあった場合、sortedfamily の結果の値は「1000_1001_2000」になる可能性があります。