Você está na página 1de 28

Normalização e

Dependência Funcional

Gisele Busichia Baioco

Banco de Dados
Introdução
Melhor,
O controle de consistência de uma pois não
BD pode acarreta perda
ser realizado:
de eficiência de execução.
◼ pelo SGBD;

◼ pelos Aplicativos;

◼ pela própria construção do sistema.

O Modelo Relacional permite modelar o controle de


consistência através da construção de relações que
atendam a um determinado conjunto de regras – Relações
Normalizadas em determinada Forma Normal.

Teoria de Normalização – baseada no conceito de


Dependência Funcional.
Dependência Funcional
Suponha o esquema de relação R e considerando X e Y
subconjuntos de atributos de R.

A dependência funcional X → Y

realiza-se em R se, em qualquer instância r(R), para todos


os pares de tuplas t1 e t2 em r:

se t1(X) = t2(X), então t1(Y) = t2(Y)

Ou seja: X determina funcionalmente (ou unicamente) Y


ou Y depende funcionalmente de X
Dependência Funcional
Baseia-se no reconhecimento que os valores de
alguns atributos podem ser determinados a partir
de outros.

Esse conhecimento não pode ser inferido pelo


SGBD, e portanto, deve ser identificado durante o
projeto da BD.
Pode-se concluir que
professor não depende
Dependência Funcional
funcionalmente de curso.

A menos que se saiba que isso


As dependências funcionais são seja verdade para todas
informações as
semânticas
fornecidas pelo projetista, ou seja,instâncias de Ensino.
não podem ser obtidas
“olhando-se” um estado particular do BD!!!
Exemplo:
Ensino = {professor, curso, texto}
r(Ensino) = {<Rogério, Estrutura de Dados, Texto1>,
<Paulo, Gerenciamento Dados, Texto2>,
<Roberto, Compiladores, Texto3>,
<Mauro, Estrutura de Dados, Texto4>}
Pode-se afirmar que texto → curso? NÃO!
Dependência Funcional
Exemplo de definição de dependências funcionais:

Emp_Proj = {nr_segsoc, nr_proj, horas, nm_empr,


nm_proj, local_proj}

As dependências funcionais existem nos seguintes


atributos :
a) nr_segsoc → nm_empr
b) nr_proj → nm_proj, local_proj
c) nr_segsoc, nr_proj → horas
Dependência Funcional
Exemplo de verificação de dependências funcionais:
Alunos = {nome, curso, idade}
r(Alunos) = {<Mario, comput, 21>,
<Paulo, elétrica, 22>,
<Mauro, física, 22>,
<Ricardo, comput, 21>,
<Adriana, elétrica, 22>}
Dependências Funcionais:
Sempre que nome se repete,
nome → curso, idade SIM!
curso e idade se repetem?
Dependência Funcional
Exemplo de verificação de dependências funcionais:
Alunos = {nome, curso, idade}
r(Alunos) = {<Mario, comput, 21>,
<Paulo, elétrica, 22>,
<Mauro, física, 22>,
<Ricardo, comput, 21>,
<Adriana, elétrica, 22>}
Dependências Funcionais:
Sempre que idade se repete,
idade → curso NÃO!
curso se repete?
Dependência Funcional
Exemplo de verificação de dependências funcionais:
Alunos = {nome, curso, idade}
r(Alunos) = {<Mario, comput, 21>,
<Paulo, elétrica, 22>,
<Mauro, física, 22>,
<Ricardo, comput, 21>,
<Adriana, elétrica, 22>}
Dependências Funcionais:
Sempre que curso se repete,
idadeSIM!
curso → idade
se repete?
Dependência Funcional
É possível inferir Dependências Funcionais a partir de 6
regras de inferência:
 Reflexiva Se A B  B→ A
 Aumentativa Se A → B  AC → B
 Separação Se A → BC  A → B, A → C
 Aditiva Se A → B, A → C  A → BC
 Transitiva Se A → B, B → C  A → C
 Pseudo-transitiva Se A → B, BC → D  AC → D
Normalização de Relações
O processo de normalização permite ao projetista
CONTROLAR quanto da consistência é garantida
pela maneira de construção do sistema, e quanto
deve ser responsabilidade do SGBD e/ou dos
aplicativos.

Normalização X Eficiência dos aplicativos

