質問: データベースの設計で悩んでいます。 例えばユーザー情報用のデータベースを作るとします。 --- ### users * id * name --- これに性別を持たせるときは --- ### users * id * name * sex_id ### sexes * id * name --- これでよいと思うのですが、例えばグループを持たせたいときにすごく悩んでしまいます。 --- ### users * id * name * group_id ### groups * id * name --- こうしてしまうと、将来複数のグループを持たせたいとなった時に融通がきかなくなると思います。 なので --- ### users * id * name ### groups_users * id * user_id * group_id ### groups * id * name --- このように中間テーブルを挟むことになると思うのですが、将来必要になるかどうかわからないものを最初からこのように設計しても問題ありませんか? 必要になってから工事するくらいなら・・・と思ってしまうのですが。 みなさんはどうしてますか? 失敗談などもあれば是非教えて下さい。
回答: フレームワーク的なアプローチで考えてみますね。 user.groupでドバーっとあちこち書きまくったやつを、 user.groupsにしたらレコードインスタンスだったものが配列になるので大変です。 それなら最初から「常に配列だけど現状1件しか帰ってこないよ」の方が気が楽です。 しかしその場合でもuser.groups.firstとか書いちゃったら意味がありません。 以上のことから 「groupsが複数あること前提で設計する(=複数きた時の挙動が定義できる)」 かどうかが判断材料としています。現時点で定義できないなら書くよりも 「そのときは、変更コストかかりますからね?」と釘刺したほうがストレスなく済みますよ。 :)