Apresentada pelo Codd em 1971, é um processo para se obter bons projetos lógicos baseados no Modelo Relacional por meio da otimização de redundâncias e eliminação de anomalias.

Normalização, logicamente, está na definição do Projeto Lógico.

Em 71 o Codd apresenta a primeira, segunda, a terceira forma normal, juntamente a terceira corrigida (1FN, 2FN, 3FN, 3FNC) e finalmente, apresenta a 4FN (quarta forma normal).

Anomalias:

$\underline{Nro_cli}$Nome_cliEnd_cliNro_Prod.Nome_prodPreco_prodqtd_prod
123JoaoXXX1ABCD50,0010
135Pedroyyy1ABCD80,0015
143Joaozzz2FGHI20,005
???3JLM35,00?

Inclusão: Valores Nulos não devem ser incluídos na tabela, se possível. Exclusão: Não se pode excluir dados associados. Atualizações: Propagação de esforços para atualização.

O processo de normalização evita este tipo de erros, de maneira contundente.

As definições a seguir são requeridas para o processo de normalização:

Dependência Funcional

Seja R (A, B, C), diz-se que B é funcionalmente dependente de A se, para um valor do atribuo A, determina-se um único valor para B. Notação: $A\rightarrowtail B$

obs: R é uma relação e A, B e C são seus atributos.

![[Pasted image 20250506144910.png]]

Não é: $A \nrightarrow B$

Dependência Funcional Transitiva

A dep. funcional transitiva se dá quando: se $A \rightarrowtail B$ e $B \rightarrowtail C$, então, $A \rightarrowtail C$

Chaves

A é Superchave em R se:

  • Todos os demais atributos de R são funcionalmente dependentes de A.

A é Chave Candidata em R se:

  • Não existe nenhum subconjunto próprio de A que seja uma Superchave de R.

Chave primária é a chave candidata eleita pelo projetista de banco de dados.

![[Pasted image 20250506151440.png]]

Os Atributos definidos como atributos não chave, são os atributos que não estão na chave primária.

Teoria da normalização

Primeira Forma Normal

Quando você faz o processo de normalização, deve-se demonstrar as dependências funcionais e chaves possíveis.

R está na 1FN se:

  1. R tem chave primária
  2. Em R, todos os atributos são mono valorados.

ex: cliente(nome, {fone}) -> não está na primeira forma normal. devemos tirar o atributo multi valorado.

[!tip] A normalização só é eficaz a partir da 4° forma.

Colocando na 1FN

cliente1($\underline{nome}$, $\underline{fone}$) nome $\rightarrowtail fone$ chave primária é $(nome, \ fone)$ o par e, portanto, fone não é mais multi valorado.


2° Forma Normal

Seja R (A, B, C). R está na 2° Forma Normal se:

  • R está na 1° Forma Normal; e
  • todos os atributos de R não chave são funcionalmente dependentes de toda a chave primária e não apenas parte dela.

empregado.Maquina($\underline{\text{Nro_empr}}$, $\text{nome_empregado}$, $\underline{nro_maquina_alocada}$, $data_alocacao$)

Não esta na segunda forma normal pois: $\text{Nro_Empr}\rightarrowtail \text{nome_empr}$

Entretanto, vemos que a data esta corretamente dependente completamente da chave por completo. $\text{Nro_empr} , \ \text{nro_maq_alocada} \rightarrowtail \text{data_alocação}$

Colocando na 2° forma normal

Procedimento:

  • Identificar todas as dependências funcionais de atributos não chave de parte da chave primária;
  • Remover da relação os atributos que participam da dependência funcional citada acima e criar uma nova relação contendo-os. A chave primária desta nova relação será o atributo de que os atributos são funcionalmente dependentes.

No exemplo acima: $\text{Nro_Empr}\rightarrowtail \text{nome_empr}$ -> $\text{empregado}(\underline{Nro_Empregado}, Nome_empregado)$ $\text{empregado_Maquina_2}(\underline{Nro_Empregado}, \ \underline{Nro_Máquina},\ data_alocação)$