Normalização X Inconsistências
Normalização de Relações
1a. Forma Normal (1FN)
Uma relação está na 1a. Forma Normal quando
todos os seus atributos são atributos atômicos e
monovalorados!
Atributo Atômico: atributo que não é tratado em
partes separadas.
Atributo Monovalorado: não pode ter mais que um
valor.
Normalização de Relações
Exemplo:
Pessoa = {RG, nome, endereço, telefone}
◼o atributo endereço será atômico se não puder
ser utilizado em partes separadas tais como, rua,
número, bairro, cep;
◼O atributo telefone será monovalorado se não
for permitido ter mais que um número de telefone
cadastrado.
Normalização de Relações
Como normalizar para a 1FN?
1. Atributos não atômicos da relação são
“quebrados” em seus atributos componentes:
Pessoa = {RG, nome, endereço, telefone}
Se o atributo endereço não for atômico, deve-se
fazer:
Pessoa = {RG, nome, rua número, bairro,
cep, telefone}
Paciente = {nome, graus_das_lentes, tipo_sanguíneo}
Considerando que o atributo graus_das_lentes é
Normalização de Relações
multivalorado, deve-se fazer:
Paciente = {nome, grau_esquerdo, grau_direito,
tipo_sanguíneo}
Como normalizar para a 1FN?
2. Atributos multivalorados podem ser tratados
de duas maneiras:
2.1. A quantidade de valores é pequena e
conhecida a priori: substitui-se o atributo
multivalorado por um conjunto de atributos de
mesmo domínio, cada um monovalorado
representando uma ocorrência do valor.
Aluno = {nome, idade, disciplinas, nusp}
Considerando que o atributo disciplinas é multivalorado,
Normalização de Relações
deve-se fazer:
Aluno = {nome, idade, nusp}
Como normalizar
Disciplina para a 1FN?
= {nome, disciplina}
2. Atributos multivalorados podem ser tratados
de duas maneiras:
2.2. A quantidade de valores é muito variável,
desconhecida ou grande: retira-se o atributo
multivalorado e cria-se uma nova relação que tem
o mesmo conjunto de atributos chave, mais o
atributo multivalorado também como chave, mas
tomado como monovalorado.
Normalização de Relações
2a. Forma Normal (2FN)
Uma relação está na 2a Forma Normal se:
 está na 1a. Forma Normal;
 todos os atributos que não participam da
chave primária são dependentes de toda a
chave primária.
Normalização de Relações
Exemplo:
Ministra = {professor, sigla, livro}
professor → sigla
Está na 2FN!
sigla → livro

Turma = {número, sigla, sala, num_créditos}


número, sigla → sala
sigla → num_créditos Não está na 2FN!
Normalização de Relações
Como normalizar para a 2FN?
 verifica-se os grupos de atributos que dependem da mesma
parte da chave;
 retira-se da relação todos os atributos de um desses
grupos;
 cria-se uma nova relação, que tem esse grupo como
atributos não chave, e os atributos que determinam esse
grupo como chave;
 repete-se o procedimento para cada grupo, até que a
relação toda somente contenha atributos que dependem da
chave toda.
Normalização de Relações
grupo de atributos que faz parte
da chave e determina o outro
Como normalizargrupo.
para a 2FN?
Exemplo: grupo de atributos que depende
de parte da chave.
Turma = {número, sigla, sala, num_creditos}
número, sigla → sala
sigla → num_creditos
Normalizando para a 2FN fica:
Turma = {número, sigla, sala}
Disciplina = {sigla, num_creditos}
Normalização de Relações
Observações:
◼Na maioria dos casos a normalização é baseada na
decomposição de relações.
◼ A 2FN evita:
➢ inconsistência devido à duplicidade de
informações;
➢ perda de dados em operações de
remoção/alteração na relação.
Normalização de Relações
• pode ter inconsistência pois uma mesma disciplina
(mesma sigla) pode ter número de créditos diferentes;
• se não houver uma turma da disciplina em um
Exemplo:
semestre, há perda da informação de quantos créditos
◼ sem estar na 2FN:
tem essa disciplina!
Turma = {sigla, número, sala, num_creditos}
r(Turma) = {<COM122, 1, 10, 2>,
<COM122, 2, 14, 2>,
<COM189, 1, 8, 3>,
<COM189, 2, 15, 4>,
<COM134, 1, 16, 2>}
sigla, número → sala
sigla → num_creditos
Normalização de Relações
◼ normalizando para a 2FN:
Turma = {sigla, número, sala}
r(Turma) = {<COM122, 1, 10>,
<COM122, 2, 14>,
<COM189, 1, 8>,
<COM189, 2, 15>,
<COM134, 1, 16>)

Disciplina = {sigla, num_créditos}


r(Disciplina) = {<COM122, 2>,
<COM189, 3>,
<COM134, 2>}
Normalização de Relações
3a. Forma Normal (3FN)
Uma relação está na 3a Forma Normal se:
 está na 2a. Forma Normal;
 todos os atributos que não participam da
chave primária são dependentes não
transitivos de toda a chave primária.
Normalização de Relações
Exemplo:
Ministra = {professor, sigla, livro}
professor → sigla
Não está na 3FN!
sigla → livro

Turma = {número, sigla, sala}


número, sigla → sala Está na 3FN!
Normalização de Relações
Como normalizar para a 3FN?
 verifica-se um grupo de atributos que não depende
diretamente da chave;
 retira-se da relação esse grupo de atributos;
 cria-se uma nova relação que contém esse grupo de
atributos, e inclui-se como chave os atributos dos quais esse
grupo depende diretamente;
 repetem-se esses passos até que todos os atributos
restantes na relação original dependam diretamente de toda
sua chave.
Normalização de Relações
Como normalizar para a 3FN?
Exemplo:
Turma = {número, sigla, sala, prédio}
número, sigla → sala
sala → prédio
Normalizando para a 3FN fica:
Turma = {número, sigla, sala}
Salas = {sala, prédio}
Normalização e
Dependência Funcional

Gisele Busichia Baioco

Banco de Dados
FIM!

Você também pode gostar