階層構造をデータベースに落とし込む際に範囲検索が簡単な
[入れ子集合モデル]を採用しようと思っています。
木構造(親node一つのみ)なら
[入れ子集合モデル]に落とし込むことで検索の高速化を計れると思います。
ですが
セミラティス構造(親nodeを複数持てる)の場合
[入れ子集合モデル]に落とし込むと複数の親を持つnodeを複製する必要が
でてきます。結果、システムが複雑になりパフォーマンスが落ちてしまいます。
どなたか複製せずに、セミラティス構造のnode検索を高速化するアルゴリズム、
アイディアをご存知の方がいらっしゃいましたらご教授ください。
特に、[入れ子集合モデル]である必要はございません。
追記:[条件]複数の親を持てるのは葉nodeのみ
追記:使用しているデータベース:MySQL
追記:検索=親を指定するとその子孫たる葉nodeすべて取得
追記:nodeに対する操作
親を指定しnode追加➡️必須
既存のnodeを削除➡️必須
既存のnode間にnodeを追加➡️必須
既存のnode間の親子関係を削除➡️必要なし
既存のnode間に親子関係を追加➡️必要なし
[問題のところ]
親を複数指定しnodeを追加➡️追加したnodeは葉nodeで複数の親をもつ葉nodeにnodeは追加できません。
お使いのDB製品の名称(MySQL や PostgreSQL など)を記載すると、具体的な回答がつきやすくなると思います。階層構造の表現は、DB製品によって得意・不得意が分かれるからです。
追記依頼ありがとうございます、使用しているDBを追記しました。
ここでいう検索とは、「親を指定するとその子孫ノードがすべて取得できる」ことを意味するでしょうか。「それとも子孫たる葉ノードをすべて取得」?
yubaさん「子孫たる葉ノードをすべて取得」になります
他にはどんな操作ができる必要がありますか? 親(複数)を指定しノードを追加? 既存のノード間に親子関係を追加? 既存の親子関係を削除?
yubaさん操作に関して追記で記載させていただきます。少々時間をください。
ちなみに、DBMSはMySQLでないとダメなのですよね?選択の余地はなしということ?
MySQLでないとダメです。ですが他のDBMSで何か事例がありましたら教えていただきたいです。
事例>グラフDBというNoSQLの一種が合っているかなと。