Esse artigo foi feito no intuito de servir como fixação dos conteúdos que estou estudando no momento, ministrado pelo professor Gabriel Ribeiro Diniz para as aulas de Banco de Dados no curso de Gestão de TI - FAPAM.
Parte 2 das aulas de Entidade-Relacionamento, continue apenas se já tiver lido a Parte 1.
Generalização e Especialização
Generalização e Especialização são técnicas de modelagem que permitem representar um conjunto de entidades de forma mais abstrata. Ocorre herança de atributos entre as entidades, isto é, as entidades de nível inferior herdam todos os atributos e relacionamentos da entidade a qual estão ligadas.
SÍMBOLO: Um triângulo de "cabeça para baixo"
![Símbolo de generalização e especialização](/static/simbolo-generalizacao-especializacao-light-4bbf4b53.png)
![Símbolo de generalização e especialização](/static/simbolo-generalizacao-especializacao-dark-a7a3dc1f.png)
Generalização e especialização são abstrações inversas e são representadas no esquema ER da mesma forma (mésmo símbolo)
Especialização
Usada quando um conjunto de entidades possui subgrupos com características próprias.
Especificação de subgrupos dentro de um conjunto de entidades que são distintas, isto é, possuem casacterísticas específicas em um vez que possuem atributos ou relacionamentos que não se aplica ao conjunto entidade de nível superior.
![Especialização de VEÍCULO para TERRESTRE e AQUÁTICO](/static/veiculo-terrestre-aquatico-especializacao-dark-0c3b2e33.png)
![Especialização de VEÍCULO para TERRESTRE e AQUÁTICO](/static/veiculo-terrestre-aquatico-especializacao-light-e3b16190.png)
EMPREGADO
pode ser HORISTA
ou DIARÍSTA
.![Especialização/Generalização de EMPREGADO para HORISTA e DIARÍSTA](/static/empregado-horista-diarista-light-40911c90.png)
![Especialização/Generalização de EMPREGADO para HORISTA e DIARÍSTA](/static/empregado-horista-diarista-dark-778b2576.png)
Generalização
Usada quando entidades distintas possuem características (atributos) em comum, possibilitando a criação de uma entidade mais genêrica que as represente.
Combina conjuntos de entidades, que compartilham as mesmas características (atributos/relacionamentos), em uma entidade de mais alto nível.
![Generalização de VEÍCULO para TERRESTRE e AQUÁTICO](/static/veiculo-terrestre-aquatico-generalizacao-dark-5682de02.png)
![Generalização de VEÍCULO para TERRESTRE e AQUÁTICO](/static/veiculo-terrestre-aquatico-generalizacao-light-e5bf25ef.png)
Redundância
A generalização/especialização é muito útil para evitar redundâncias, por exemplo:
![Relacionamento com entidades redundantes](/static/relacionamento-redundante-light-99fe16b1.png)
![Relacionamento com entidades redundantes](/static/relacionamento-redundante-dark-ee5bb1c6.png)
Poderíamos refazer o modelo ER da seguinte forma:
![Relacionamento com entidades redundantes](/static/relacionamento-redundante-solucao-light-ddb5019f.png)
![Relacionamento com entidades redundantes](/static/relacionamento-redundante-solucao-dark-1a931742.png)
Conselhos práticos
ATRIBUTO vs GENEREALIZAÇÃO/ESPECIALIZAÇÃO
Questão: modelar um determinado objeto, por exemplo, a categoria funcional de cada empregado de uma empresa.
Como atributo?
- Categoria funcional como atributo da entidade
EMPREGADO
.
Como generalização/especialização?
- Cada categoria funcional corresponderá a uma especialização da entidade
EMPREGADO
.
![Diferença entre os atributo e generalização/especialização](/static/diff-modelos-dark-d047f7c4.png)
![Diferença entre os atributo e generalização/especialização](/static/diff-modelos-light-0db7ab21.png)
Atributo opcional
Pode indicar subconjuntos de entidades que são modelados mais corretamente através de especializações. Exemplo:
![Atributo opcional](/static/atributo-opcional-exemplo-dark-0d511466.png)
![Atributo opcional](/static/atributo-opcional-exemplo-light-c4931091.png)
Tipos de generalização/especialização
Total
Nesse tipo generalização/especialização, a existência da ocorrência da entidade genérica OBRIGATORIAMENTE implica na existência da ocorrência da entidade especializada.
!['t' Indica que todo CLIENTE é ou PESSOA FÍSICA ou PESSOA JURÍDICA](/static/exemplo-especializacao-total-light-8ceebb7e.png)
!['t' Indica que todo CLIENTE é ou PESSOA FÍSICA ou PESSOA JURÍDICA](/static/exemplo-especializacao-total-dark-1f3a3fbd.png)
Parcial
Nesse tipo de generalização/especialização, a existência da ocorrência da entidade genérica NÃO OBRIGA a existência da ocorrência da entidade especializada.
!['p' Indica que nem todo FUNCIONÁRIO é MOTORISTA ou SECRETÁRIA](/static/exemplo-especializacao-parcial-dark-014cdd7b.png)
!['p' Indica que nem todo FUNCIONÁRIO é MOTORISTA ou SECRETÁRIA](/static/exemplo-especializacao-parcial-light-812a5606.png)
Exclusiva
Em uma hierarquia de generalização/especialização, uma ocorrência da entidade genérica é especializada no máximo uma vez, nas folhas da árvore de generalização/especialização.
![Exemplo de especialização exclusiva](/static/exemplo-especializacao-exclusiva-dark-a88fab0b.png)
![Exemplo de especialização exclusiva](/static/exemplo-especializacao-exclusiva-light-5999e7dd.png)
O tipo exclusivo pode ser entendido como um XOR
entre as entidades especializadas.
Compartilhada
Em uma hierarquia de generalização/especialização, uma ocorrência da entidade genérica aparecer em várias entidades especializadas, nas folhas da árvore de generalização/especialização.
![Exemplo de especialização compartilhada](/static/exemplo-especializacao-compartilhada-dark-8a14ebf3.png)
![Exemplo de especialização compartilhada](/static/exemplo-especializacao-compartilhada-light-b4d707e6.png)
União de tipos
Exclusiva | Compartilhada | |
---|---|---|
Total | tx | tc |
Parcial | px | pc |
Total + Exclusiva (tx
)
Todo cliente DEVE ser ou pessoa física, ou pessoa jurídica, mas NÃO PODE ser ambos ao mesmo tempo.
![Exemplo de especialização total e exclusiva](/static/exemplo-especializacao-total-exclusiva-dark-1f3145b7.png)
![Exemplo de especialização total e exclusiva](/static/exemplo-especializacao-total-exclusiva-light-60c6e1e5.png)
Total + Compartilhada (tc
)
Toda nacionalidade DEVE ser ou braileira, ou indiana, ou japonesa, ou mais de uma ao mesmo tempo.
![Exemplo de especialização total e compartilhada](/static/exemplo-especializacao-total-compartilhada-light-59a61721.png)
![Exemplo de especialização total e compartilhada](/static/exemplo-especializacao-total-compartilhada-dark-78201ea9.png)
Parcial + Exclusiva (px
)
Todo Saiyajin PODE estar transformado OU NÂO, mas se estiver, so pode ter UMA transformação por vez.
![Exemplo de especialização parcial e exclusiva](/static/exemplo-especializacao-parcial-exclusiva-dark-1d52ce37.png)
![Exemplo de especialização parcial e exclusiva](/static/exemplo-especializacao-parcial-exclusiva-light-13bde9db.png)
Parcial + Compartilhada (pc
)
Um médico PODE ser um cardiologista/neurologista OU NÃO, e se for, pode ser MAIS DE UM, ao mesmo tempo.
![Exemplo de especialização parcial e compartilhada](/static/exemplo-especializacao-parcial-compartilhada-light-c0829741.png)
![Exemplo de especialização parcial e compartilhada](/static/exemplo-especializacao-parcial-compartilhada-dark-e5929376.png)
Níveis de especialização
Não existe um limite para o nível de especialização. A árvore de especialização pode ter mais de uma camada.
![Exemplo de multnível de especialização](/static/exemplo-multivel-especializacao-light-857345fe.png)
![Exemplo de multnível de especialização](/static/exemplo-multivel-especializacao-dark-a33b3eae.png)
Herança múltipla
Uma herança múltipla ocorre quando uma entidade especializada é a especializada de mais de uma entidade genérica.
![Exemplo de herança múltipla](/static/exemplo-heranca-multipla-light-574c3c1b.png)
![Exemplo de herança múltipla](/static/exemplo-heranca-multipla-dark-ae2fe8c7.png)
Entidade associativa
Suponhamos a seguinte situação: Considere o relacionamento abaixo, MÉDICO
-consulta
-PACIENTE
, agora precisamos armazenar informações sobre medicamentos. Para isso vamos criar a entidade MEDICAMENTO
.
![Relacionamento MÉDICO-consulta-PACIENTE](/static/medico-consulta-paciente-light-88f454f4.png)
![Relacionamento MÉDICO-consulta-PACIENTE](/static/medico-consulta-paciente-dark-86beeb56.png)
Se associarmos a entidade MEDICAMENTO
à entidade MÉDICO
, só saberíamos qual médico receitou o medicamento, e não para qual paciente.
![Relacionamento MEDICAMENTO-receita-MEDICO-consulta-PACIENTE](/static/medicamento-receita-medico-consulta-paciente-light-e06ed8bd.png)
![Relacionamento MEDICAMENTO-receita-MEDICO-consulta-PACIENTE](/static/medicamento-receita-medico-consulta-paciente-dark-692ac0b6.png)
Se associarmos a entidade MEDICAMENTO
à entidade PACIENTE
, só saberíamos qual paciente recebeu a receita, e não quem receitou.
![Relacionamento MEDICO-consulta-PACIENTE-toma-MEDICAMENTO](/static/medico-consulta-paciente-toma-medicamento-light-fec16500.png)
![Relacionamento MEDICO-consulta-PACIENTE-toma-MEDICAMENTO](/static/medico-consulta-paciente-toma-medicamento-dark-5be03654.png)
Queremos associar a entidade MEDICAMENTO
à consulta. Porém, isso não está previsto no Modelo Entidade Relacionamento. Para isso foi criado o conceito de Entidade Associativa.
Esse conceito consiste em transformar um relacionamento em uma entidade para que dessa forma seja possível criar um relacionamento entre a entidade MEDICAMENTO
e a entidade CONSULTA
.
![Exemplo de entidade associativa](/static/exemplo-entidade-associativa-light-e396bc33.png)
![Exemplo de entidade associativa](/static/exemplo-entidade-associativa-dark-42ff01c8.png)