Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Classe abstrata de UML para diagrama ER. Possível ? Como?


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 User são duplicados em cada tabela de subclasse
    • Chaves estrangeiras para User devem ser divididos em três campos FK. Um para Admin , um para Teacher e um para Student .

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 User dados
    • Sem divisão de FKs para User
  • Con
    • Existem vários campos que nunca são usados. Todos os campos específicos para Student e Teacher nunca são preenchidos para Admins e vice-versa
    • Validação de dados, como campos obrigatórios para uma classe concreta, como Student tornar-se bastante complexo, pois não é mais um simples Not Null restrição.

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 User registro tem exatamente um Admin , Teacher ou Student registro.

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.