NORMALIZAÇÃO Conceito introduzido em 1970 por E. F. Codd (1FN) Processo matemático formal fundamentado na teoria dos conjuntos Aplica uma série de regras sobre as tabelas de um banco de dados para verificar se estas foram corretamente projetadas
OBJETIVOS PRINCIPAIS Garantir a integridade dos dados, evitando que informações sem sentido sejam inseridas Organizar e dividir as tabelas da forma mais eficiente possível, diminuindo a redundância e permitindo a evolução do banco de dados
FORMAS NORMAIS: 1FN – 1ª Forma Normal 2FN – 2ª Forma Normal 3FN – 3ª Forma Normal FNBC – Forma Normal de Boyce e Codd 4FN – 4ª Forma Normal 5FN – 5ª Forma Normal
1FN – Primeira Forma Normal: Os atributos da tabela não contêm grupos de repetição (tabelas aninhadas). Passando para a 1FN: Projeto CodProj DescProj CodFunc NomeFunc CargoFunc SalFunc DtInicio 11 Alfa 1001 Antonio Analista Sr 1800 02/01/2005 1004 Daniela Analista Pl 1200 05/01/2005 12 Beta 1003 Claudio Analista Sr 1800 10/02/2005 ProjFunc CodProj CodFunc NomeFunc CargoFunc SalFunc DtInicio 11 1001 Antonio Analista Sr 1800 02/01/2005 11 1004 Daniela Analista Pl 1200 05/01/2005 12 1003 Claudio Analista Sr 1800 10/02/2005 Projeto CodProj DescProj 11 Alfa 12 Beta A tabela a seguir NÃO está na 1FN:
2FN – Segunda Forma Normal: Condição: Chave Primária (PK) composta por mais de uma coluna. ProjFunc CodProj CodFunc NomeFunc CargoFunc SalFunc DtInicio 11 1001 Antonio Analista Sr 1800 02/01/2005 11 1004 Daniela Analista Pl 1200 05/01/2005 12 1003 Claudio Analista Sr 1800 10/02/2005 Todas as colunas que não fazem parte da PK dependem de todas as colunas que compõem a PK. ProjFunc CodProj CodFunc DtInicio 11 1001 02/01/2005 11 1004 05/01/2005 12 1003 10/02/2005 Funcionario CodFunc NomeFunc CargoFunc SalFunc 1001 Antonio Analista Sr 1800 1004 Daniela Analista Pl 1200 1003 Claudio Analista Sr 1800 A tabela a seguir NÃO está na 2FN: Passando para a 2FN:
3FN – Terceira Forma Normal: Não há dependências funcionais transitivas. Cada coluna não PK depende DIRETAMENTE da PK. Funcionario CodFunc NomeFunc CargoFunc SalFunc 1001 Antonio Analista Sr 1800 1004 Daniela Analista Pl 1200 1003 Claudio Analista Sr 1800 A tabela a seguir NÃO está na 3FN: Passando para a 3FN: Funcionario CodFunc NomeFunc CargoFunc 1001 Antonio Analista Sr 1004 Daniela Analista Pl 1003 Claudio Analista Sr CargoSalario CargoFunc SalFunc Analista Sr 1800 Analista Pl 1200 CodFunc CargoFunc SalFunc Dependência Funcional Transitiva
FNBC – F N Boyce e Codd: Condição: Aplica-se a FNBC quando: Encontramos duas ou mais chaves candidatas As chaves candidatas apresentam mais de um atributo (são compostas) Todas as chaves candidatas têm um atributo em comum Vamos assumir que um professor está associado a mais de uma escola e uma sala. Aluno(NomeAluno,EndAluno,NomeEscola,NrSala,NomeProf) Exemplo: Chaves Candidatas: NomeAluno + EndAluno NomeAluno + NrSala NomeAluno + NomeProf Neste exemplo: Encontramos três chaves candidatas Todas são compostas Todas compartilham um mesmo atributo Aplicando a FNBC: A tabela Aluno será dividida em duas tabelas: uma que contêm todos os atributos que descrevem o aluno e outra que contêm os atributos que designam um professor em uma determinada escola e número de sala. Aluno(NomeAluno,EndAluno,NomeEscola,NrSala) Professor(NomeEscola,NrSala,NomeProf)
4FN – Quarta Forma Normal: Uma tabela não deve possuir mais de uma dependência multivalorada. Passando para a 4FN: A tabela a seguir NÃO está na 4FN: ProjFuncEquip CodProj CodFunc CodEquip 11 1001 A10 11 1002 A10 11 1001 A20 11 1002 A20 12 1001 A10 12 1001 A20 ProjFunc CodProj CodFunc 11 1001 11 1002 12 1001 ProjEquip CodProj CodEquip 11 A10 11 A20 12 A10 12 A20 CodProj CodFunc CodProj CodEquip
5FN – Quinta Forma Normal: Condição: Relacionamentos multiplos (ternários ... n-ários). NÃO está na 5FN: MatPedReq Mat Ped Req 10 1001 1 10 1002 2 20 1001 2 10 1001 2 MatPed Mat Ped 10 1001 10 1002 20 1001 PedReq Ped Req 1001 1 1002 2 1001 2 MatReq Mat Req 10 1 10 2 20 2 Está na 5FN: A tabela está na 5FN quando o seu conteúdo NÃO puder ser reconstruído Através da junção das tabelas secundárias. 1º passo: Decompor a tabela através da operação de projeção . 2º passo: Reconstruir a tabela através da junção .