質問: 質問お願いします。 今回、共同開発で下記のような「マインドマイスター」のようなアプリを開発することになりました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/f3b7038cbe804bc6aa3f124fb1e6089e.jpeg) 自分はサーバー側`rails`を担当することになり、データベース設計を下記のようにしたところ、クエリが大量発生するからNoSQL`redis`で実装しようということになりました。 ![](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/0ff791a7b6b9a032fb349427e5b8f4a3.png) `redis`を使用して実装してみようということになったのですが、どのように実装すれば良いか分かりません(イメージが全く湧きません)。 > > HMSET rails id 1 parent_id null name rails > > HMSET rails id 2 parent_id 1 name mvc > > HMSET rails id 3 parent_id 1 name gem > > HMSET rails id 4 parent_id 1 name ruby > > HMSET rails id 5 parent_id 2 name model > > HMSET rails id 6 parent_id 2 name view > > HMSET rails id 7 parent_id 2 name controller > > > 一応`redis`のハッシュの書き方を見て、↑のように実装してみたのですが、当たってますか? どなたか分かる方いましたら教えていただきたいです。
回答: 今回実装されようとしているものは、「木」呼ばれるデータ構造です。 葉(ノード)同士の関連を表現する必要があるので、リレーショナルDBで実装したほうが葉の入れ替えが起きたときなど、最低限のデータ入れ替えで済むなど、実装上の利点が大きいように思います。 redisで実装しようと思うと葉の付け替えなどに関してはかなり工夫しないと行けない気がします。 redisで実装するように提案した方に、どのような意図を持っているか、またどのような実装イメージがあるか聞き、一緒に検討してもらってください。 アプリケーションの使われ方や想定が、提案者と質問者さんで齟齬があるかもしれません。 ちなみにリレーショナルDBで木構造を実装する場合、もう少しいい方法があります。こちらの記事を見てみてください。質問者さんが載せてくれているのは、こちらの記事のナイーブツリーというものになります。 https://qiita.com/hirashunshun/items/06adf4f42f03a9f3b63d