DBでツリー構造
システム開発=Web+DBって言ってもいい位DBは世の中に普及してる。ここでのDBはRDB(リレーショナルデータベース)というヤツで、表形式のデータ(テーブル)を複数持って、必要に応じてキーで表同士を結合するもの。
ま、細かい話は置いとくとして、Excelとかで扱うような住所録、在庫管理表とかそういったデータを格納するのには非常に向いているけど、木構造のデータを扱うのはちょっと簡単ではない。
○方法1
簡単に思いつく方法としては、各ノードを1レコードとして保存し親ノードのIDを親へのリンクとして持たせるやつ。Aの下にBとCという子供がいるとすると
ID | ノード名 | 親のID |
1 | A | NULL |
2 | B | 1 |
3 | C | 1 |
簡単に実装できる反面、ノードの削除が結構面倒だったり、階層が1段階増えるたびにLEFT JOINを1つ増やさなきゃいけない等、色々制約もある。ちにみにAdjacency List Modelというらしい。
○方法2
もう一つの方法はNested Set Modelというらしい。
これらの方法の詳細に関してはここでは書かない。っていうかこのページを見た方が分かりやすいと思うし。原文はこっち。表とかは原文の方がみやすい。
DBってすごい一般的に使われてるけど、データ構造とかに関してちゃんと知識を持っている人って意外に少ない。ま、そんな事言ってる自分もNested Set Modelは知らなかった訳だけど…