BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos [email protected] OBJETIVOS Orientações para Projetos de BD; Dependências Funcionais (DFs): Definição de DF; Regras de inferência para DFs. Formas Normais: Primeira Forma Normal; Segunda Forma Normal; Terceira Forma Normal. Outras Formas Normais. NORMALIZAÇÃO DE PROJETOS DE BD Na prática, a normalização é realizada para obter projetos de alta qualidade e atender a propriedades que facilitem a execução de operações de consulta No entanto, os projetistas de bancos de dados, em geral, não precisam normalizar na maior forma normal possível. Pode-se lançar mão da Desnormalização Processo de armazenar junções de relações que estejam em forma normal superior. Servem como uma relação base para facilitar operações com outras relações que estão numa forma normal inferior. OUTRAS FORMAS NORMAIS Originalmente, Edgar Codd definiu três formas normais: 1FN, 2FN e 3FN (Primeira, Segunda e Terceira Forma Normal), Mas, hoje existem outras: Forma Normal de Boyce-Codd (FNBC), Quarta e Quinta Forma Normal Entretanto, alguns autores sugerem que aplicando as três formas normais básicas definidas por Codd, o projeto do BD já estará livre de redundâncias e inconsistências. FORMA NORMAL DE BOYCE-CODD (FNBC) Uma relação R está na FNBC se: Estiver na 3FN e Todos os seus atributos são dependentes não-transitivos de uma chave candidata Ou seja, todo determinante de uma DF é uma chave candidata FORMA NORMAL DE BOYCE-CODD (FNBC) A FNBC é considerada uma forma mais rígida da 3FN, pois trata de um tipo de atributo não considerado em outras formas normais – a chave candidata. Portanto, é adequado pensar em FNBC quando: Uma tabela tem várias chaves candidatas Chaves candidatas são compostas Chaves candidatas sobrepõem-se FORMA NORMAL DE BOYCE-CODD (FNBC) Exemplo: nmAluno nmCurso nmDocente João Banco de Dados Edgar Codd Maria Programação I Edsger Dijkstra José Banco de Dados Edgar Codd Maria Banco de Dados Edgar Codd João Redes de Computadores Douglas Comer José Redes de Computadores Douglas Comer {nmAluno, nmCurso} nmDocente nmDocente nmCurso Não há DF transitiva, mas, há uma DF em que atributos da chave candidata {nmAluno, nmCurso} não é o determinante ! FORMA NORMAL DE BOYCE-CODD (FNBC) Note-se, portanto, que se: Temos 2 chaves candidatas: (nmAluno, nmCurso), (nmAluno, nmDocente) Se a chave primária escolhida for (nmAluno, nmCurso) a tabela está na 3FN Se a chave primária escolhida for (nmAluno, nmDocente) a tabela está na 3FN Mas, tem-se uma DF que não possui chave candidata! nmDocente -> nmCurso Se uma tabela estiver na FNBC também estará na 3FN, mas não, necessariamente, o inverso! FORMA NORMAL DE BOYCE-CODD (FNBC) Algumas anomalias podem ser percebidas: Por exemplo: Como se dá a inserção de um novo docente na tabela anterior? Se Edsger Dijkstra deixa de ser professor é provável que qualquer menção a Programação I seja perdida. FORMA NORMAL DE BOYCE-CODD (FNBC) A solução pode ser decompor as tabelas, criando-se tabelas que o mantenham as chaves candidatas de alguma forma isoladas. Temos 2 chaves candidatas: (nmAluno, nmCurso), (nmAluno, nmDocente) Por exemplo: (nmAluno, nmDocente) e (nmAluno, nmCurso) Podem gerar anomalias em um join (nmCurso, nmDocente) e (nmCurso, nmAluno) (nmDocente, nmCurso) e (nmDocente, nmAluno) Melhor solução FORMA NORMAL DE BOYCE-CODD (FNBC) Em suma, a melhor alternativa para atingir-se a FNBC é separar em uma tabela as DFs que violem a FNBC (nmDocente, nmCurso) e (nmDocente, nmAluno) Violou a FNBC Chave candidata escolhida QUARTA FORMA NORMAL (4FN) Uma relação está na 4FN se não ocorrerem dependências multivaloradas nesta tabela Dependência Multivalorada Um atributo B é multidependente de outro atributo A se um valor de A é associado a uma coleção de valores de B. Nesse caso, diz-se que B é multidependente de A (AB) QUARTA FORMA NORMAL (4FN) vendedorId clienteId nmCliente nmParente parentesco vendedorId {clienteId, nmCliente} vendedorId {nmParente, grauParentesco} Existe uma intrínseca incerteza em como manter as linhas. Várias abordagens são possíveis e diferentes programadores podem tomar diferentes caminhos! QUARTA FORMA NORMAL (4FN) Para que uma tabela atinja a 4FN, a abordagem deve seguir: Para cada grupo de repetição separado, gera-se uma nova relação correspondente contendo este grupo de repetição e a chave primária da relação original Determinar a chave primária da nova relação, a qual será a concatenação da chave primária da relação original com a chave para o grupo de repetição Vendedor {vendedorId, nmVendedor} Vendedor_Cliente {vendedorId, clienteId, nmCliente} Vendedor_Parente {vendedorId, nmParente, parentesco) QUARTA FORMA NORMAL (4FN) Se uma relação está na 4FN então necessariamente está na FNBC É uma forma normal geralmente tratada como uma abordagem excepcional (pois, depende de um projeto top-down) QUINTA FORMA NORMAL (5FN) É também conhecida como Forma Normal de Projeção /Junção – FNPJ Definições: X Uma relação não estará na 5FN se for possível construir tuplas inconsistentes a partir de tuplas menores Uma relação está na 5FN se para toda a dependência que se verifique na tabela, esta dependência é baseada em chaves Uma relação está na 5FN se estiver na 4NF e as relações não puderem ser decompostas em relações mais simples sem perda de informação QUINTA FORMA NORMAL (5FN) Exemplo: nmVendedor João João nmEmpresa Samsumg Apple Produto Galaxy Tab Ipad Nunca deveria ser possível que: João venda Ipads da Samsumg João venda Galaxy Tabs da Apple Então, há combinações menores que podem ser inconsistentes! QUINTA FORMA NORMAL (5FN) Podemos reconstruir todos os fatos verdadeiros em 3 tabelas em vez de 1: nmVendedor nmEmpresa João Samsumg João Apple nmVendedor Produto João Galaxy Tab João Ipad nmEmpresa Produto Samsumg Apple Galaxy Tab Ipad QUINTA FORMA NORMAL (5FN) Algumas conclusões: Os fatos tendem a ser registrados várias vezes em uma tabela que não está na 5FN. O tamanho de uma tabela que fere a 5FN aumenta em progressão geométrica, enquanto as tabelas normalizadas crescem em progressão aritmética. Logo, é mais fácil escrever as regras de negócio a partir da 5FN BIBLIOGRAFIA ELMASRI, R. E.; NAVATHE S. Sistemas de Banco de Dados. 4ª Ed., São Paulo: Pearson Prentice Hall, 2005. Capítulo 10. EXERCÍCIO DE FIXAÇÃO Considere a seguinte tabela não normalizada. Proponha um conjunto de tabelas que esteja na 3FN. Notas_Fiscais (Num. NF, Série, Data emissão, Cod. do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente, Relação das mercadorias vendidas e Total Geral da Nota) * (considere que para cada mercadoria temos: Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria)