Estou projetando um banco de dados para estudantes. Estudantes de ciência da computação aqui na Suíça podem decidir entre diferentes especializações, por exemplo, desenvolvimento de aplicativos, engenharia de sistemas, etc.
Também há alunos de outras profissões neste aplicativo, que não possuem essa especialização. Alguns exemplos:
+--------------------+-------------------------+
| Profession | Specialization |
+--------------------+-------------------------+
| Computer scientist | |
| | Application development |
| | System engineering |
| | Support |
| | |
| Electrician | |
| | none |
| | |
| Janitor | |
| | none |
| | |
| Architect | |
| | Small buildings |
| | High buildings |
| | |
+--------------------+-------------------------+
Espero que você tenha a idéia. Minha pergunta agora é, como eu desenho as tabelas do banco de dados com esses atributos, já que eles são dependentes uns dos outros? Cada usuário tem uma profissão, alguns não possuem uma especialização dependendo de sua profissão. Portanto, um eletricista não deve ser um desenvolvedor de aplicativos, nem um arquiteto.
Meus pensamentos até agora 1
+-----------------------------+
| User |
+-----------------------------+
| #id |
| profession_id |
| specialisazion_id, nullable |
+-----------------------------+
Imponha a lógica por meio de verificações de restrição
Abordagem 2
+-------------------+ +----------------+ +------------+
| User | | Specialization | | Profession |
+-------------------+ +----------------+ +------------+
| #id | +--| #id | +--| #id |
| username | | | name | | | name |
| specialization_id |--+ | profession_id |--+ +------------+
+-------------------+ +----------------+
Gerencie eu mesmo a lógica e garanta que toda profissão sem especialização tenha uma entrada de especialização.
Abordagem 3
+----------------+ +-----------------------------+ +------------+
| Specialization | | spec_prof | | Profession |
+----------------+ +-----------------------------+ +------------+
| #id |--+ | #id | +--| #id |
| name | +--| specialization_id, nullable | | | name |
+----------------+ | profession_id |--+ +------------+
+-----------------------------+
|
|
+--------------+ |
| User | |
+--------------+ |
| #id | |
| username | |
| spec_prof_id |--+
+--------------+
De alguma forma, todas as abordagens diferentes parecem desajeitadas, sujas. Quais são os argumentos a favor e contra as diferentes abordagens? Existe uma maneira melhor?
E como faço para procurar esse problema? Dependente é a nomenclatura correta?
Qualquer ajuda é muito apreciada.