リレーショナルデータベースでツリーのようなデータを適切かつ効率的に表すためにモデルを構成する方法は?


13

SQL質問を使用したリレーショナルデータベース内のツリー状データのトラバースに基づいて、物理的意味を考慮してリレーショナルデータベース上でツリー状データを記述するために定期的に使用される方法を知りたいですか?

RDBMSには、通常のSQL ANSIまたは一般的な利用可能な機能以外の特別な機能はないものと想定しています。

疑いの余地なく、私は常にMySQLとPostgreSQL、そして最終的にSQLiteに興味があります。

回答:


8

彼は二分木のようなものを求めていると思います。同じテーブルの一意のIDに関連付けられた3つのキーを含めるだけです。1つは左、1つは右の子、もう1つは親です。

ie-(非常に多くの擬似コード)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id

二重にリンクされたアイテムの考慮事項は、このスキーマの下でツリーの位置を変更すると、1つではなく3つ以上の更新が発生することです。あなたが述べているように、これはまた、フォワード/リバースバイナリツリーが要求されたものであるという大きな仮定です。
REW

私の経験では、ツリーをたどる必要があることが多いため、二重リンクリストの更新税を単一リンクリストよりも好んでいます。しかし、多くの場合、これは必要ありません
パトリック

それは間違いなく基礎となるモデルに依存します。それが適切なモデルであれば、Patrickの答えで十分だと思います。
jcolebrand

6

各ノードが本当に同じデータエンティティである場合、パラダイムはエンティティごとに1つのテーブルと、各ノードが一度だけリンクされるツリートラバーサルのリンク列を意味します。

ツリーの複数のポイントでリンクされているエンティティの場合、個別のリンクテーブルまたは複数の個別の値列が使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.