Já vi muitos ERDs de escolas, professores e todas as tabelas de junção/associativas. Eles sempre têm três mesas:
- Professores
- Alunos
- Tabela associativa entre eles, talvez assuntos de algo assim.
assume-se que um professor não pode ser um aluno e vice-versa. Mas e se um aluno também puder ser professor (uma escola não primária, obviamente)? Se eu mantiver a visão tradicional, acabo repetindo dados entre professores e alunos, como o nome. o que estou perdendo?
Seria um design ruim ter:
Person table
----
person_unique_id
lastname
firstname
...
Teacher table
----
teacher_unique_id
person_unique_id
subject_unique_id #if I want to know what this person can teach.
Subject table
----
subject_unique_id
Eu ainda teria que ter uma tabela associativa para todos os relacionamentos muitos-para-muitos como:
schedule
----
schedule_unique_id
person_unique_id
teacher_unique_id
subject_unique_id
time
date
room
....
Então eu poderia fazer algo como:
SELECT * FROM Person p, Teacher T, Subject s
WHERE p.person_unique_id = t.person_unique_id
AND t.subject_unique_id = s.subject_unique_id
AND p._person_unique_id = 12;
O que você está dizendo faz sentido, sim.
Uma coisa é que você realmente não pode selecionar alunos sem excluir Pessoas que são professores... E mesmo se você o fizesse, os alunos que também são professores estariam faltando sem maiores esforços. Portanto, talvez faça sentido ter uma tabela de alunos também para atribuir Pessoas que são alunos da mesma forma que você fez com os professores.
Significado: P1 é professora. P2 é um estudante. ...
Com certeza existem mais soluções possíveis. Acho que tudo depende do requisito que você tem e qualquer solução deve permanecer.
É possível que um aluno às vezes também seja professor e talvez até ensine o curso em que é aluno ... Ou talvez a administração da escola tenha usado um banco de dados para uma escola diferente, digamos, fundamental ao mesmo tempo que para a escola noturna dos pais. Talvez seja necessária uma flexibilidade adicional.
Basicamente, vá em frente e pense na normalização para resolver seu requisito e chegar a um modelo valioso. Usar tabelas m:n para resolver isso apenas segue as regras de normalização.
Exemplo de como fazer normalização:
https://www.studytonight.com/dbms/database-normalization.php