« WinInet 以外を考える | メイン | なぜか日記機能 »
2006年03月19日
Web関連の開発日誌:: ツリーをRDBへ
Tweet @jin1016をフォローグループウェアのメモ帳機能をどうするか考えていて、ツリー型の掲示板のような形がいいかもしれないと思った。
各ノードにメモできる必要はなく、フォルダのような扱いにして、その中にメモを入れれるようにしてもいいのだが、別にフォルダにメモ書き出来てもいいよなぁということで、見ため的にはツリー型の掲示板のようにすることにした。
で、これをどのようにしてRDBに保存していくかだけど、すぐに思い付くのは各ノードIDと親ノードIDをペアにして保存していくというもの。
トップノードの親ノードIDは特殊な値にしておけば、それでツリーが構築できる。
ただ、こうするとDBへクエリーを投げまくることになる。
幅優先でツリーを構築していけば、WHEREのところをINで書いたとして、ツリーの深さ回数だけクエリーを投げることになるか。
深くなってくるとSQL文が長くなってくるような気がするけど、実用的な範囲内だろうか?
もしくはルートノードIDをその下につながっているノードすべてが持つようにして、ツリーの子となるノードをすべて取得するという方法もありかな。
ただ、ノードを他のツリーに移せるようにしたいとなった時、そのノードの子すべてのルートノードIDをUPDATEしないといけないのが難点。
素直に各ノードIDと親ノードIDをペアにして保存し、再帰で構築して、保存するときにそのツリーをキャッシュするようにするのが確実かなぁ。
ルートノードIDを持つ持たないはテーブルの構造にかかわるので、ルートノードIDはなしの方向で行くか。
ツリーの構築方法は安全性を考えて幅優先で構築して、キャッシュするようにするかな。
投稿者 Takenori : 2006年03月19日 22:19
comments powered by Disqus