ホームページ > データベース > mysql チュートリアル > リレーショナル データベースに階層データを保存するための最適な方法を選択するには?

リレーショナル データベースに階層データを保存するための最適な方法を選択するには?

Susan Sarandon
リリース: 2025-01-25 10:51:09
オリジナル
612 人が閲覧しました

データを高効率関係データベースのデータベースに保存する最良の方法

How to Choose the Best Method for Storing Hierarchical Data in a Relational Database?
関係データベースにデータを保存する方法

はじめに

関係データベースでストレージレベルデータを選択する方法は難しい作業かもしれません。この記事では、さまざまな方法とそれぞれの利点と欠点について説明し、賢明な決定を下すように導きます。 利点と短所の重量

適切なストレージ方法を選択するための鍵は、速い読み取り時間と迅速なライティング時間のバランスをとることです。隣接するテーブルは通常、読み取りのパフォーマンスを高速にしますが、ネストされたブリッジテーブルとブリッジテーブルは、パフォーマンスを書くという点でうまく機能します。ただし、これらのテクノロジーの組み合わせは通常、特定のニーズに最も適しています。

ストレージオプションとそれらの機能

列:id、parentid

利点:

簡単に達成できますが、ノードの変更のコストは低いです 短所:

祖先、子孫、パスが高くなるコスト
  • 2。Embedding(MPTT)
  • 列:
  • 残りの値、正しい値 利点:
  • 祖先と子孫のコストが低い
  • 短所:変更可能なエンコーディングのため、ノードの変更のコストは非常に高い

3。ブリッジ接続(トリガー付き閉鎖テーブル) 列:

祖先、子孫、深さ(オプション)
  • 利点:祖先と子孫の低コストについての問い合わせ、標準化されたエンコーディング
  • 短所:
  • 各ノードは複数の行である必要があります。挿入、更新、削除のコストはo(log n)
  • 4。Faber(マテリアル化パス) 列:spectrum
利点:

プレフィックスクエリを介して子孫を安く確認できます 短所:

挿入、更新、削除のコストはo(log n)、非相関型
  • 列:
  • start、end 利点:
  • 無効コーディングのため、ノードの変更のコストは低く、実数/フローティングポイント数/小数インジケーター
  • 短所:real/floatingポイント番号/小数表現/精度の問題
列:レベル、ランキング
    利点:
  • 安価な反復とページネーション 不利な点:
  • モバイルと削除の高い運用コスト
  • 7。複数のスコア
  • 列:
利点:

祖先のコスト、子孫、レベルのコスト、低コストの挿入、削除、および葉のノードの動き 短所:

内部ノードの挿入、削除、動きの高コスト、およびレベルの深さの深さには厳しい制限があります
  • データベースの特定の予防策MySQL/MariaDB: 最新バージョンの CTE を使用して隣接リストをクエリします。

    Oracle: CONNECT BY を使用して隣接リストを横断します。

    PostgreSQL: 実体化されたパスには ltree データ型を使用します。

    SQL Server: 2008 は、系図列メソッドおよび拡張深さ表現で使用する HierarchyId データ型を提供します。

    最良の方法と追加リソース

    この記事では、両方の方法の利点を兼ね備えているため、クエリ用の階層とネストされたセットを維持するために隣接リストを使用することをお勧めします。さらに、この記事では、さらに詳しく調べるための貴重なリソースを提供します。

以上がリレーショナル データベースに階層データを保存するための最適な方法を選択するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート