既存のRDBMSの上にオープンソースの階層型データベースまたはエミュレーションはありますか?
階層データを格納でき、階層データ(たとえば、「SELECT LEVEL ... CONNECT BY ...」、「SELECT PARENT ...」など)に対してクエリを実行できるDMBS(または既存のRDBMSへのプラグイン)を検索しています。 )。Oracleにサポートがあることは知っていますが、もっと複雑なソリューションはありますか?
既存のRDBMSの上にオープンソースの階層型データベースまたはエミュレーションはありますか?
階層データを格納でき、階層データ(たとえば、「SELECT LEVEL ... CONNECT BY ...」、「SELECT PARENT ...」など)に対してクエリを実行できるDMBS(または既存のRDBMSへのプラグイン)を検索しています。 )。Oracleにサポートがあることは知っていますが、もっと複雑なソリューションはありますか?
これを行うための標準化されたプラグインはありません。私は何度も見ました。ただし、いくつかのオプションがあります。同じトピックに関する私の以前の質問から参照してください:
階層型データをリレーショナルデータベースに保存するためのオプションは何ですか?
つまり、IDとParentID(隣接リスト)を持つテーブルを使用している場合は、ほとんどのデータベースで共通テーブル式を使用します(OracleのCONNECT BYは最も注目すべき例外の1つです)。OTO、マテリアライズドパスやネストされたセットのようなものがあなたの状況により適しているかもしれません-例えば、隣接リストでこれが高価な操作である「系統」を簡単に見つける能力。
通常、CMSなどの階層データを広範囲に処理する必要のあるシステムで発生するのは、これらのソリューションを複数実装していることです。読み取りは書き込みよりも大幅に重要であると想定されています。
リレーショナルデータは、XMLのような本質的に階層構造がサポートするように、階層を直接サポートしません。階層をモデル化するには、ネストされたセットや直接の自己結合などのデータモデルを使用する必要があります。
使用しているシステムのタイプに応じて、共通テーブル式を使用すると、データに対して階層クエリを実行できます。CTEは、2005年以降のSQL Serverバージョン、DB / 2およびPostgreSQLの最近のバージョン、およびおそらく他のいくつかのシステムでサポートされています。CTEは、CONNECT BYよりも少し面倒ですが、さまざまなプラットフォームで実行されます。