1

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」になる可能性があります。

4

1 に答える 1