データベースの設計について


データベースの設計で悩んでいます。

例えばユーザー情報用のデータベースを作るとします。

* * *

### 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

* * *

このように中間テーブルを挟むことになると思うのですが、将来必要になるかどうかわからないものを最初からこのように設計しても問題ありませんか?  
必要になってから工事するくらいなら・・・と思ってしまうのですが。

みなさんはどうしてますか?  
失敗談などもあれば是非教えて下さい。




一言にグループと言っても  
単一所属グループの場合、複数所属グループの場合、階層型グループの場合。  
複数グループに所属して、その中で優先グループをもつ場合もあります。  
どれを想定するかで適切な設計が決まります。

今迷っているのは将来の拡張性ではなく、まだグループの要件が詰めきれていないからではないでしょうか。  
もしそうなら、決定まで設計は待った方がいい気がします。

