09/09/14 20:43:56
DBの設計の質問なのですがrailsが絡むのでここで質問させてください。
webシステムでユーザーのテーブルを作りたいのですが、memberテーブル(一般ユーザー)とadminテーブル(管理者ユーザー)に分けて作ろうと思っています。
ただし名前やパスワードなど共通するカラムはuserテーブルに切り出します。
この時、userテーブルとmember&adminテーブルの関連はどのように作るべきでしょうか?
以下のように①と②の二つ考えてみたのですが、どっちが良いのか分かりません。
①memberテーブルとadminテーブルそれぞれにuser_idカラムを作り、memberとadminからuserを参照する。
②userテーブルにuser_id(memberテーブルのidまたはadminテーブルのidを格納する)とuser_type("member"または"admin"を格納する)を作り、userからmemberとadminを参照する。
3つのテーブルの関係を考えるとuserがmemberとadminの親になるのが自然なので①の方が良いのかなと思うのですが、
②の方法だと、railsのポリモーフィック関連で3つのテーブルの関連付けができるため便利です。(①だとuserとmember、userとadminを別々に関連付けするのでmemberとadminに関連性が無くなる)
どっちのやり方が適切でしょうか?