Baixe o app para aproveitar ainda mais
Prévia do material em texto
Banco de Dados Haroldo Amaral (haroldo.amaral@gmail.com) Licenciatura em Computação – 5º Período 30/03/2011 Aula 13 – Normalização Normalização Formas Normais 30/03/2011 Banco de Dados 2 Normalização 30/03/2011 Banco de Dados 3 Baseado no conceito de FORMA NORMAL Um forma normal é uma regra que deve ser obedecida por uma tabela para que ela seja considerada “bem projetada” Uma vez definido o esquema relacional de um BD, passa-se ao processo de NORMALIZAÇÃO Normalização 30/03/2011 Banco de Dados 4 Técnica para eliminação de redundâncias de dados em esquemas relacionais Ou seja, método que permite identificar a existência de problemas potenciais no projeto de um BD relacional Converte, progressivamente, uma tabela em tabelas de grau e cardinalidade menores até que pouca ou nenhuma redundância de dados exista Se a normalização for bem sucedida O espaço de armazenamento dos dados diminui A tabela pode ser atualizada com maior eficiência A descrição do BD será imediata Normalização 30/03/2011 Banco de Dados 5 Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 6 Primeiro passo do processo de normalização A passagem à 1FN consiste na eliminação de tabelas aninhadas, eventualmente, existentes Eliminação de atributos compostos, multivalorados ou a combinação de ambos O domínio de um atributo deve incluir apenas valores atômicos (indivisíveis) Além disso, o valor de qualquer atributo deve ser um único valor do domínio desse atributo Portanto, a 1FN reprova ter um conjunto de valores, uma tupla de valores ou uma combinação de ambos como valor de atributo para uma única tupla Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 7 Em outras palavras, a 1FN reprova relações dentro de relações ou relações como valores de atributo dentro de tuplas Tabelas aninhadas Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 8 Por exemplo: Tabela aninhada Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 9 1ª Alternativa – Construir uma única tabela com redundância de dados Cria-se uma tabela na qual os dados das linhas externas à tabela aninhada são repetidos para cada linha da tabela aninhada Para o exemplo anterior: Nesta tabela, os dados do projeto aparecem repetidos para cada linha da tabela de empregados Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 10 2ª Alternativa – Construir uma tabela para cada tabela aninhada Cria-se uma tabela referente à própria tabela que está sendo normalizada e uma tabela para cada tabela aninhada Para o exemplo anterior: Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 11 Das duas alternativas: A primeira é menos recomendada pelas redundâncias que podem ser geradas A segunda alternativa deixa mais claro o modelo e de mais fácil visualização Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 12 A passagem à 1FN, pela decomposição de tabelas, é feita nos seguintes passos: É criada uma tabela na 1FN referente à tabela não normalizada e que contém apenas as colunas com valores atômicos, ou seja, sem tabelas aninhadas A chave primária da tabela na 1FN é idêntica a chave da tabela não normalizada Para cada tabela aninhada, é criada uma tabela na 1FN composta pelas seguintes colunas: A chave primária de cada uma das tabelas na qual a tabela em questão está aninhada As colunas da própria tabela aninhada São definidas as chaves primárias das tabelas na 1FN que correspondem a tabelas aninhadas Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 13 De acordo com o exemplo, o esquema da relação: Após a aplicação da 1FN: Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 14 E se as tabelas não normalizadas fossem essas, como ficaria a normalização? Primeira Forma Normal (1FN) 30/03/2011 Banco de Dados 15 E se as tabelas não normalizadas fossem essas agora, como ficaria a normalização? Como um candidato só pode fazer somente um curso, não precisa compor a chave primária de Candidatos com a coluna Cod-Curso Dependência Funcional 30/03/2011 Banco de Dados 16 Para entender as próximas formas normais – 2FN e 3FN – é necessário compreender o conceito de dependência funcional Numa tabela, diz-se que uma coluna C2 depende funcionalmente de uma coluna C1 quando, em todas as linhas da tabela, para cada valor de C1 que aparece, aparecer o mesmo valor de C2 Dependência Funcional 30/03/2011 Banco de Dados 17 Por exemplo: A coluna Salário depende funcionalmente da coluna Código Dependência Funcional 30/03/2011 Banco de Dados 18 De forma geral, o determinante de uma dependência funcional pode ser um conjunto de colunas e não somente uma coluna, como no exemplo anterior Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 19 Uma tabela encontra-se na 2FN quando, além de encontrar-se na 1FN, cada coluna não chave depende da chave primária completa Assim, uma tabela que não se encontra na 2FN contém DEPENDÊNCIAS FUNCIONAIS PARCIAIS Contém colunas não chave que dependem apenas de uma parte da chave primária Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 20 Portanto, um esquema de relação R está em 2FN se cada atributo não principal A em R for total e funcionalmente dependente da chave primária de R Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 21 Por exemplo, a tabela abaixo encontra-se na 2FN? Encontra-se na 1FN Não existe dependência parcial Todos os campos não chaves dependem totalmente da chave primária Portanto, a tabela Proj encontra-se na 2FN Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 22 Por exemplo, considerando a tabela Proj, a tabela abaixo encontra-se na 2FN? Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 23 Existem dependências parciais As colunas Nome, Cat e Sal dependem apenas da coluna CodEmp Por sua vez, as colunas DataIni e TempAl dependem da chave completa Assim, não são dependentes parciais Portanto, a tabela ProjEmp não se encontra na 2FN Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 24 No exemplo: Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 25 Para passar a 2FN, ou seja, eliminar as dependências parciais é necessário dividir a tabela ProjEmp em duas tabelas, conforme esquema abaixo: Assim, o esquema relacional total ficará como segue: Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 26 No exemplo: Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 27 Segunda Forma Normal (2FN) 30/03/2011 Banco de Dados 28 De forma mais precisa, o processo de passagem da 1FN à 2FN é descrito como segue: Copiar para a 2FN cada tabela que tenha chave primária simples ou que não tenha colunas além da chave Para cada tabela com chaves primárias compostas e com pelo menos uma coluna não chave: Criar, na 2FN, uma tabela com as chaves primárias da tabela na 1FN Para cada coluna não chave, fazer a seguinte pergunta: “a coluna depende de toda a chave ou de apenas parte dela?” Caso a coluna dependa de toda a chave, criar a coluna correspondente na tabela com a chave completa na 2FN Caso a coluna dependa apenas de parte da chave: Criar, caso ainda não exista, uma tabela na 2FN que tenha como chave primária a parte da chave que é determinante da coluna em questão Criar a coluna dependente dentro da tabela na 2FN Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 29 Uma dependência funcional transitiva acontece quando uma coluna não chave primária depende funcionalmente de outra coluna (ou combinação de colunas) não chave primária Uma tabela encontra-se na 3FN quando, além de estar na 2FN, toda coluna não chave depende diretamente da chave primária Quando não há dependências funcionais transitivas (ou indiretas) Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 30 Portanto, um esquema de relação R está na 3FN se ele satisfizer a 2FN e nenhum atributo não principal de R for transitivamente dependente da chave primária A passagem à 3FN consisteem dividir tabelas de forma a eliminar dependências transitivas Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 31 Por exemplo, qual a dependência transitiva da tabela abaixo, ou seja, que informação está representada de forma redundante? Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 32 Vamos supor que o salário de um empregado dependa da sua categoria Nesse caso, a informação de que salário é pago por categoria está representada de forma redundante Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 33 No exemplo: Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 34 Passagem à 3FN: Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 35 Terceira Forma Norma (3FN) 30/03/2011 Banco de Dados 36 Terceira Forma Normal (3FN) 30/03/2011 Banco de Dados 37 De forma mais precisa, o processo de passagem da 2FN à 3FN é descrito como segue: Copiar para o esquema na 3FN cada tabela que tenha menos que duas colunas não-chave, pois nesse caso não há como haver dependências transitivas Para tabelas com duas ou mais colunas não-chave: Criar uma tabela no esquema da 3FN com a chave primária da tabela em questão Para cada coluna não-chave fazer a seguinte pergunta: “a coluna depende de alguma outra coluna não-chave (dependência transitiva ou indireta)?” Caso a coluna dependa apenas da chave: Copiar a coluna para a tabela na 3FN Caso a coluna dependa de outra coluna: Criar, caso ainda não exista, uma tabela no esquema na 3FN que tenha como chave primária a coluna da qual há a dependência indireta Copiar a coluna dependente para a tabela criada A coluna determinante deve permanecer também na tabela original As Outras Formas Normais 30/03/2011 Banco de Dados 38 Para a maioria dos projetos de bancos de dados, a decomposição até a 3FN é suficiente para obter o esquema de um banco de dados com qualidade No máximo, a BCNF é executada Mais detalhes, além dos próximos slides, sobre a BCNF, 4FN e 5FN, consultar as seções 15.5, 15.6 e 15.7 do livro texto Forma Normal de Boyce-Codd (BCNF) 30/03/2011 Banco de Dados 39 Foi proposta como uma forma mais simples que a 3FN, mas é considerada mais rígida Ou seja, toda relação na BCNF está na 3FN, porém uma relação na 3FN não está necessariamente na BCNF A 3FN não tratou satisfatoriamente casos onde uma relação tem mais de uma chave candidata Essas chaves são compostas e possuem atributos em comum Assim, uma relação está em BCNF se todo determinante for uma chave candidata Forma Normal de Boyce-Codd (BCNF) 30/03/2011 Banco de Dados 40 Exemplo: Seja ENSINO(Estudante, Disciplina, Professor) uma relação com o seguinte significado: 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 Forma Normal de Boyce-Codd (BCNF) 30/03/2011 Banco de Dados 41 Chaves candidatas {Estudante, Disciplina} {Estudante, Professor} Dependências funcionais (Estudante, Disciplina) Professor Professor Disciplina Se a PK for (Estudante, Disciplina) ou (Estudante, Professor), a relação está na 3FN Porém, em ambos os casos a relação não está em BCNF porque o determinante Professor não é uma chave candidata Forma Normal de Boyce-Codd (BCNF) 30/03/2011 Banco de Dados 42 Processo para obtenção da BCNF Identificar as dependências funcionais que violem a BCNF Para cada dependência funcional achada em 1, criar uma relação com a PK igual ao determinante As colunas que têm seu valor determinado em 1 são excluídas da relação original Forma Normal de Boyce-Codd (BCNF) 30/03/2011 Banco de Dados 43 Para o exemplo anterior, após a aplicação da BCNF Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 44 Para explicar a 4FN , consideremos o seguinte relacionamento Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 45 De acordo com o exemplo, o relacionamento UTILIZACAO indica que deseja-se manter a informação de qual empregado usa qual equipamento em qual projeto Assim, de acordo com as regras de mapeamento, quatro relações serão geradas: PROJETO(CodProj, NomeProj) EQUIPAMENTO(CodEquip, NomeEquip) EMPREGADO(CodEmp, NomeEmp) UTILIZACAO(CodProj, CodEmp, CodEquip) Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 46 De acordo com o esquema gerado, uma tabela que implemente o relacionamento UTILIZACAO pode conter redundâncias A informação de que os empregados {“1”, “2”, “3”} trabalham no projeto “1” está representada duas vezes A informação de quais equipamentos são usados em um projeto está armazenada redundantemente Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 47 Para evitar esse tipo de redundância de dados, é necessário considerar uma forma normal (4FN), que se baseia no conceito de DEPENDÊNCIA FUNCIONAL MULTIVALORADA Uma coluna ou conjunto de colunas depende multivaloradamente de uma coluna (determinante), da mesma tabela, quando um valor do atributo determinante identifica repetidas vezes um conjunto de valores na coluna dependente Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 48 No exemplo: A coluna CodEmp depende multivaloradamente da coluna CodProj, já que um valor de CodProj determina múltiplas vezes um conjunto de valores de CodEmp Assim, a tabela UTILIZACAO contém as seguintes dependências funcionais multivaloradas: CodProj CodEmp CodProj CodEquip Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 49 Assim, uma tabela está na 4FN caso, além de estar na 3FN, não possua dependências funcionais multivaloradas Portanto, a tabela UTILIZACAO deve ser decomposta em duas tabelas: ProjEmp(CodProj, CodEmp) ProjEquip(CodProj, CodEquip) Quarta Forma Normal (4FN) 30/03/2011 Banco de Dados 50 Essas tabelas correspondem à implementação de dois relacionamentos binários e duas tabelas implementam esses relacionamentos Quinta Forma Normal (5FN) 30/03/2011 Banco de Dados 51 Uma relação de 4FN estará em 5FN quando o seu conteúdo não puder ser reconstruído (existe perda de informação) a partir das diversas relações menores que não possuam a mesma chave primária Essa forma normal trata especificamente dos casos de perda de informação, quando da decomposição de relacionamentos múltiplos Quinta Forma Normal (5FN) 30/03/2011 Banco de Dados 52 A 5FN trata de casos bastante particulares, que ocorrem na modelagem de dados, que são relacionamentos múltiplos (ternários, quaternários, e n-ários) Ela fala que um registro está na sua 5FN, quando o conteúdo desse mesmo registro não puder ser reconstruído (junção) a partir de outros registros menores, extraídos desse registro principal Ou seja, ao se particionar um registro, e sua junção posterior não conseguir recuperar as informações contidas no registro original, então esse registro está na 5FN Referências Usadas 30/03/2011 Banco de Dados 53
Compartilhar