« WinInet 以外を考える | メイン | なぜか日記機能 »

2006年03月19日

Web関連の開発日誌:: ツリーをRDBへ

    

グループウェアのメモ帳機能をどうするか考えていて、ツリー型の掲示板のような形がいいかもしれないと思った。
各ノードにメモできる必要はなく、フォルダのような扱いにして、その中にメモを入れれるようにしてもいいのだが、別にフォルダにメモ書き出来てもいいよなぁということで、見ため的にはツリー型の掲示板のようにすることにした。

で、これをどのようにして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
Total : Today : Yesterday : なかのひと