オリジナルアプリ開発Day2、2本目の記事です。自分のメモのために書いています。
RDB構造でリプライ機能実装する方法は?
Twitterやyoutubeのコメント欄のように、コメントに対して、コメントをする機能をreplyと言いますが、その機能をどのようなRDB設計で再現すればいいのか考えていました。
自分が考えたものも含めて、解決策は5つ。
先人たちが見つけてくれた解法
・隣接リストモデル(ナイーブツリー).
・経路列挙モデル
・閉包テーブルモデル
・入れ子集合モデル
よく纏められたサイトがあったのでそちらをご紹介します。
自分ならば、上記4つの解法の中から1つ選ぶとしたら、閉包テーブルモデルを採用すると思います。
自分が考えた解法
コメントテーブルに対して、コメントのIDを外部キーとしたリプライテーブルを作成します。これで、2階層構造のコメント欄が完成です。
リプライに対して、さらにリプライしたいのならば、リプライ2テーブルを作成します。アソシエーションを図示すると下のような感じです。
さらに階層構造を作りたいのなら、テーブルを増やしていけばその分階層も増えます。
自分が考えた解法の欠点
テーブルの数を上限にリプライの階層が数の上限が決まってしまうということです。例えば、コメントテーブルとリプライテーブルしか用意していない場合、コメントにリプライし、さらにそのリプライに対して、リプライするということができません。しかし、実際に顧客が利用する場面を想像すると、リプライに対してさらにリプライを返す行為を何度も繰り返している場面は想定されにくく、この方法でツリー構造を作っても問題ないのかなと思いました。