MEDIDA 2.2 - Cursos de Educação e Formação de Adultos Modelo Comportamental Documento de apoio 4 Normalização de Dados Curso de Educação e Formação de Adultos Turma de Qualificação Escolar de Nível Secundário Técnico/a de Informática de Sistemas Formadora: Patrícia Mateus
Objectivos: Identificar as três formas de normalização Normalizar estruturas não normalizadas Normalização de Dados Normalização é o processo formal que consiste em substituir um conjunto de entidades por outro conjunto capaz de comportar melhor as mudanças futuras. Entidades normalizadas não possuem redundâncias (duplicação de dados) acidentais. Cada atributo está relacionado com a sua própria entidade e não se mistura com atributos relativos a entidades diferentes. Trata-se de um processo, que pretende identificar e remover a redundância dos dados, para assim evitar problemas na actualização, eliminação e inserção de dados. Este processo é conduzido por um conjunto de regras que constituem as Formas Normais. São 5 as principais formas normais, no entanto na prática, aplicando-se apenas as 3 primeiras formas normais, já se obtém um resultado plenamente satisfatório. Uma estrutura diz-se não normalizada quando os dados se agrupam por atributos que não foram analisados segundo as regras de normalização. EXEMPLO: NOTA DE ENCOMENDA Nº: Data: - - Cliente: Código: Nome: Telefone: Produtos: Código Nome Preço Unitário Quantidade Total a pagar: 1ª FORMA NORMAL Na 1ª Forma Normal não podem existir grupos de atributos repetitivos. Encomenda = @num_enc + data_enc + cod_cliente + nome_cliente + telefone + {cod_produto + nome_prod + preco + quant} + total_enc Neste exemplo o que se encontra entre {} constitui um grupo repetitivo. Para aplicar a 1ª forma normal efectuam-se os seguintes passos: Identificar o grupo repetitivo Criar uma nova relação para esse grupo, escolhendo uma nova chave primária e efectuando um relacionamento com a entidade original através do atributo comum, a chave da entidade original. -2-
Ao aplicar a 1ª forma normal ficamos com as seguintes entidades: Encomenda = @num_enc + data_enc + cod_cliente + nome_cliente + telefone + total_enc Detalhe_enc = @num_enc + @cod_produto + nome_prod + preco + quant 2ª FORMA NORMAL Obriga a que se removam todas as dependências funcionais que dependam apenas de uma parte da chave e não da sua totalidade. No caso da entidade Detalhe_enc a chave primária é constituida pelo par @num_enc e @cod_produto. Os atributos nome_prod e preco para além de serem identificados univocamente pela chave são também identificados por parte dela, ou seja, são funcionalmente dependentes do atributo cod_produto. Para aplicar a 2ª forma normal efectuam-se os seguintes passos: Verificar se os atributos-não-chave são dependentes funcionalmente da totalidade da chave; Criar uma nova relação com os atributos que dependem de parte da chave, sendo esta a chave da nova relação. Identificar os relacionamentos existentes entre a nova relação e a relação original, mantendo, nesta, a chave inicial que contém o atributo comum às duas relações Detalhe_enc = @num_enc + @cod_produto + nome_prod + preco + quant Depois de aplicada a 2FN, resultam as entidades: Detalhe_enc = @num_enc + @cod_produto + quant Produto = @cod_produto+ nome_prod + preco 3ª FORMA NORMAL Obriga a que se removam todas as dependências funcionais que dependam de atributos-não-chave. Na entidade Encomenda, os atributos nome_cliente e telefone são também funcionalmente dependentes do atributo-não-chave cod_cliente. Encomenda = @num_enc + data_enc + cod_cliente + nome_cliente + telefone + total_enc Depois de aplicada a 3FN resultam as seguintes entidades: Encomenda = @num_enc + data_enc + cod_cliente+ total_enc Cliente = @cod_cliente + nome_cliente + telefone -3-
Conclusão: Estrutura não normalizada Encomenda = @num_enc + data_enc + cod_cliente + nome_cliente + telefone + {cod_produto + nome_prod + preco + quant} + total_enc Depois de aplicadas todas as formas normais resultam as entidades normalizadas: Encomenda = @num_enc + data_enc + cod_cliente + total_enc Cliente = @cod_cliente + nome_cliente + telefone Detalhe_enc = @num_enc + @cod_produto + quant Produto = @cod_produto+ nome_prod + preco EXEMPLOS Relação não normalizada Conta = @N_conta + Cod_banco + NomeBanco + DataAbertura +{ N_Movimento + Data_Movimento + Descritivo_Movimento + Valor} 1 FN Conta = @N_conta + Cod_banco + NomeBanco + DataAbertura Conta _Movimento = @N_conta + @N_Movimento + Data_Movimento + descritivo_movimento + Valor 2 FN Conta _Movimento = @N_conta + @N_Movimento + Data_Movimento Movimento = @N_Movimento + Descritivo_Movimento + Valor 3FN Temos finalmente: Conta = @N_conta + DataAbertura+ Cod_banco Banco = @Cod_banco + NomeBanco Conta _Movimento = @N_conta + @N_Movimento + Data_Movimento Movimento = @N_Movimento + Descritivo_Movimento + Valor -4-
EXERCÍCIOS EXERCÍCIO Nº1 1. Considere o seguinte registo inicial, que resultou da transposição para tabela de um ecrã de recolha de dados, onde um cliente efectua a encomenda de vários produtos, sendo calculado o valor total da encomenda. a. Escreva uma relação não normalizada para representar a tabela. b. Efectue a normalização até à 3ª forma normal. Aplique: A 1ª forma normal ( Eliminar os grupos repetitivos ); A 2ª forma normal ( Todos os atributos não-chave são funcionalmente dependentes da chave na sua totalidade e não apenas de parte da chave ); A 3ª forma normal ( Nenhum atributo não - chave depende funcionalmente de nenhum outro atributo não-chave.) Tendo em conta os grupos de informação apresentados em cada um dos exemplos que se seguem, aplique as regras de normalização, 1FN, 2FN e 3FN e desenhe o respectivo diagrama ER. -5-