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
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
• A FNBC: versão mais restritiva da 3a. Forma Normal
• Maioria dos casos, relação na 3a.FN satisfaz à FNBC
Lembrando:
• Uma 3ª.
relação
Forma
de Boyce Codd
FN: está
estánana
2ª. Normal
FN e atributos
(FNBC)
quando:
comuns
não
dependem
paratransitivamente
toda dependência
XA,
X é uma
defuncional
qualquer
chave
chave
candidata
candidata.
FNBC
• 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
Refaça os exemplos de outras aulas e
dos exercícios
FNBC
• 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 usandose 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
CB
{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:
Na
maior
parte
dos
casos,
se
a
relação
está
na
a) Existe mais do que uma chave candidata
3ª. FN, então ela também está na FNBC, mas...
b) Existem pelo menos duas chaves candidatas compostas
c) Existe intersecção entre chaves compostas
Uma relação que está na 3ª. FN não estará na
FNBC se existir uma DF X A tal que X não é
• Visualmente
chave candidata (mas é primo) e A é um atributo
A
B
C
primo.
•
•
•
DFs:
C primo,
e
B
(Se X{A,
nãoB}é
atributo
aC
normalização
até a 3ª. FN já
eliminou
o problema)
{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
• 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}
Aluno
Disciplina
Assistente
Alan
SMA100
Silvio
Bernando
SMA100
Rodrigo
Caio
SMA100
Silvio
Diego
SMA100
• DFs:
• {Aluno, Disciplina} Assistente
• Assistente Disciplina
• Por pseudo-transitividade:
{Aluno, Assistente} Disciplina
Rodrigo
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
• 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
Aluno
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}
FNBC
Aluno
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
FNBC
Aluno
Disciplina
Assistente
Alan
SMA100
Silvio
Bernando
SMA100
Rodrigo
Caio
SMA100
Silvio
Interpretação
das DFs: SMA100
Diego
Rodrigo
• {Aluno, Disciplina} Assistente: um aluno não pode cursar a
• Observando
a relação,
pode-se notar a presença de
mesma disciplina
duas vezes
nosDisciplina:
atributos Disciplina
e Assistente
• redundância
Assistente
um assistente
só pode auxiliar em
• Como
normalizar?
uma única
disciplina
•• Três
opções:
{Aluno,
Assistente} Disciplina: um aluno não pode cursar
duas disciplinas
com um mesmo
assistente
{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
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Assistente
Aluno
Disciplina
Alan
Silvio
Alan
SMA100
Bernando
Rodrigo
Bernando
SMA100
Caio
Silvio
Caio
SMA100
Diego
Rodrigo
Diego
SMA100
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Assistente
Aluno
Disciplina
Alan
Silvio
Alan
SMA100
Bernando
Rodrigo
Bernando
SMA100
Caio
Silvio
Caio
SMA100
Diego
Rodrigo
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
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Assistente
Aluno
Disciplina
Alan
Silvio
Alan
SMA100
Bernando
Rodrigo
Bernando
SMA100
Caio
Silvio
Caio
SMA100
Diego
Rodrigo
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
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Disciplina
Disciplina
Assistente
Alan
SMA100
SMA100
Silvio
Bernando
SMA100
SMA100
Rodrigo
Caio
SMA100
Diego
SMA100
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Disciplina
Disciplina
Assistente
Alan
SMA100
SMA100
Silvio
Bernando
SMA100
SMA100
Rodrigo
Caio
SMA100
Diego
SMA100
Opção errada, pois agora não é possível saber qual aluno tem aula com qual
Assistente ocorre geração de tuplas ilegítimas
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Disciplina
Disciplina
Assistente
Alan
SMA100
SMA100
Silvio
Bernando
SMA100
SMA100
Rodrigo
Caio
SMA100
Diego
SMA100
Opção errada, pois agora não é possível saber qual aluno tem aula com qual
Assistente ocorre geração de tuplas ilegítimas
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Assistente
Assistente
Disciplina
Alan
Silvio
Silvio
SMA100
Bernando
Rodrigo
Rodrigo
SMA100
Caio
Silvio
Diego
Rodrigo
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Assistente
Assistente
Disciplina
Alan
Silvio
Silvio
SMA100
Bernando
Rodrigo
Rodrigo
SMA100
Caio
Silvio
Diego
Rodrigo
Opção correta, a redundância foi minimizada e a junção recompõe os dados
originais.
FNBC
• Três opções:
{Aluno, Assistente} e {Aluno, Disciplina}
{Aluno, Disciplina} e {Disciplina, Assistente}
{Aluno, Assistente} e {Assistente, Disciplina}
Aluno
Assistente
Assistente
Disciplina
Alan
Silvio
Silvio
SMA100
Bernando
Rodrigo
Rodrigo
SMA100
Caio
Silvio
Diego
Rodrigo
Opção correta, a redundância foi minimizada e a junção recompõe os dados
originais.
FNBC
• 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.
2.
3.
4.
5.
6.
Quais são as chaves candidatas?
O que viola a 3ª. FN?
Como fica a normalização até a 3ª. FN?
Após isso, o que viola a FNBC?
Como fica a normalização completa?
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}
Síntese e considerações finais
Síntese
• Dependência funcional
• Se A1, A2 …, An B1, B2, …, Bn
• Formais normais
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
* 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
Formais Normais – visão geral
1FN
2FN
3FN
FNBC
Quando usar normalização
• 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.
Um pouco de história
Cultura 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ícios
• 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ício: normalize a seguinte relação
R (A, B, C, D, E, F, G)
• A, B C, D, E, F, G
• E, F A
•AC
Exercícios
• Resposta:
R (A, B, C, D, E, F, G)
• A, B C, D, E, F, G
• E, F A
•AC
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
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%
• Liste as dependências funcionais observáveis (não considere conjuntos
de dados compostos do lado direito) e normalize-a para a FNBC.
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}