0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

リプライ機能を実装するには?Day2

Last updated at Posted at 2022-06-16

オリジナルアプリ開発Day2、2本目の記事です。自分のメモのために書いています。

RDB構造でリプライ機能実装する方法は?

Twitterやyoutubeのコメント欄のように、コメントに対して、コメントをする機能をreplyと言いますが、その機能をどのようなRDB設計で再現すればいいのか考えていました。

自分が考えたものも含めて、解決策は5つ。

先人たちが見つけてくれた解法

・隣接リストモデル(ナイーブツリー).
・経路列挙モデル
・閉包テーブルモデル
・入れ子集合モデル

よく纏められたサイトがあったのでそちらをご紹介します。

自分ならば、上記4つの解法の中から1つ選ぶとしたら、閉包テーブルモデルを採用すると思います。

自分が考えた解法

コメントテーブルに対して、コメントのIDを外部キーとしたリプライテーブルを作成します。これで、2階層構造のコメント欄が完成です。
絵-5.jpg
リプライに対して、さらにリプライしたいのならば、リプライ2テーブルを作成します。アソシエーションを図示すると下のような感じです。
絵-6.jpg
さらに階層構造を作りたいのなら、テーブルを増やしていけばその分階層も増えます。

自分が考えた解法の欠点

テーブルの数を上限にリプライの階層が数の上限が決まってしまうということです。例えば、コメントテーブルとリプライテーブルしか用意していない場合、コメントにリプライし、さらにそのリプライに対して、リプライするということができません。しかし、実際に顧客が利用する場面を想像すると、リプライに対してさらにリプライを返す行為を何度も繰り返している場面は想定されにくく、この方法でツリー構造を作っても問題ないのかなと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?