Você está na página 1de 9

Banco de Dados Material elaborado pelos professores Juliano Varella de Carvalho e Eurico Antunes (baseado no livro:

HEUSER, Carlos Alberto. Projeto de banco de dados. 6. ed. Porto Alegre, RS: Bookman, 2009. (Srie livros didticos informtica ufrgs ; 4)

Normalizao

O desenvolvimento de software, em algumas situaes, leva o profissional da rea de TI necessidade de reaproveitamento de dados manipulados por sistemas anteriormente utilizados no ambiente onde se est trabalhando. Nestas ocasies por vezes torna-se necessrio o processo de engenharia reversa, que consiste de uma anlise do sistema a fim de definirmos o modelo de negcio (nvel mais abstrato) implementado. Este processo o inverso do processo de anlise e projeto de software. Quando pensamos em reestruturao de sistemas e portanto, nos dados armazenados, devemos lembrar que, por vezes, os dados legados no esto estruturados da melhor forma possvel quando consideramos o projeto de uma base de dados relacional. Para situaes como esta existem regras para adequao dos dados ao formato relacional, regras estas que tornam o conjunto de dados corretamente projetados. Estas regras so denominadas regras de Normalizao. Existem inmeras regras de normalizao, 4 delas so ditas suficientes para a construo de uma base de dados bem estruturada. Estas regras sero apresentadas com o exemplo a seguir, que denota um conjunto de dados no normalizados:

O conjunto de dados apresentados acima, organizado em forma de tabelas no normalizadas (identificadas pela sigla NN) seria apresentado da seguinte maneira:

E teramos para tal o seguinte esquema de tabelas aninhadas: Proj (CodProj, Tipo, Descr, (CodEmp, Nome, Cat, Sal, DataIni, TempAl)) 1. Passagem primeira forma normal Diz que uma tabela est na forma normal quando esta no contm tabelas aninhadas. Para transformar um esquema de tabela no-normalizada em um esquema na 1FN h duas alternativas: a) Construir uma nica tabela com redundncia de dados: Cria-se uma tabela na qual os dados das linhas externas tabela aninhada so repetidos para cada linha da tabela aninhada. b) Construir uma tabela para cada tabela aninhada Cria-se uma tabela referente a prpria tabela que est sendo normalizada e uma tabela para cada tabela aninhada. Considerando-se apenas a correo do processo de normalizao, a primeira alternativa a preferida. Ao decompor uma tabela em vrias tabelas, como ocorre na segunda alternativa, podem ser perdidas relaes entre informaes. Entretanto, para fins prticos, preferimos a segunda alternativa, mesmo sabendo que ela pode levar a modelos imperfeitos (se no bem pensados). A motivao de ordem prtica. No caso de uma tabela no normalizada, como a do exemplo, que possui apenas uma tabela aninhada, fica fcil visualizar a tabela na 1FN (primeira forma normal). Na decomposio de tabelas, a passagem primeira forma normal feita nos seguintes passos: 1. criada uma tabela na 1FN referente a tabela no normalizada e que contm apenas as colunas com valores atmicos, isto , sem as tabelas aninhadas. A chave primria da tabela na 1FN idntica a chave da tabela no normalizada.

2. Para cada tabela aninhada, criada uma tabela na 1FN composta pelas seguintes colunas: a) a chave primria de cada uma das tabelas na qual a tabela em questo est aninhada; b) as colunas da prpria tabela aninhada. 3. So definidas as chaves primrias das tabelas na 1FN que correspondem s tabelas aninhadas. Para o conjunto de dados utilizados neste texto teramos ento, aps a aplicao da primeira forma normal (1FN), os seguintes esquemas:

Sendo os esquemas das tabelas acima: Proj (CodProj, Tipo, Descr) ProjEmp(CodProj, CodEmp, Nome, Cat, Sal, DataIni, TempAl) 2. Passagem segunda forma normal Uma tabela encontra-se na segunda forma normal, quando, alm de estar na 1FN, no contm dependncias parciais. Dependncia (funcional) parcial ocorre quando uma coluna depende apenas de uma parte da chave primria composta. De forma mais precisa, a passagem 2FN ocorre da seguinte maneira: a) Copiar para a 2FN cada tabela que tenha chave primria simples ou que no tenha colunas alm chave.

