400 likes | 535 Views
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
E N D
SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 3 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 • Uma relação está na Forma Normal de Boyce Codd (FNBC) quando: • para toda dependência funcional XA, X é uma chave candidata • Lembrando: • 3ª. FN: está na 2ª. FN e atributos comuns não dependem transitivamente de qualquer chave candidata.
FNBC • Normalização: • considere as DFs em que o lado esquerdo não é chave candidata • transforme cada uma destas DFs em uma nova relação • 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 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: • Existe mais do que uma chave candidata • Existem pelo menos duas chaves candidatas compostas • Existe intersecção entre chaves compostas • Visualmente • AB 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: • Existe mais do que uma chave candidata • Existem pelo menos duas chaves candidatas compostas • Existe intersecção entre chaves compostas • Visualmente • AB 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} 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)
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} • DFs: • {Aluno, Disciplina} Assistente • Assistente Disciplina • Por pseudo-transitividade: • {Aluno, Assistente} Disciplina
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 • 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 • 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 • 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 • Interpretaçã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
FNBC • Três opções: • {Aluno, Assistente} e {Aluno, Disciplina} • {Aluno, Disciplina} e {Disciplina, Assistente} • {Aluno, Assistente} e {Assistente, Disciplina}
FNBC • Três opções: • {Aluno, Assistente} e {Aluno, Disciplina} • {Aluno, Disciplina} e {Disciplina, Assistente} • {Aluno, Assistente} e {Assistente, Disciplina} 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} 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}
FNBC • Três opções: • {Aluno, Assistente} e {Aluno, Disciplina} • {Aluno, Disciplina} e {Disciplina, Assistente} • {Aluno, Assistente} e {Assistente, Disciplina} 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} 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}
FNBC • Três opções: • {Aluno, Assistente} e {Aluno, Disciplina} • {Aluno, Disciplina} e {Disciplina, Assistente} • {Aluno, Assistente} e {Assistente, Disciplina} 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} Opção correta, a redundância foi minimizada e a junção recompõe os dados originais.
FNBC • Normalização: • considere as DFs em que o lado esquerdo não é chave candidata Ex.: Assistente Disciplina • 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 • 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 • 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
FormaisNormais – visãogeral 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ó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í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 • 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.
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}