Existem basicamente três opções para traduzir a generalização em um modelo de banco de dados
1. Uma mesa por aula concreta
Criar tabelas
Admin , Teacher e Student . Cada uma dessas tabelas contém colunas para todos os atributos e relações de User - Pro
- Todos os campos de uma subclasse concreta estão na mesma tabela, portanto, nenhuma junção é necessária para obter todos os dados do aluno
- Restrições fáceis de validação de dados (como campos obrigatórios para
Student)
- Con
- Todos os campos de
Usersão duplicados em cada tabela de subclasse - Chaves estrangeiras para
Userdevem ser divididos em três campos FK. Um paraAdmin, um paraTeachere um paraStudent.
- Todos os campos de
2. Na tabela para todo o conjunto de generalizações
Neste caso você tem apenas uma chamada de tabela
User que contém todos os campos de User + todos os campos de todas as subclasses de User - Pro
- Todos os campos estão na mesma tabela, portanto, nenhuma junção é necessária para obter todos os
Userdados - Sem divisão de FKs para
User
- Todos os campos estão na mesma tabela, portanto, nenhuma junção é necessária para obter todos os
- Con
- Existem vários campos que nunca são usados. Todos os campos específicos para
StudenteTeachernunca são preenchidos paraAdminse vice-versa - Validação de dados, como campos obrigatórios para uma classe concreta, como
Studenttornar-se bastante complexo, pois não é mais um simplesNot Nullrestrição.
- Existem vários campos que nunca são usados. Todos os campos específicos para
3. Uma tabela por classe concreta e uma para a superclasse
Neste caso, você cria tabelas para cada uma das subclasses concretas e cria uma tabela para a classe
User . Cada uma das tabelas de subclasses concretas tem um FK obrigatório para User - Pro
- Esquema mais normalizado:sem campos repetidos para os atributos do usuário e sem campos não utilizados.
- Sem divisão de FKs para
User - Restrições fáceis de validação de dados (como campos obrigatórios para
Student)
- Con
- Você precisa consultar duas tabelas se quiser todos os dados de um
Student - Regras de validação complexas para garantir que cada
Userregistro tem exatamente umAdmin,TeacherouStudentregistro.
- Você precisa consultar duas tabelas se quiser todos os dados de um
Qual dessas opções você escolhe depende de uma série de coisas, como o número de subclasses, o número de atributos em qualquer subclasse ou superclasse, o número de FKs para a superclasse e provavelmente algumas outras coisas que eu não fiz pense sobre.