SQL での階層の保存と走査
データベース内の階層情報のモデリングと取得は、多くのアプリケーションにとって重要です。よく使用される方法の 1 つは、修正プリオーダー トラバーサル アルゴリズム (MPTT) です。
MPTT アルゴリズム
MPTT は、ノードごとに 3 つの列を持つ単一のテーブルに階層データを編成します。
-
ID: ノードの一意の識別子。
-
Left: ノード サブツリーの左端のノードのインデックス。
-
Right: ノード サブツリーの右端のノードのインデックス。
ツリーに挿入
新しい子ノードをツリーに挿入するには、以下が必要です:
- 親ノードの正しい値を見つけます。
- 子ノードの Right 値を親ノードの Right 1 に設定します。
- 親ノードの Right 値を親ノードの Right 2 に設定します。
- 子ノードの Left 値を親ノードの Right - 1 に設定します。
木を横切る
MPTT では、明示的な SQL クエリを使用した簡単なツリー トラバースが可能です:
-
ノードのすべての子ノードを取得します: SELECT * FROM table WHERE Left BETWEENparent.Left ANDparent.Right
-
ノードのすべての子孫を取得します: SELECT * FROM table WHERE Left >parent.Left AND Right
-
ノードのすべての祖先を取得します: SELECT * FROM table WHERE Left node.Right
その他のモデリング方法
MPTT に加えて、階層を保存する他の方法には次のものがあります。
-
隣接リスト モデル: 2 つのテーブルを使用して階層を表します。1 つのテーブルには親子関係が含まれ、もう 1 つのテーブルには追加のノード データが含まれます。
-
図: エッジで接続されたノードとして階層をモデル化し、複雑な結合とクエリの柔軟性を提供します。
クラスライブラリ
さまざまなライブラリにより、PHP や Java などのプログラミング言語での MPTT やその他の階層データ構造の操作が簡素化されます。
以上がMPTT アルゴリズムはどのようにして SQL の階層データを効率的に保存および移動できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。