SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização...

Post on 21-Apr-2015

116 views 3 download

Transcript of SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização...

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}