入れ子集合モデルとは
ネストされたセットモデルは、修正された事前順序木探索アルゴリズムとも呼ばれ、リレーショナルデータベース内に階層データを格納する方法です。 このモデルには、非常に高速なアクセスを提供するという利点があり、書き込みよりも読み取りの頻度が高い階層に最適に実装されます。 情報モデル内の各ノードには、属性として保存される2つの番号が割り当てられます。 ネストされたセットモデルのクエリは、両方の値を使用して必要なデータを引き出すことができるため、非常に簡単です。 ただし、挿入、削除、移動、および更新は、ノードの番号を付け直す必要があるため、はるかに面倒です。
通常、ネストセットまたは階層情報をツリー形式で表すために使用されるネストセットモデルは、ジョーセルコによって導入されました。 この例では、ツリーは、リンクされた複数のノードを含むデータ構造です。 たとえば、親ノードは複数の子ノードに接続でき、この構造は複数のレベルを通じてツリー全体で繰り返されます。
ツリーは、リレーショナルデータベース内の特定の順序で情報を格納する優れた方法です。リレーショナルデータベースは、共通の特性に応じてデータを格納するデータセットです。 たとえば、店舗の食品セクション内の製品情報は、食品から始まり、果物、野菜、肉に分岐する場合があります。 果物は、ベリー、メロン、リンゴ、野菜にさらに細かく分けて塊茎、緑などに、肉を豚肉、羊肉、子牛に細分することができます。
リレーショナルデータベースはこのすべての情報をわかりやすい形式で保存し、ネストされたセットモデルによりツリー構造を効率的に管理できます。 上記の例を使用すると、ルートノードはfoodになり、2つの値で表されます。 食品の左の値が1であるとすると、ツリー内の他のアイテムには左の番号が順番に割り当てられます。 果物は左側の値が2になり、果実は3になります。 その後、値は右側に割り当てられ、最後の値が右側の食品に割り当てられるまで、ツリー全体、ボトムアップ、各ブランチで機能します。
ツリーの各アイテムは、左をlft 、右をrgtとする2つの値になります。これらは、それらを識別し、他のアイテムとの関係を示すために使用できます。 たとえば、果物の値が2と15の場合、左の値が2より大きく、右の値が15より小さいノードはすべて、果物の木の子孫2〜15です。 これらの値はデータベースへの単一のクエリで指定できるため、すべての果物に関する情報を一度に簡単に引き出すことができます。
このモデルは、頻繁にアクセスされる情報の保存には優れていますが、ネストされたセットモデルへの情報の挿入、削除、および並べ替えは非常に面倒になります。 特にツリーが数十万のノードを含むように成長した場合、インデックスを書き換えて情報の番号を付け直すと、データベースがクラッシュする可能性があります。 ネストされたセットモデルは、挿入と変更が最小限の軽量コンテンツ管理システムに最適です。 ネストされた間隔モデルでは、浮動小数点を使用してツリー内の各ノードの位置を保存すると同時にパス情報をエンコードするため、挿入をより高速に行うことができます。