###知りたいこと
掲示板のテーブル設計ですが、1と2はどちらがいいのでしょうか。
1.UNION
で生じるnull
を許す
2.あらかじめカラムにnull
を許す
###1.UNIONで生じるnullを許す
下記のように「threads」と「comments」というテーブルに分けるならば、それらのカラムにnull
は生じません。
ここでユーザーが
・スレッド1をフォロー
・ユーザー80をフォロー
としていたとき、
彼のタイムラインに
・スレッド1へ投稿されたもの
・ユーザー80が投稿したもの
を流すことを考えます。
その情報を取得すると以下のように「threads」と「comments」をUNION
して、null
や0
などで埋めないといけないカラムが出てきてしまいます。
「thread_genre」は「threads」にしかないカラムだし、逆に「parent_comment_id」や「parent_thread_id」は「comments」にしかないカラムだからです。
###2.あらかじめカラムにnullを許す
他方、「threads」と「comments」というテーブルに分けず、下記のように「posts」に統合しておきますと、あらかじめnull
を許しますが、UNION
するコストがかかりません。
タイムラインに流す情報の取得はSELECT
だけで済みます。
###改めて
ネットで検索する掲示板のテーブル設計といえば「threads」と「comments」をわけるものばかりです。
しかし、タイムラインのように「threads」と「comments」を統合して走査するケースがある場合に鑑みますと、2がいいのではと感じます。
タイムラインの情報としていずれにせよnull
が介在せざるをえないのならば、2はUNION
のコストが不要なためです。
テーブル設計は初めての初学者で、他にいい方法なども存じません。
2にすべきか、1にすべきか、他にもっと適切な設計があれば知りたいです。
尚、実際には「thread_genre」以外にもスレッドだけのカラムはたくさん(50個)ありますし、逆にコメントにしかないカラムもこの例よりたくさんあります。(なのでWordPressのようにEVAを採用するとレコードが増えすぎて心配ですし、取得のSQLの煩雑さも懸念されますのでEVAは避けたいです。)
アドバイス宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー