Universidade Estadual de Mato Grosso do Sul Ciência da Computação Banco de Dados Prof. Nilton Prof. Nilton nilton@comp.uems.br 1
Qualidade de projeto de BD relacional 1ª) Projetar esquemas fáceis de serem explicados - dados e relacionamentos. 2ª) Projetar esquemas para que anomalias de atualização não ocorram. 3ª) Evitar acréscimo de campo em tabela cujo valor pode ser nulo. 2
Tabela não Normalizada ou não 1FN (forma normal) Possui tabela aninhada; Conhecida também grupo repetido, coluna multi-valorada ou coluna não atômica Ex: lay-out de um relatório ou tela Proj(CodProj, Tipo, Descr, (CodEmpr, Nome, Cat, Sal, DatIni, TempAl)) 3
Normalização Regras para obter uma tabela bem projetada, isto é, eliminar redundâncias; Processo de decomposição de relação em relações menores com propriedades desejáveis para garantir qualidade ao projeto de BD; Objetivo: evitar anomalias de atualização; Formas normais oferecem Uma maneira de analisar as relações em função das chaves e dependências funcionais. Restrições para testar se a relação está normalizada. Aplica-se a normalização no esquema conceitual; 1FN, 2FN, 3FN, FNBC, 4FN e 5FN. 4
Normalização 5
Primeira Forma Normal (1FN) Condição: o domínio dos atributos deve ser atômico (atributos simples) e monovalorado, não podendo existir relações aninhadas. Proj(CodProj, Tipo, Descr, (CodEmpr, Nome, Cat, Sal, DatIni, TempAl)) Opção 1: Construir uma única relação com redundância de dados No exemplo os dados das linhas externa à tabela aninhada são repetidos para cada linha da tabela aninhada ProjEmp(CodProj, Tipo, Descr, CodEmpr, Nome, Cat, Sal, DatIni, TempAl) Opção 2: Construir uma relação para cada relação aninhada No exemplo cria-se uma tabela referente a própria tabela que está sendo normalizada e uma tabela para cada tabela aninhada Proj(CodProj, Tipo, Descr) ProjEmp(CodProj, CodEmpr, Nome, Cat, Sal, DatIni, TempAl) 6
Exercícios Passar para 1FN as relações não 1FN. 1) Alunos(CodAluno, NomeAluno, (CodCurso, SemIngresso), (CodDisc,(SemDiscCursada, NotaDisc))) 2) Candidatos(CodCurso, NomeCurso, NumeroVagasCurso, (CodCand, NomeCand, EscoreCand)) 3) Faturas(NumeroFat, DataEmissao, DataVenc, (CNPJComprador, NomeComprador, EnderecoComprador, (DataCorrida, HorárioCorrida, NumeroBoleto, ValorCorrida))) 4) Notas(CodAluno, NomeAluno, (CodCurso, NomeCurso, (CodDisc, NomeDisc, (CodProf, NomeProf, CategoriaProf, Nota)))) 7
8
Dependência Funcional Restrição entre dois atributos de uma relação. Seja X e Y dois atributos de uma relação R. Uma dependência funcional entre X e Y é denotada por: X Y X determina Y ou Y é dependente funcional de X. Se X Y, então: Dada duas tuplas t1e t2 em R a seguinte afirmação deve ser verdadeira: t1[x] = t2[x] e t1[y] = t2[y]. Os valores do componente Y de uma tupla em R dependem de, ou são determinados por valores do componente X. 9
Exemplo de Dependência Funcional Código Salário 10
Exemplo de Dependência Funcional (A,B) C A D 11
Segunda Forma Normal (2FN) Condição: a relação está na 2FN quando, além de estar em 1FN, não contém dependências parciais. Dependência parcial: uma dependência (funcional) parcial ocorre quando um atributo depende apenas de parte de uma chave primária composta. Isso implica que: Relações que estão em 1FN e não tenham chave primária composta já estão em 2FN. O mesmo ocorre com relações que contém apenas atributos que são chave primária. 12
Segunda Forma Normal (2FN) Exemplo Proj(CodProj, Tipo, Descr) 1FN Chave primária simples, logo está em 2FN ProjEmp(CodProj, CodEmpr, Nome, Cat, Sal, DatIni, TempAl) 1FN Chave primária composta, logo procurar dependências parciais. CodEmpr Nome CodEmpr Cat dependência parcial CodEmpr Sal (CodProj,CodEmpr) DatIni (CodProj,CodEmpr) TempAl Para passar para 2FN é necessário dividir a relação ProjEmp em duas relações: ProjEmp(CodProj, CodEmpr, DatIni, TempAl) Emp(CodEmpr, Nome, Cat, Sal) 13
Segunda Forma Normal (2FN) Exemplo Assim o esquema em 2FN fica: Proj(CodProj, Tipo, Descr) ProjEmp(CodProj, CodEmpr, DatIni, TempAl) Emp(CodEmpr, Nome, Cat, Sal) 14
Exercícios Passar as relações para 2FN. 1) Alunos(CodAluno, NomeAluno) Aluno-Curso(CodAluno, CodCurso, NomeCurso, SemIngresso) 2) Aluno-Sem(CodAluno, SemDisc, BolsaSimNao) Aluno-Disc-Sem(CodAluno, CodDisc, SemDisc, NomeDisc, NotaDisc) 15
Exercícios 3) 16
Exercícios 4) Faturas(CodConveniada, CodFatura, DataEmissão, DataVenc, NomeConveniada, CNPJConveniada, EnderecoConveniada, SubTotal, TaxaAdmin, Total) Fatura-Item(CodConveniada, CodFatura, NumeroBoleto, DataBoleto, ValorCorrida) 17
18
Terceira Forma Normal (3FN) Condição: a relação está na 3FN quando, além de estar em 2FN, não contém dependências transitivas. Dependência transitiva ou indireta: uma dependência (funcional) transitiva ocorre quando um atributo, além de depender da chave primária da relação, depende de outro atributo ou conjunto de atributos da relação não chave primária. Ex: Emp(CodEmpr, Nome, Cat, Sal) dependência transitiva 19
Terceira Forma Normal (3FN) O processo de transformação é: eliminar a dependência transitiva Emp(CodEmpr, Nome, Cat, Sal) ficando: Emp(CodEmpr, Nome, Cat) Categ(Cat, Sal) 20
Terceira Forma Normal (3FN) Exemplo Assim o esquema em 3FN fica: Proj(CodProj, Tipo, Descr) ProjEmp(CodProj, CodEmpr, DatIni, TempAl) Emp(CodEmpr, Nome, Cat) Categ(Cat, Sal) 21
Exercícios Passar as relações para 3FN. 1) Conveniadas(CodConveniada, NomeConveniada, CNPJConveniada, TituloLogradouro*, NomeLogradouro, NumeroLogradouro, Bairro, CEP, Cidade, UF) *Avenida, Rua, Rodovia, 2) Veiculo(Placa, Modelo, NomeProprietario, HabilitacaoMotorista, Cor, AnoFabricacao, AnoModelo, Fabricante, Chassi) 22
Exercícios 3) 23
Exercícios 4) Produto(CodProd, NomProd, CodCateg, NomeCateg, QuantEstoque) 5) 24
25
Forma Normal de Boyce-Codd (FNBC) 2FN: A chave primária B não chave primária 3FN: A chave primária B não chave primária B não chave primária C não chave primária FNBC: A chave candidata B Se o atributo for dependente de uma chave candidata a 3FN não resolve certas anomalias FNBC é uma forma de normalização mais forte do que a 3FN, logo uma relação em FNBC também está em 3FN, mas o inverso não é necessariamente verdadeiro. Condição: a relação está na FNBC se todo determinante for uma chave candidata. 26
Forma Normal de Boyce-Codd (FNBC) - Exemplo Chaves candidatas (Nome_Logradouro, Bairro) * é possível localizar CEP (Nome_Logradouro, Cidade) * é possível localizar CEP Dependências (Nome_Logradouro, Bairro) CEP (Nome_Logradouro, Cidade) CEP As chaves candidatas compartilham o mesmo atributo Nome_Logradouro Uma decomposição: Endereco(CEP, Nome_Logradouro, CodBairro) Bairro(CodBairro, NomeBairro, Cidade, Estado) Outra decomposição Endereco(CEP, Nome_Logradouro, CodCidade) Bairro(CodCidade, NomeCidade, Bairro, Estado) 27
Forma Normal de Boyce-Codd (FNBC) - Exemplo Para cada disciplina, cada estudante recebe aula de apenas um professor; Cada professor ensina somente uma disciplina Uma disciplina pode ser ensinada por diversos professores Chaves candidatas (Estudante, Disciplina) (Estudante, Professor) Dependências (Estudante, Disciplina) Professor Professor Disciplina Se chave primária for uma das chaves candidatas, então 3FN, mas não em FNBC porque Professor não é chave candidata. 28
Forma Normal de Boyce-Codd (FNBC) - Exemplo Aplicando a FNBC na relação Ensino 1. Identificar as dependências funcionais que violem a BCNF. 2. Para cada dependência funcional achada em 1, criar uma relação com a PK igual ao determinante. 3. As colunas que têm seu valor determinado em 1, são excluídas da relação original. (1) Professor Disciplina (2) (3) 29
30
Quarta Forma Normal (4FN) Condição: a relação está na 4FN quando, além de estar em 3FN ou FNBC, não contém dependências multi-valoradas. Dependência multi-valorada: um atributo ou conjunto de atributos depende multi-valoradamente de um atributo (determinante) da mesma relação quando um valor do atributo determinante identifica repetidas vezes um conjunto de valores do atributo dependente. Ex: 31
Quarta Forma Normal (4FN) O processo de transformação é: eliminar a dependência multivalorada. CodProj CodEmpr CodProj CodEquip ficando: ProjEmp(CodProj, CodEmpr) ProjEquip(CodProj, CodEquip) 32
33
Quinta Forma Normal (5FN) Forma normal projeção-junção Condição: a relação está na 5FN quando estiver na 4FN e se não puder ser mais decomposta sem perda de informação. Aplica-se em relacionamentos ternários ou n-ários observando a dependência de junção. Para relacionamento ternário: um-para-um-para-um: três chaves compostas sobrepostas, garante pelo menos a FNBC um-para-um-para-muitos: duas chaves compostas sobrepostas, garante pelo menos a FNBC um-para-muitos-para-muitos: uma chave composta, garante pelo menos a FBNC muitos-para-muitos-para-muitos: uma chave composta com três atributos, garante pelo menos a FNBC; em alguns casos, também pode garantir a 4FN, ou mesmo a 5FN 34
Quinta Forma Normal (5FN) Formalmente Forma normal projeção-junção Seja R(A,B,C) uma relação em que foi identificada uma dependência de junção {AB} e {BC}. Significa que é possível reconstruir a relação inicial a partir das duas projecções anteriores. Nesse caso, pode-se decompor a relação em duas novas relações com atributos {A,B} e {B,C} sem perda de informação. A 5ª forma normal obriga a fazer essa decomposição. 35
Quinta Forma Normal (5FN) Forma normal projeção-junção Ex: A relação R está na 5FN? Aparentemente não existe dependência multivalor, logo na FNBC Verificar dependência de junção É possível executar 3 diferentes projeções: {Artista, Filme}, {Artista, Encenador}, {Filme, Encenador} Caso seja possível reconstruir a relação inicial a partir da junção de quaisquer duas projeções, pode-se concluir da existência de dependências de junção relativamente a essas projecções. 36
Quinta Forma Normal (5FN) Forma normal projeção-junção As 3 projeções {Artista, Filme}, {Artista, Encenador}, {Filme, Encenador} Se (R1 * R2) * R3 = R, logo R não 5FN 37
Quinta Forma Normal (5FN) Forma normal projeção-junção 38
Quinta Forma Normal (5FN) Forma normal projeção-junção 39
40
Considerações finais A normalização é considerada para cada relação Um BD é considerado normalizado para uma determinada FN quando todas suas relações estiverem nessa FN Normalização - decomposição de relações: Aumenta a consistência Reduz o desempenho: operação de junção 41
Considerações finais 42
43
Exercícios para casa 1) Apresente a 2FN e 3FN para o seguinte esquema: ItemVenda(NúmeroNF, CodigoTipoProd, NumeroProd, DescriçãoProd, DataVenda, CodCaixaRegistradora, CodEmp, QtdeItem, PreçoItem, NomeEmp, DescriçãoTipoProd) 2) Verifique se o esquema abaixo obedece a 2FN e 3FN. Caso não faça as transformações necessárias. Matricula(CodAluno, CodTurma, CodDisciplina, NomeDisciplina, NomeAluno, CodLocalNascAluno, NomeLocalNascAluno 44
3) Normalize o layout que representa a lista de artigos submetidos a um congresso mostrando cada uma das formas normais. 45
4) Considere o seguinte esquema: VendaCarros(Carro, DataVenda, Vendedor, Comissão, QuantDesconto) e DataVenda QuantDesconto Vendedor Comissão Com base na chave primária fornecida, esse esquema está na 1FN, 2FN ou 3FN? Por que sim, e por que não? Como a normaliza por completo? 5) Normalize a) Aluno(Codigo, Nome, Disciplina1, Disciplina2, Disciplina3, Telefone) b) Ord-Prod(Cod Prod, Nr-Ordem, Nome Prod, Data Fabr, Tipo Ordem, Preco Prod), onde, Cod Prod determina Nome Prod e Preco Prod Nr-Ordem determina Data Fabr e Tipo Ordem 46