しょぼしょぼプログラマ雑記

自分のための備忘録。 開発記録など掲載してます。 質問・ご意見・ご感想等はTwitter ( https://twitter.com/yun_hokuto ) までお気軽にどうぞ。

DBで木構造を構成する方法

昔からDBで親子関係を表現する際には、単一方向ポインタのごとく親レコードのPrimaryKeyを設定しているところが多々あると思います

IDノード親レコードID
AAANode1NULL
BBBNode2AAA
CCCNode3AAA
DDDNode4CCC
EEENode5CCC

ただ、これの欠点は「すべての先祖を取得する」場合や、「特定ノード以下のデータをすべて取得する」場合などにおいて

SQLクエリが複雑 & 荒ぶるサブクエリになる ことが容易に想像できます

そこで出てくるのが「入れ子集合モデル」というものです

詳細は下記Webページで紹介されている通りです

SQLで木と階層構造のデータを扱う(1)―― 入れ子集合モデル

こちらのWebページで記載されている「Left」「Right」の数値は 木構造を走査させる際に左右で数値を加算しながら振っていく方法 を取っています

容易な検索のほか複雑な更新系も掲載されていますので、一度目を通してみるといいかもしれません