基本的にフラットなデータベース システム (つまり、XML レコードのコレクション) に階層情報 (具体的には、カテゴリとサブカテゴリ) を格納するプロジェクトがあります。カテゴリとサブカテゴリに関する情報をシステムに保存したい:
- 動物
- 無脊椎動物
- 脊椎動物
- 天気
- 建物
- 超高層ビル
- 歴史的建造物
...などなど。
良くも悪くも、システム内のすべてが XML レコードとして保存されます。これがストレージ システムの仕組みです。
つまり、システム内の各カテゴリも次のように XML レコードとして保存されます。
<record id="12345">
<attribute name="Skyscrapers" />
<attribute type="Category" />
</record>
したがって、これらの制約の下で階層を実装する方法を考えています。
私はリレーショナル データベースでのデータ ストレージに慣れています。そのような場合、ほとんどの場合、ネストされたセット モデルを使用します。この場合、次の理由から、これは適切な選択ではないようです。
- アイテムを挿入するたびに、多くのノードの
right
and/orleft
値を変更する必要があります。XML ファイルを一括更新することはできないため、それぞれを個別に更新する必要があります。 - 「より小さい」または「より大きい」でフィルタリングできる検索機能がありますが (そのため、理論的には、特定のカテゴリの関連する子ノードまたは親ノードのみをプルすることができます)、XML レコードを並べ替えることができません。属性によって。したがって、すべてのドキュメントを取得し、それらを (この場合は Python を使用して) 並べ替え可能なオブジェクトのリストに変換し、
lambda
関数を使用して並べ替える必要があります。
私のデータ ストレージ モデルは、NoSQL を使用してデータを格納する場合と大差ないので、そのストレージ メカニズムを使用している誰かが、階層データを処理および格納するための優れたトリックを思いついたのではないかと考えていました。