###前提・実現したいこと
rails5とpostgresqlを使ってウェブアプリを作る際のデータ構造に悩んでいます。
よくあるアマゾンなどの商品ページに対応するコメント機能を実現したいです。
####機能
・祖先のないコメントだけを時系列順で検索できる。(ページ表示時は祖先のないコメントのみ表示したいため)
・コメントに対してコメントができる。
・コメントに対する子孫コメントを簡単に検索できる。
・コメントの削除ができる(とりあえずサイト管理者のみ可能)
####(例)
商品ページに対して以下のような階層を持ったコメント機能
※最初はコメント1,6,7,9を表示しており、リンクを押すたびAJAXで子孫のコメントを呼ぶ。
コメント1
ーコメント2
ーーコメント3
ーコメント4
ーコメント5
コメント6
コメント7
ーコメント8
コメント9
###現状考えている方法
Productsテーブルとcommentsテーブルと閉包テーブルによって実現しようと思っています。
■products
id
name
■comments
id
product_id(FT)
body
first_flag #親が無い一番上のコメントの場合はtrue
■comment_clousure
id
ancestor(FT) #祖先(commentのid)
descendent(FT) #子孫(commentのid)
hierarchy #祖先と子孫との階層離れを示す(コメント1とコメント2なら2,コメント1とコメント1なら1)
コメント1の子孫コメントを検索(AJAXによる子孫の検索)する際は非常に簡単にできると思うのですが、
反面、親のないコメントだけを検索するクエリを実現するのが面倒かと思い悩んでいます。
なのでcommentsテーブルのカラムにfirst_flagを作成して、
親の無いコメントだけを検索する場合はこちらのフラグを見て検索しようと思っているのですが、
他に良い構造やこのような場合に一般的に使われている構造などありませんでしょうか?
回答2件
あなたの回答
tips
プレビュー