Estou desenvolvendo um aplicativo da web que dará suporte à autenticação do usuário com funções correspondentes para cada usuário. Além disso, meus usuários podem ser de diferentes tipos e ter diferentes campos associados a eles. Alguns dos campos que cada usuário possui serão os mesmos, como em:
email, password, first_name, last_name, etc.
Mas alguns dos campos para diferentes tipos de usuário serão diferentes. Por exemplo:
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
Este é um breve exemplo dos tipos de campos que podem ser semelhantes e exclusivos entre esses tipos de usuários.
As possíveis configurações que pensei são:
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`
ou:
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
Minha pergunta: uma delas é uma abordagem melhor do que a outra ou ambas são terríveis e devo olhar para algo totalmente diferente?
Eu aconselharia o primeiro a ser a melhor abordagem, que é
Razão:-
Os dados relacionados ao usuário, como colunas em tabelas de alunos, instrutores, etc., podem aumentar no futuro, portanto, será fácil gerenciá-los com a primeira abordagem.
e escolher as outras opções para criar uma tabela com muitos números de colunas, o que não seria bom em termos de gerenciamento futuro do banco de dados e com o aumento do número de colunas no futuro, será mais problemático.