sql >> データベース >  >> RDS >> Mysql

MySQL階層データの隣接リストモデルと入れ子集合モデル?

    入れ子集合モデルは、1つではなく2つの「ポインター」を管理する必要があるという事実を考えると、Adiacency List Modelよりも複雑であるため、現在データベースでは一般的に使用されていません。実際、ネストされたセットモデルは、階層を横断する再帰クエリを実行することが複雑または不可能な場合にデータベースに導入されました。

    1999年以降、標準SQLには、いわゆる再帰共通テーブル式、または再帰CTEが含まれています。これにより、階層内の再帰パスを通過するクエリをより簡単に(そして標準化して)作成できます。 レベルの数。

    特に例外として、MySQLを除いて、すべての主要なDBMSシステムにこの機能が含まれています。しかし、MySQLでは、ストアドプロシージャを使用することでこの問題を克服できます。たとえば、StackOverflowに関するこの投稿 、またはdba.stackexchangeのこの投稿

    要約すると、これらは私のアドバイスです:

    1. それでも使用するDBMSを決定できる場合は、いくつかの代替案を強く検討してください。たとえば、オープンソースデータベースを使い続ける場合は、 PostgreSQL 、Adiacency List Modelを使用し、クエリに再帰CTEを使用します。
    2. DBMSを変更できない場合でも、Adiacency List Modelを使用し、リファレンスで引用されているようなストアドプロシージャを使用する必要があります。

    更新

    この状況は、現在開発中であり、再帰的CTEを統合します 、そのバージョンから、AdiacencyListModelの使用がより簡単になります。




    1. 半径内の結果-遅いMySQLクエリの最適化

    2. Postgres:配列フィールドに値が含まれているかどうかを確認しますか?

    3. mysqlの文字列から数字を削除する

    4. マイニングプラン:プランキャッシュだけではありません