各ユーザーに対応するロールを持つユーザー認証をサポートするWebアプリケーションを開発しています。また、ユーザーはさまざまなタイプで、さまざまなフィールドが関連付けられている場合があります。各ユーザーが持ついくつかのフィールドは、次のように同じになります。
email, password, first_name, last_name, etc.
ただし、ユーザータイプごとに一部のフィールドは異なります。例えば:
User Type: Instructor
Fields unique to this type of user
----------------------------------
hourly_rate, tax_status
==================================
User Type: Student
Fields unique to this type of user
----------------------------------
instrument, monthly_charge, program
==================================
User Type: Employee
Fields unique to this type of user
----------------------------------
hourly_rate, location
これは、これらのタイプのユーザー間で類似し、一意である可能性があるフィールドのタイプの簡単な例です。
私が考えた可能な設定は次のとおりです:
Table: `users`; contains all similar fields as well as a `user_type_id` column (a foreign key on `id` in `user_types`
Table: `user_types`; contains an `id` and a `type` (Student, Instructor, etc.)
Table: `students`; contains fields only related to students as well as a `user_id` column (a foreign key of `id` on `users`)
Table: `instructors`; contains fields only related to instructors as well as a `user_id` column (a foreign key of `id` on `users`)
etc. for all `user_types`
または:
Table: `users`; contains all possible columns for all users and allow columns that could be filled for one user type but not another to be NULL
私の質問:これらのうちの1つは他の方法よりも優れているのですか、それともひどいので、他のことを完全に検討する必要がありますか?
私は1つ目はより良いアプローチであるとアドバイスします
テーブル: `users`;同様のすべてのフィールドと `user_type_id`列(` user_types` の `id`の外部キー;テーブル:` user_types`;には `id`と` type`が含まれます(学生、インストラクター、 etc。) テーブル: `students`;には、学生のみに関連するフィールドと、` user_id`列( `users`の` id`の外部キー)が含まれます。 テーブル: `instructors `;は、インストラクターのみに関連するフィールドと、` user_id`列( `users`の` id`の外部キー) などすべての `user_types` に含まれます
理由:-
学生の列、インストラクターなどのテーブルなどのユーザー関連データは将来増加する可能性があるため、1番目のアプローチで管理するのは簡単です。
そして、他のオプションを選択して、列の数が多すぎるテーブルを作成します。これは、将来のデータベース管理の観点からは好ましくなく、将来、列の数が増えると、さらに問題が発生します。