b) Para cada Tabela com chave primria composta e com pelo menos uma coluna no chave: - Criar na 2FN uma tabela com as chaves primrias da tabela na 1FN; - Para cada coluna no 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 no existir, uma tabela na 2FN que tenha como chave primria a parte da chave que determinante da coluna em questo. Criar a coluna dependente dentro da tabela na 2FN. Para o exemplo utilizado neste texto temos as seguintes dependncias funcionais parciais:

E teremos ento os seguintes esquemas: ProjEmp(CodProj, CodEmp, DataIni, TempAl) Emp(CodEmp, Nome, Cat, Sal,) Como resultado aps a aplicao da segunda forma normal teremos o conjunto de dados de exemplo organizado segundo os esquemas apresentados abaixo:

3. Passagem terceira forma normal Uma tabela encontra-se na terceira forma normal, quando , alm de estar na segunda forma normal, no contm dependncias transitivas. Dependncias transitivas (dependncias funcionais transitivas) ocorrem quando uma coluna, alm de depender da chave primria da tabela , depende de outra coluna ou conjunto de colunas da tabela. De forma mais precisa, o processo de passagem da 2FN a 3FN o seguinte: a) Copiar para o esquema na 3FN cada tabela que tenha menos que duas colunas no chave, pois neste caso no h como haver dependncias transitivas. b) Para tabelas com duas ou mais colunas no chave: - Criar uma tabela no esquema da 3FN com a chave primria da tabela em questo. - Para cada coluna no chave fazer a seguinte pergunta: A coluna depende de alguma outra coluna no chave (dependncia transitiva ou indireta)? Caso a coluna dependa apenas da chave

- Copiar a coluna para a tabela na 3FN. Caso a coluna depender de outra coluna - Criar, caso ainda no exista, uma tabela no esquema na 3FN que tenha como chave primria a coluna da qual h a dependncia indireta. - Copiar a coluna dependente para a tabela criada. - A coluna determinante deve permanecer tambm na tabela original.

Para os exemplos apresentados identificamos as seguintes dependncias funcionais transitivas e sua correspondente soluo:

Teremos aps aplicao da 3FN a seguinte organizao para o conjunto de dados:

4. Passagem quarta forma normal

Para a maioria dos documentos e arquivos, a decomposio at a 3FN suficiente para obter o esquema de um banco de dados correspondente ao documento.

Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a nica que tem importncia na prtica da engenharia reversa a quarta forma normal (4FN).

Uma tabela encontra-se na quarta forma normal, quando, alm de estar na 3FN, no contm dependncias multi-valoradas.

Para exemplificarmos esta situao utilizaremos a tabela ALOCACAO a seguir que armazena os equipamentos utilizados pelos empregados nos diversos projetos existentes. ALOCACAO (codProj, codEmp, codEquip) codProj referencia PROJETO codEmp referencia EMPREGADO codEquip referencia EQUIPAMENTO

ALOCACAO

Podem ser observadas as dependncias funcionais multi-valoradas na tabela ALOCACAO, observando que a informao de que os empregados {1, 2, 3} participam do projeto {1} repetida duas vezes. Isto ocorre porque para cada equipamento usado no projeto, necessrio informar todos os seus empregados. ALOCAO

Desta forma, outras redundncias tambm surgem, como por exemplo, a informao de que o projeto {1} usa os equipamentos {1,2} est representada 3 vezes, pois o projeto conta com 3 empregados. Para representar um dependncia funcional multi-valorada usa-se uma expresso semelhante a usada para representar dependncias funcionais simples substituindo a seta simples por uma seta dupla. Na tabela ALOCACAO (apresentada acima), h as seguintes dependncias: CodProj ->-> CodEmp CodProj ->-> CodEquip

Aplicando-se a 4FN sobre a tabela ALOCACAO teremos a gerao de duas tabelas PROJEMP e PROJEQUIP. A primeira manter as informaes que relacionam quais empregados esto alocados em quais projetos. A segunda manter a informao de quais equipamentos esto alocados para quais projetos. PROJEMP (codProjeto, codEmpregado) codProjeto referencia PROJETO

codEmpregado referencia EMPREGADO PROJEQUIP (codProjeto, codEquipamento) codProjeto referencia PROJETO codEquipamento referencia EQUIPAMENTO

Você também pode gostar