sem mostrar as dependências funcionais ao longo do processo, você não pode quebrar a relação.


3° Forma Normal

R está na 3°. Forma Normal se:

  • R está na 2°. Forma Normal e
  • Não existe dependência funcional transitiva em R

gerente.conta($\underline{nro_cli}$, nome_cli, num_gerente_cta, nome_gerente_conta)

Transitiva: nro_cli $\rightarrowtail$ num_gerente_cta $\rightarrowtail$ nome_gerente_conta

Colocando na 3FN:

• Identificar todos os atributos não chave que são funcionalmente dependentes de outros não chave. • Criar nova relação que contenha os atributos não chave e que contemplam a dependência funcional acima. • Definir a chave primária desta nova relação com o atributo que os outros não chave são funcionalmente dependentes. Uma cópia deste atributo que agora compõe a chave primária desta nova relação deve ficar na relação de onde originou-se.

gerente.conta($\underline{nro_cli}$, nome_cli, num_gerente_cta, nome_gerente_conta) ->

gerente.conta.2($\underline{nro_cli}$, nome_cli, num_gerente_cta) gerente($\underline{num_gerente_cta}$, nome_gerente_conta)

3° Forma Normal de Boyce-Codd

Considere R uma relação e seus atributos $A, B \ \text{e} \ C$. $R ( A, B, C )$

R está na 3a. Forma Normal de BC se: • R está na 2a. Forma Normal; e • A unica dependência funcional transitiva permitida é a que envolve chaves candidatas

ex: cliente($\underline{RG}$, CPF, nome_cli) RG -> CPF -> NOME_CLI, RG->CPF e RG-> NOME_CLI. Então, esta é permitida pela 3FNBC, pois CPF é chave candidata.


Dependência Funcional Multivalorada

cliente_vendedor($nro_vend$, {$nro_cliete$}, {$nome_filho_vendedor$}) esse simbolo {} encapsula um atributo multivalorada.

Primeira Forma normal -> não pode haver att multivalorado. Porém, haverá um erro.

Percebemos então, uma dep. func. multivalorada.

Há uma dependência multivalorada de B com A se a um valor de A está associada uma coleção de valores para B, independentemente de qualquer valor de C. Notação: A -» B ![[Pasted image 20250513152234.png]]

4a. Forma Normal

Considere R uma relação e seus atributos A, B e C. R ( A, B, C )

R está na 4a. Forma Normal se: • Está na 3FNBC e • Não possui dependência funcional multivalorada.

Procedimento

• Identificar as dependências funcionais multivaloradas. • Criar uma nova relação que contenha cada dependência funcional multivalorada. • Definir como a chave primária desta nova relação o atributo determinante da dependência multivalorada.

exemplo: vendedor($nro_vend$, {$nro_cliete$}, {$nome_filho_vendedor$}) $nro_vend$ {$nro_cliete$} {$nome_filho_vendedor$}

  1. vemos que nome filho vendedor, mesmo que nro_cliente se altera, apenas muda de acordo com nro_vend. O mesmo vale para nro_cliente ->-> nro_vend, que é multivalorado por nro_vend e independe de nome_filho_vendedor. Portanto:
  • cliente_vendedor($nro_vend$, {$nro_cliete$})
  • filho_vendedor($nro_vend$, {$nome_filho_vendedor$})
  1. passando para 1FN
  • cliente_vendedor_2($\underline{nro_vend}$, $\underline{nro_cliete}$)
  • filho_vendedor_2($\underline{nro_vend}$, $\underline{nome_filho_vendedor}$)

Ordem de Execução

O processo de normalização deve iniciar-se pela verificação das dependencias funcionais multivaloradas. Após absorvê-las em novas relações, então aplica-se o processo de normalização de 1FN a 3FNBC.