scc0141 - bancos de dados e suas aplicações prof. jose fernando rodrigues junior normalização...
TRANSCRIPT
SCC0141 - Bancos de Dados e Suas Aplicações
Prof. Jose Fernando Rodrigues Junior
Normalização – parte 3
Forma Normal de Boyce Codd
Forma Normal de Boyce Codd
•A FNBC: versão mais restritiva da 3a. Forma Normal
•Maioria dos casos, relação na 3a.FN satisfaz à FNBC
•Uma relação está na Forma Normal de Boyce Codd (FNBC) quando:
para toda dependência funcional XA, X é uma chave candidata
FNBC
•A FNBC: versão mais restritiva da 3a. Forma Normal
•Maioria dos casos, relação na 3a.FN satisfaz à FNBC
•Uma relação está na Forma Normal de Boyce Codd (FNBC) quando:
para toda dependência funcional XA, X é uma chave candidata
FNBC
Lembrando:
3ª. FN: está na 2ª. FN e atributos comuns não dependem
transitivamente de qualquer chave candidata.
• Normalização:
1. considere as DFs em que o lado esquerdo não é chave candidata
2. transforme cada uma destas DFs em uma nova relação
3. retire os correspondentes atributos (lado direito das DFs) da relação original
FNBC
Refaça os exemplos de outras aulas e dos exercícios
•A FNBC foi proposta após a proposição das formas normais 2ª. e 3ª trata-se de uma versão mais
abrangente surgida naturalmente
•Aplicar a FNBC em uma relação que já está em 1ª. FN é suficiente para se alcançar a 2ª. FN e a 3ª. FN
•Pode-se prosseguir com o processo de normalização usando-se apenas duas formas normais:
1ª. FN, seguida da FNBC
FNBC
•Se já esta na 3ª. FN, a violação da FNBC é rara e ocorre apenas se:
a) Existe mais do que uma chave candidata
b) Existem pelo menos duas chaves candidatas compostas
c) Existe intersecção entre chaves compostas
•Visualmente
A B C
• DFs: {A, B} C e C B
• {A, B} é uma chave candidata, qual é a outra?
• Por pseudo-transitividade:
Se AB C e CB AC B
A outra chave candidata é {A, C}
FNBC
•Se já esta na 3ª. FN, a violação da FNBC é rara e ocorre apenas se:
a) Existe mais do que uma chave candidata
b) Existem pelo menos duas chaves candidatas compostas
c) Existe intersecção entre chaves compostas
•Visualmente
A B C
• DFs: {A, B} C e C B
• {A, B} é uma chave candidata, qual é a outra?
• Por pseudo-transitividade:
Se AB C e CB AC B
A outra chave candidata é {A, C}
FNBC
Na maior parte dos casos, se a relação está na 3ª. FN, então ela também está na
FNBC, mas...
Uma relação que está na 3ª. FN não estará na FNBC se existir uma DF X A tal que
X não é chave candidata (mas é primo) e A é um atributo primo.
(Se X não é atributo primo, a normalização até a 3ª. FN já eliminou o problema)
•Exemplo: suponha um domínio em que assistentes especiais são designados a alunos com problemas de
desempenho:
•um aluno só pode ter um único assistente por disciplina;
•um assistente só pode auxiliar uma única disciplina, mas pode auxiliar vários alunos.
Ensino = {Aluno, Disciplina, Assistente}
•DFs:
• {Aluno, Disciplina} Assistente
• Assistente Disciplina
• Por pseudo-transitividade:
{Aluno, Assistente} Disciplina
FNBC
Aluno Disciplina Assistente
Alan SMA100 Silvio
Bernando SMA100 Rodrigo
Caio SMA100 Silvio
Diego SMA100 Rodrigo
• Dependências funcionais:
• {Aluno, Disciplina} Assistente
• Assistente Disciplina
• Por pseudo-transitividade:
{Aluno, Assistente} Disciplina
1ª. FN Ok, sem atributos multi-valorados nem compostos
2ª. FN Ok, não primos sem dependência parcial da chave
3ª. FN Ok, não primos sem dependência transitiva da chave
FNBC
• Dependências funcionais:
• {Aluno, Disciplina} Assistente
• Assistente Disciplina
• Por pseudo-transitividade:
{Aluno, Assistente} Disciplina
1ª. FN Ok, sem atributos multi-valorados nem compostos
2ª. FN Ok, não primos sem dependência parcial da chave
3ª. FN Ok, não primos sem dependência transitiva da chave
FNBC Não ok, pois apesar da dependência funcional
Assistente Disciplina
Assistente não é uma chave candidata
FNBC
• Observando a relação, pode-se notar a presença de redundância nos atributos Disciplina e Assistente
• Como normalizar?
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBCAluno Disciplina Assistente
Alan SMA100 Silvio
Bernando SMA100 Rodrigo
Caio SMA100 Silvio
Diego SMA100 Rodrigo
• Observando a relação, pode-se notar a presença de redundância nos atributos Disciplina e Assistente
• Como normalizar?
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Todas as três satisfazem à FNBC, mas apenas uma é correta
FNBCAluno Disciplina Assistente
Alan SMA100 Silvio
Bernando SMA100 Rodrigo
Caio SMA100 Silvio
Diego SMA100 Rodrigo
• Observando a relação, pode-se notar a presença de redundância nos atributos Disciplina e Assistente
• Como normalizar?
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Todas as três satisfazem à FNBC, mas apenas uma é correta
FNBCAluno Disciplina Assistente
Alan SMA100 Silvio
Bernando SMA100 Rodrigo
Caio SMA100 Silvio
Diego SMA100 RodrigoInterpretação das DFs:
• {Aluno, Disciplina} Assistente: um aluno não pode cursar a mesma disciplina duas vezes
• Assistente Disciplina: um assistente só pode auxiliar em uma única disciplina
• {Aluno, Assistente} Disciplina: um aluno não pode cursar duas disciplinas com um mesmo assistente
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Assistente
Alan Silvio
Bernando Rodrigo
Caio Silvio
Diego Rodrigo
Aluno Disciplina
Alan SMA100
Bernando SMA100
Caio SMA100
Diego SMA100
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Assistente
Alan Silvio
Bernando Rodrigo
Caio Silvio
Diego Rodrigo
Aluno Disciplina
Alan SMA100
Bernando SMA100
Caio SMA100
Diego SMA100
Opção errada, pois a redundância dos dados foi mantida ao mesmo tempo em que a quantidade de dados armazenados aumentou
piorou o problema
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Assistente
Alan Silvio
Bernando Rodrigo
Caio Silvio
Diego Rodrigo
Aluno Disciplina
Alan SMA100
Bernando SMA100
Caio SMA100
Diego SMA100
Opção errada, pois a redundância dos dados foi mantida ao mesmo tempo em que a quantidade de dados armazenados aumentou
piorou o problema
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Disciplina
Alan SMA100
Bernando SMA100
Caio SMA100
Diego SMA100
Disciplina Assistente
SMA100 Silvio
SMA100 Rodrigo
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Disciplina
Alan SMA100
Bernando SMA100
Caio SMA100
Diego SMA100
Disciplina Assistente
SMA100 Silvio
SMA100 Rodrigo
Opção errada, pois agora não é possível saber qual aluno tem aula com qual Assistente ocorre geração de tuplas ilegítimas
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Disciplina
Alan SMA100
Bernando SMA100
Caio SMA100
Diego SMA100
Disciplina Assistente
SMA100 Silvio
SMA100 Rodrigo
Opção errada, pois agora não é possível saber qual aluno tem aula com qual Assistente ocorre geração de tuplas ilegítimas
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Assistente
Alan Silvio
Bernando Rodrigo
Caio Silvio
Diego Rodrigo
Assistente Disciplina
Silvio SMA100
Rodrigo SMA100
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Assistente
Alan Silvio
Bernando Rodrigo
Caio Silvio
Diego Rodrigo
Assistente Disciplina
Silvio SMA100
Rodrigo SMA100
Opção correta, a redundância foi minimizada e a junção recompõe os dados originais.
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
FNBC
Aluno Assistente
Alan Silvio
Bernando Rodrigo
Caio Silvio
Diego Rodrigo
Assistente Disciplina
Silvio SMA100
Rodrigo SMA100
Opção correta, a redundância foi minimizada e a junção recompõe os dados originais.
• Normalização:
1. considere as DFs em que o lado esquerdo não é chave candidata
Ex.: Assistente Disciplina
2. transforme cada uma destas DFs em uma nova relação
Ex.: Assistencia = {Assistente, Disciplina}
3. retire os correspondentes atributos (lado direito das DFs) da relação original
Ex.: Ensino = {Aluno, Assistente}
sem Disciplina
FNBC
• Conclusões sobre a FNBC
• Violação da FNBC: relações em 3ª.FN, mas não em FNBC raro
• Uso: substitui a 2ª. e a 3ª. FNs, quando se deseja normalização máxima
FNBC
• Exercício:
Lote = {PropId, Municipio, LotNum, Area, Preco, Imposto}*
*supõe-se que cada município possui uma área específica (e exclusiva) de loteamento
1. Quais são as chaves candidatas?
2. O que viola a 3ª. FN?
3. Como fica a normalização até a 3ª. FN?
4. Após isso, o que viola a FNBC?
5. Como fica a normalização completa?
6. Após isso, quais são as chaves candidatas da relação Lote?
FNBC
• Resposta:
• Antes de se analisar a normalização, deve-se identicar todas as chaves
• Inicialmente, as chaves candidatas são PropId e {Municipio, LotNum}
• No entanto, como AreaMunicipio, por pseudo-transitividade, então {LotNum, Area} também é chave candidata.
Lote = {PropId, Municipio, LotNum, Area, Preco, Imposto}
• Assim, Area Preco viola a 2ª. FN, pois tem dependência parcial da chave candidata {LotNum, Area}
• Pode-se ter uma relação Preco={Area, Preco} e a relação fica Lote = {PropId, Municipio, LotNum, Area, Imposto}
• A relação Lote viola a FNBC pois AreaMunicipio sendo que Area, apesar de primo, sozinha não é chave candidata
• Pode-se ter uma relação Municipio = {Area, Municipio} OU uma extensão da relação Preco={Area, Preco}, que ficaria
Preco={Area, Preco, Municipio} e a relação fica Lote = {PropId, LotNum, Area, Imposto}
• Após a normalização até a FNBC, as chaves candidatas são PropId e {LotNum, Area}
FNBC
Síntese e considerações finais
•Dependência funcional
•Se A1, A2 …, An B1, B2, …, Bn
•Formais normais
* desconsideram-se dfs triviais, isto é, X Y tal que Y X
•Normalização: decomposição de relações
•Eliminam redundância previnem anomalias de inserção, atualização, remoção e junção
Síntese
Forma Normal Característica*
1a. FN Atomicidade, monovaloração e junções sem perda
2a. FN 1a. FN e ausência de dependências parciais
3a. FN 2a.FN e ausência de dependências transitivas
Boyce Codd A esquerda de toda df é chave candidata
Formais Normais – visão geral
1FN
2FN
3FN
FNBC
•Quando usar normalização?
•Resposta: sempre
•Quando aplicá-la ao meu projeto?
•modo geral: quantidade de operações de leitura não é elevada
•Ex.: bases operacionais podem ter alto grau de normalização
•Diferentes graus de normalização em função do sistema
•Ex.: bancos transacionais (OLTP) e data warehouses têm baixo grau de
normalização (até nenhuma normalização)
Quando usar normalização
•Mas se eu não vou aplicar a normalização, então porque vou usá-la?
•Identificação de possibilidades de melhoria de desempenho
•Verificar se o projeto está correto de acordo com a semântica
Quando usar normalização
• Conclusões gerais: o conhecimento sobre normalização possui dois propósitos
1) Consertar projetos mal feitos – redundantes, potencialmente inconsistentes ou que
gerem tuplas ilegítimas em junção;
2) Desnormalização consciente: dado um conjunto de consultas de interesse, podem-se
detectar junções que são gargalos do sistema; prossegue-se desnormalizando o modelo e
gerenciando-se a redundância e a consistência – uso de triggers e de interfaces.
Quando usar normalização
Um pouco de históriaCultura da ciência da computação
• Edgar F. Codd (1923 - 2003)– Britânico– IBM, Nova York– Definiu o modelo relacinal– Curiosidade: concorrentes da IBM começaram a
usar as idéias de Codd, antes que a própria IBM
–Com Raymond F. Boyce, propôs a Forma normal de Boyce-
Codd
• Exercício:
Transporte = {NavioNome, NavioTipo, ViagemID, Carga, Porto, DataChegada}
NavioNome NavioTipo
ViagemID NavioNome, Carga
NavioNome, DataChegada ViagemId, Porto
1. Desenhe este esquema representando as DFs como flechas
2. Usando transitividade e aditividade, identifique uma chave candidata
Lembre-se: uma chave determina funcionalmente todos os outros atributos
3. Identifique uma segunda chave candidata por pseudo-transitividade
4. Normalize segundo a 2ª. FN
5. Normalize segundo a 3ª. FN
6. Normalize segundo a FNBC
Exercícios
• Resposta:
Transporte = {NavioNome, NavioTipo, ViagemID, Carga, Porto, DataChegada}
NavioNome NavioTipo
ViagemID NavioNome, Carga
NavioNome, DataChegada ViagemId, Porto
Uma chave candidata é {NavioNome, DataChegada}
Por razão da DF ViagemID NavioNome, outra chave candidata é {ViagemID, DataChegada}
Reordenando com as chaves identificadas:
{NavioNome, DataChegada, ViagemID, NavioTipo, Carga, Porto}
A DF NavioNome NavioTipo viola a 2ª. FN
A DF ViagemID Carga viola a 2ª. FN
A DF ViagemID NavioNome viola a FNBC
Normalização final: Transporte = {DataChegada, ViagemID, Porto}
Viagem = {ViagemID, NavioNome, Carga}
Navio = {NavioNome, NavioTipo}
Exercícios
Exercícios•
Exercício: normalize a seguinte relação
R (A, B, C, D, E, F, G)
• A, B C, D, E, F, G
• E, F A
• A C
Exercícios•
Resposta:
R (A, B, C, D, E, F, G)
• A, B C, D, E, F, G
• E, F A
• A C
Chaves candidatas: {A, B}, {E, F, B}
Violação da 2ª. FN por A C
Sem violação da 3ª. FN
Violação da FNBC por E,F A, pois {E,F} não é chave candidata
Exercícios•
Exercício: considere a seguinte instancia de relação
• Liste as dependências funcionais observáveis (não considere conjuntos de dados compostos do lado direito) e normalize-a
para a FNBC.
PecaNum Descr Fabric Vendedor FabricEnd Preco Desconto
10010 20 GB Disk Seagate Airton Palo Alto, CA $100 5%
10010 20 GB Disk IBM Jose Armonk, NY $90 5%
10220 256 MB RAM Kensington Silva San Mateo, CA $220 6%
10220 256 MB RAM IBM Mateus Armonk, NY $220 6%
10230 256 MB RAM Sun Microsystems Mauro Palo Alto, CA $310 7%
10440 17" LCD Monitor IBM Jose Armonk, NY $2.100 10%
10500 512 MB RAM IBM Mateus Armonk, NY $350 7%
10500 512 MB RAM Kensington Silva San Mateo, CA $220 6%
Exercícios
Resposta:
• Liste as dependências funcionais observáveis
• PecaNum Descr
• Fabric FabricEnd
• PecaNum, Fabric Preco, Desconto chave candidata
• Vendedor Fabric, FabricEnd
• Preco Desconto
• O atributo FabricEnd viola a 1ª. FN pois é composto, o que poderia ser resolvido com a quebra do atributo em dois: Cidade e Estado
FabricanteEnd = {Cidade, Estado}
• Chaves candidatas: {PecaNum, Fabric} e por pseudo-transitividade {PecaNum,Vendedor}, pois VendedorFabric
• FabricanteEnd = {Fabric, FabricEnd} viola a 2ª.FN
• PecaDescr = {PecaNum, Descr} viola a 2ª. FN
• PrecoDesconto = {Preco, Desconto} viola a 3ª. FN
• Vendedor Fabric viola a FNBC
VendedorFabric = {Vendedor, Fabric}
• Relação original fica como {PecaNum, Vendedor, Preco}