commentテーブルの複数モデルへの追加について
commentテーブルを複数のモデルに対して追加したいとき、それぞれのモデルに対してコメントテーブルを作成するのか、それとも共通のコメントテーブルを一つ作って複数モデルと関連づけるのか、どれがいいのか考えた。
コメント機能を付けたいmodelが複数あるときはそれぞれのコメントテーブルつくるのかコメントテーブルを1つ作って外部キーを複数カラムとして持つのか、どっちがいいかな。
— hayakawa.gif (@razokulover) 2014, 2月 20
3案
案1
モデルごとにカラムを追加
案2
ポリモーフィック関連でカラムは増やさないがcommentテーブルは共通で使用する
@razokulover Rails なら has_many_and_belongs_to や through を使うとかポリモーフィック関連を使うという選択肢もありますね。外部キーを複数持つのはヤバそうな臭いします。
— yancya (@yancya) 2014, 2月 20
案3
モデルごとにcommentテーブルを作成
@razokulover それぞれにコメントテーブルを作るに一票。各モデルで同じコメントを使うわけじゃないから。タグとかカテゴリーなら中間テーブルを用意したほうがいいと思うけど。
— NGHRK (@nigohiroki) 2014, 2月 20
どれがいいのか
この3パターン。
1はまあ無し。コメント追加をしたいモデルが増えるごとにカラム増やすとかまあないだろう、と。
で、1よりは2は全然あり。 ただ、今後コメントを追加したモデルが必要なくなる可能性や複数テーブルのコメントが局所に集まるので、もしコメント数の少ないモデルがあったとしてもコメント数の多いモデルにパフォーマンスが依存してしまうような可能性もある。 ということで、3がベターなのではないかというのが今日のところ。
ただ、t_wadaさんに『SQLアンチパターン』の6章を読みなされと助言をいただいたので即電子版を購入した。読み損ねてたので良い機会でした。
@razokulover 書籍『SQL アンチパターン』に「7章 ポリモーフィック関連」という章があってですね、その章を読むといろいろ分かるらしいですよ (チラッ #sqlap
— Takuto Wada (@t_wada) 2014, 2月 20
ということで読み終えたら、いまの考えが変わるかもしれない。
それにしても、twitterで質問したら結構なスピードで返答がくるし、精度をあげていけば社内IRCなんかより助かるかもしれないなーなどと。