3. O que é um “bom” modelo?
• Um modelo que represente fielmente a realidade
• Capaz de responder às funcionalidades que se pretendem
• Pretende-se modelos que garantam:
• Redundancia minima
• Facilidade de manutenção
• Estabilidade face a futuras alterações
4. Dados redundantes
• Considere a relação EmpregadoDepartamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
5. Dados redundantes
• Considere a relação EmpregadoDepartamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
Se apagarmos este número
deixamos de conhecer o
departamento do empregado 30
Duplicado mas não redundante
6. Dados redundantes
• Considere a relação EmpregadoDepartamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
Se apagarmos este número
deixamos de conhecer o
departamento do empregado 30
Duplicado mas não redundante
Se apagarmos esta informação
continuamos a conhecer os dados
do departamento 1
Dados redundantes
7. Implicações da Redundância de Dados
• Redundância de dados tem implicações na coerência e integralidade
dos dados.
8. Implicações da Redundância de Dados
• Redundância de dados tem implicações na coerência e integralidade
dos dados.
• 3 problemas típicos:
9. Implicações da Redundância de Dados
• Redundância de dados tem implicações na coerência e integralidade
dos dados.
• 3 problemas típicos:
• Inserção: ocorre quando factos independentes não podem ser inseridos de
forma independente na base de dados
10. Implicações da Redundância de Dados
• Redundância de dados tem implicações na coerência e integralidade
dos dados.
• 3 problemas típicos:
• Inserção: ocorre quando factos independentes não podem ser inseridos de
forma independente na base de dados
• Eliminação: ocorre quando, ao eliminar um item, obriga à eliminação de
outros itens independentes
11. Implicações da Redundância de Dados
• Redundância de dados tem implicações na coerência e integralidade
dos dados.
• 3 problemas típicos:
• Inserção: ocorre quando factos independentes não podem ser inseridos de
forma independente na base de dados
• Eliminação: ocorre quando, ao eliminar um item, obriga à eliminação de
outros itens independentes
• Modificação: ocorre quando a atualização de um item implica a alteração de
outros itens independentes
12. Anomalias de inserção
• Inserir um novo empregado
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
13. Anomalias de inserção
• Inserir um novo empregado
• Implica inserir toda a informação do departamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
14. Anomalias de inserção
• Inserir um novo empregado
• Implica inserir toda a informação do departamento
• Atenção para não criar inconsistência com informação departamento
existente
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
15. Anomalias de inserção
• Inserir um novo empregado
• Implica inserir toda a informação do departamento
• Atenção para não criar inconsistência com informação departamento
existente
• Não é possivel criar um departamento sem empregados
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
16. Anomalias de eliminação
• Eliminar único empregado de um departamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
17. Anomalias de eliminação
• Eliminar único empregado de um departamento
• Implica perda de informação sobre departamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
18. Anomalias de modificação
• Alterar um atributo de um departamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
19. Anomalias de modificação
• Alterar um atributo de um departamento
• Implica atualizar o mesmo atributo em todos os empregados do
departamento
idEmp Nome Categoria Salário Depto TelDepto LocalDepto
10 José Silva Programador 2500 1 213334555 Lisboa
20 Maria Costa Analista 5000 2 224446888 Porto
30 João Fonseca Operador 600 1 213334555 Lisboa
40 Ana Faria Analista 5200 4 275222333 Covilhã
20. Solução: decomposição da relação
• Podemos evitar as anomalias decompondo a relação
EmpregadoDepartamento(idEmp, Nome, Categoria, Salario, Depto,
TelDepto, LocalDepto)
• Nas relações
Empregado(idEmp, Nome, Categoria, Salario, Dep)
Departamento(Dep, TelDep, LocalDep)
Teoria da normalização (Edgar Codd): define processo de estruturar tabelas
numa BD de forma a minimizar redundância com base no conceito de
dependência funcional
21. Solução: decomposição da relação
• Podemos evitar as anomalias decompondo a relação
EmpregadoDepartamento(idEmp, Nome, Categoria, Salario, Depto,
TelDepto, LocalDepto)
• Nas relações
Empregado(idEmp, Nome, Categoria, Salario, Dep)
Departamento(Dep, TelDep, LocalDep)
Teoria da normalização (Edgar Codd): define processo de estruturar tabelas
numa BD de forma a minimizar redundância com base no conceito de
dependência funcional
22. Solução: decomposição da relação
• Podemos evitar as anomalias decompondo a relação
EmpregadoDepartamento(idEmp, Nome, Categoria, Salario, Depto,
TelDepto, LocalDepto)
• Nas relações
Empregado(idEmp, Nome, Categoria, Salario, Dep)
Departamento(Dep, TelDep, LocalDep)
Teoria da normalização (Edgar Codd): define processo de estruturar tabelas
numa BD de forma a minimizar redundância com base no conceito de
dependência funcional
23. Dependências Funcionais
• Consideremos a relação
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
• Podemos descrever as seguintes dependências entre atributos
i) Um dado CC determina um único tuplo da relação Morada
(i.e. valores únicos para Nome, Endereco, Cidade, CodPosta, Telefone)
ii) Dados os atributos Endereço e Cidade todos os tuplos da relação morada têm
o mesmo CodPostal
iii) A um dado CodPostal corresponde um único valor do atributo Cidade
As dependências descritas (i, ii, iii) são dependências lógicas
24. Dependências Funcionais
• Consideremos a relação
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
• Podemos descrever as seguintes dependências entre atributos
i) Um dado CC determina um único tuplo da relação Morada
(i.e. valores únicos para Nome, Endereco, Cidade, CodPosta, Telefone)
ii) Dados os atributos Endereço e Cidade todos os tuplos da relação morada têm
o mesmo CodPostal
iii) A um dado CodPostal corresponde um único valor do atributo Cidade
As dependências descritas (i, ii, iii) são dependências lógicas
25. Dependências Funcionais
• Consideremos a relação
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
• Podemos descrever as seguintes dependências entre atributos
i) Um dado CC determina um único tuplo da relação Morada
(i.e. valores únicos para Nome, Endereco, Cidade, CodPosta, Telefone)
ii) Dados os atributos Endereço e Cidade todos os tuplos da relação morada têm
o mesmo CodPostal
iii) A um dado CodPostal corresponde um único valor do atributo Cidade
As dependências descritas (i, ii, iii) são dependências lógicas
26. Dependências Funcionais
• Consideremos a relação
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
• Podemos descrever as seguintes dependências entre atributos
i) Um dado CC determina um único tuplo da relação Morada
(i.e. valores únicos para Nome, Endereco, Cidade, CodPosta, Telefone)
ii) Dados os atributos Endereço e Cidade todos os tuplos da relação morada têm
o mesmo CodPostal
iii) A um dado CodPostal corresponde um único valor do atributo Cidade
As dependências descritas (i, ii, iii) são dependências lógicas
27. Dependências Funcionais
• Consideremos a relação
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
• Podemos descrever as seguintes dependências entre atributos
i) Um dado CC determina um único tuplo da relação Morada
(i.e. valores únicos para Nome, Endereco, Cidade, CodPosta, Telefone)
ii) Dados os atributos Endereço e Cidade todos os tuplos da relação morada têm
o mesmo CodPostal
iii) A um dado CodPostal corresponde um único valor do atributo Cidade
As dependências descritas (i, ii, iii) são dependências lógicas
28. Dependências funcionais
• É um tipo de dependência lógica (outros: multivalor, de junção)
• Dependências funcionais são determinadas pela semântica do
contexto que estamos a modelar
• Não podem ser determinadas a partir de um conjunto de tuplos
• Um conjunto de tuplos permite apenas verificar se esta dependência é
verdadeira
• Uma dependência functional é uma generalização da noção de chave
29. Dependências funcionais
• É um tipo de dependência lógica (outros: multivalor, de junção)
• Dependências funcionais são determinadas pela semântica do
contexto que estamos a modelar
• Não podem ser determinadas a partir de um conjunto de tuplos
• Um conjunto de tuplos permite apenas verificar se esta dependência é
verdadeira
• Uma dependência functional é uma generalização da noção de chave
30. Dependências funcionais
• É um tipo de dependência lógica (outros: multivalor, de junção)
• Dependências funcionais são determinadas pela semântica do
contexto que estamos a modelar
• Não podem ser determinadas a partir de um conjunto de tuplos
• Um conjunto de tuplos permite apenas verificar se esta dependência é
verdadeira
• Uma dependência funcional é uma generalização da noção de chave
31. Dependência funcional - Definição
• Dado 𝑅(𝐴1, 𝐴2, … , 𝐴𝑛)
• Existe dependência funcional entre X e Y (subconjuntos de atributos
de R)
𝑋 ⟶ 𝑌 (lê-se X determina Y e Y depende de X)
Em qualquer instante, qualquer tuplo de R com mesmo valor de X tem
obrigatóriamente o mesmo valor de Y.
32. Dependência funcional - Definição
• Dado 𝑅(𝐴1, 𝐴2, … , 𝐴𝑛)
• Existe dependência funcional entre X e Y (subconjuntos de atributos
de R)
𝑋 ⟶ 𝑌 (lê-se X determina Y e Y depende de X)
Em qualquer instante, qualquer tuplo de R com mesmo valor de X tem
obrigatóriamente o mesmo valor de Y.
33. Dependência funcional - Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome
CC ⟶ Endereço
CC ⟶ Cidade
CC ⟶ CodPostal
CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal
CodPostal ⟶ Cidade
34. Dependência funcional - Chaves
• Chave (candidata)
• 𝑅(𝐴1, 𝐴2, … , 𝐴𝑛) e 𝑋 ⊆ {𝐴1, 𝐴2, … , 𝐴𝑛}
• X é chave de R
i) ∀𝑖 𝑋 ⟶ 𝐴𝑖 𝑖 = 1,2, … , 𝑛 X determina funcionalmente todos os atributos de R
ii) ∄𝑦⊂𝑋∶ ∀𝑖 𝑌 ⟶ 𝐴𝑖 𝑖 = 1,2, … , 𝑛
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC é a única chave da relação Morada
• Super-chave: conjunto X que satisfaz i) mas não ii)
Qualquer conjunto que contenha atributo CC
não existe um subconjunto de X que
determina todos os atributos de R
35. Dependência funcional - Chaves
• Chave (candidata)
• 𝑅(𝐴1, 𝐴2, … , 𝐴𝑛) e 𝑋 ⊆ {𝐴1, 𝐴2, … , 𝐴𝑛}
• X é chave de R
i) ∀𝑖 𝑋 ⟶ 𝐴𝑖 𝑖 = 1,2, … , 𝑛 X determina funcionalmente todos os atributos de R
ii) ∄𝑦⊂𝑋∶ ∀𝑖 𝑌 ⟶ 𝐴𝑖 𝑖 = 1,2, … , 𝑛
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC é a única chave da relação Morada
• Super-chave: conjunto X que satisfaz i) mas não ii)
Qualquer conjunto que contenha atributo CC
não existe um subconjunto de X que
determina todos os atributos de R
36. Dependência funcional - Chaves
• Chave (candidata)
• 𝑅(𝐴1, 𝐴2, … , 𝐴𝑛) e 𝑋 ⊆ {𝐴1, 𝐴2, … , 𝐴𝑛}
• X é chave de R
i) ∀𝑖 𝑋 ⟶ 𝐴𝑖 𝑖 = 1,2, … , 𝑛 X determina funcionalmente todos os atributos de R
ii) ∄𝑦⊂𝑋∶ ∀𝑖 𝑌 ⟶ 𝐴𝑖 𝑖 = 1,2, … , 𝑛
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC é a única chave da relação Morada
• Super-chave: conjunto X que satisfaz i) mas não ii)
Qualquer conjunto que contenha atributo CC
não existe um subconjunto de X que
determina todos os atributos de R
37. Propriedades básicas das DFs
• Unicidade
se as DFs 𝑓: X ⟶ 𝑌 e 𝑔: X ⟶ 𝑌 então 𝑓 = 𝑔
• Reflexibilidade
se 𝑋 ⊆ 𝑌 então Y ⟶ 𝑋
• Transitividade
se X ⟶ 𝑌 e Y ⟶ 𝑍 então X ⟶ 𝑍
• União
se X ⟶ 𝑌 e X ⟶ 𝑍 então X ⟶ 𝑌𝑍
38. Propriedades básicas das DFs
• Unicidade
se as DFs 𝑓: X ⟶ 𝑌 e 𝑔: X ⟶ 𝑌 então 𝑓 = 𝑔
• Reflexibilidade
se 𝑋 ⊆ 𝑌 então Y ⟶ 𝑋
• Transitividade
se X ⟶ 𝑌 e Y ⟶ 𝑍 então X ⟶ 𝑍
• União
se X ⟶ 𝑌 e X ⟶ 𝑍 então X ⟶ 𝑌𝑍
39. Propriedades básicas das DFs
• Unicidade
se as DFs 𝑓: X ⟶ 𝑌 e 𝑔: X ⟶ 𝑌 então 𝑓 = 𝑔
• Reflexibilidade
se 𝑋 ⊆ 𝑌 então Y ⟶ 𝑋
• Transitividade
se X ⟶ 𝑌 e Y ⟶ 𝑍 então X ⟶ 𝑍
• União
se X ⟶ 𝑌 e X ⟶ 𝑍 então X ⟶ 𝑌𝑍
40. Propriedades básicas das DFs
• Unicidade
se as DFs 𝑓: X ⟶ 𝑌 e 𝑔: X ⟶ 𝑌 então 𝑓 = 𝑔
• Reflexibilidade
se 𝑋 ⊆ 𝑌 então Y ⟶ 𝑋
• Transitividade
se X ⟶ 𝑌 e Y ⟶ 𝑍 então X ⟶ 𝑍
• União
se X ⟶ 𝑌 e X ⟶ 𝑍 então X ⟶ 𝑌𝑍
41. Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome, CC ⟶ Cidade, CC ⟶ CodPostal, CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal, CodPostal ⟶ Cidade
A – Por reflexibilidade C – Por unicidade
Endereço, Cidade ⟶ Endereço [1] e [2] são a mesma DF
Endereço, Cidade ⟶ Cidade [1]
D – Por união
B – Por transitividade CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal CC ⟶ Endereço
CodPostal ⟶ Cidade CC ⟶ Telefone, Endereço
Endereço, Cidade ⟶ Cidade [2] CC ⟶ Cidade, CodPostal
CC ⟶ Nome, Telefone, Endereço, Cidade, CodPostal
Nome é a chave da relação Morada
42. Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome, CC ⟶ Cidade, CC ⟶ CodPostal, CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal, CodPostal ⟶ Cidade
A – Por reflexibilidade C – Por unicidade
Endereço, Cidade ⟶ Endereço [1] e [2] são a mesma DF
Endereço, Cidade ⟶ Cidade [1]
D – Por união
B – Por transitividade CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal CC ⟶ Endereço
CodPostal ⟶ Cidade CC ⟶ Telefone, Endereço
Endereço, Cidade ⟶ Cidade [2] CC ⟶ Cidade, CodPostal
CC ⟶ Nome, Telefone, Endereço, Cidade, CodPostal
Nome é a chave da relação Morada
43. Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome, CC ⟶ Cidade, CC ⟶ CodPostal, CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal, CodPostal ⟶ Cidade
A – Por reflexibilidade C – Por unicidade
Endereço, Cidade ⟶ Endereço [1] e [2] são a mesma DF
Endereço, Cidade ⟶ Cidade [1]
D – Por união
B – Por transitividade CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal CC ⟶ Endereço
CodPostal ⟶ Cidade CC ⟶ Telefone, Endereço
Endereço, Cidade ⟶ Cidade [2] CC ⟶ Cidade, CodPostal
CC ⟶ Nome, Telefone, Endereço, Cidade, CodPostal
Nome é a chave da relação Morada
44. Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome, CC ⟶ Cidade, CC ⟶ CodPostal, CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal, CodPostal ⟶ Cidade
A – Por reflexibilidade C – Por unicidade
Endereço, Cidade ⟶ Endereço [1] e [2] são a mesma DF
Endereço, Cidade ⟶ Cidade [1]
D – Por união
B – Por transitividade CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal CC ⟶ Endereço
CodPostal ⟶ Cidade CC ⟶ Telefone, Endereço
Endereço, Cidade ⟶ Cidade [2] CC ⟶ Cidade, CodPostal
CC ⟶ Nome, Telefone, Endereço, Cidade, CodPostal
Nome é a chave da relação Morada
45. Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome, CC ⟶ Cidade, CC ⟶ CodPostal, CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal, CodPostal ⟶ Cidade
A – Por reflexibilidade C – Por unicidade
Endereço, Cidade ⟶ Endereço [1] e [2] são a mesma DF
Endereço, Cidade ⟶ Cidade [1]
D – Por união
B – Por transitividade CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal CC ⟶ Endereço
CodPostal ⟶ Cidade CC ⟶ Telefone, Endereço
Endereço, Cidade ⟶ Cidade [2] CC ⟶ Cidade, CodPostal
CC ⟶ Nome, Telefone, Endereço, Cidade, CodPostal
Nome é a chave da relação Morada
46. Exemplo
Morada(CC, Nome, Endereço, Cidade, CodPostal, Telefone)
CC ⟶ Nome, CC ⟶ Cidade, CC ⟶ CodPostal, CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal, CodPostal ⟶ Cidade
A – Por reflexibilidade C – Por unicidade
Endereço, Cidade ⟶ Endereço [1] e [2] são a mesma DF
Endereço, Cidade ⟶ Cidade [1]
D – Por união
B – Por transitividade CC ⟶ Telefone
Endereço, Cidade ⟶ CodPostal CC ⟶ Endereço
CodPostal ⟶ Cidade CC ⟶ Telefone, Endereço
Endereço, Cidade ⟶ Cidade [2] CC ⟶ Cidade, CodPostal
CC ⟶ Nome, Telefone, Endereço, Cidade, CodPostal
Nome é a chave da relação Morada
47. Propriedades derivadas das DFs
• Distributividade
se X ⟶ 𝑌𝑍 então X ⟶ 𝑌 e X ⟶ 𝑍
• Aumento
se X ⟶ 𝑌 e W ⟶ 𝑍 então XW ⟶ 𝑌𝑍
• Pseudo-transitividade
se X ⟶ 𝑌 e YW ⟶ 𝑍 então XW ⟶ 𝑍
48. Perda de informação
• Seja a relação
R(Nome, Telefone, Cidade)
Nome ↛ Telefone (telefone e cidade não dependem de Nome)
Nome ↛ Cidade (uma pessoa tem vários telefones e cidades)
Nome Telefone Cidade
José da Silva 123456789 Leiria
José da Silva 222222222 Faro
António Costa 333333333 Leiria
49. Perda de informação
• Seja a relação
R(Nome, Telefone, Cidade)
Nome ↛ Telefone (telefone e cidade não dependem de Nome)
Nome ↛ Cidade (uma pessoa tem vários telefones e cidades)
Nome Telefone Cidade
José da Silva 123456789 Leiria
José da Silva 222222222 Faro
António Costa 333333333 Leiria
Nome Cidade
José da Silva Leiria
José da Silva Faro
António Costa Leiria
Nome Telefone
José da Silva 123456789
José da Silva 222222222
António Costa 333333333
R1
R2
50. Perda de informação
𝑅1 ⋈ 𝑅2
Nome Cidade
José da Silva Leiria
José da Silva Faro
António Costa Leiria
Nome Telefone
José da Silva 123456789
José da Silva 222222222
António Costa 333333333
R1 R2
Nome Telefone Cidade
José da Silva 123456789 Leiria
José da Silva 123456789 Faro
José da Silva 222222222 Leiria
José da Silva 222222222 Faro
António Costa 333333333 Leiria
51. Perda de informação
𝑅1 ⋈ 𝑅2
Nome Cidade
José da Silva Leiria
José da Silva Faro
António Costa Leiria
Nome Telefone
José da Silva 123456789
José da Silva 222222222
António Costa 333333333
R1 R2
Nome Telefone Cidade
José da Silva 123456789 Leiria
José da Silva 123456789 Faro
José da Silva 222222222 Leiria
José da Silva 222222222 Faro
António Costa 333333333 Leiria
Junção da decomposição
diferente da relação inicial
Decomposição não pode ser
feita desta forma
52. Perda de informação
𝑅1 ⋈ 𝑅2
Nome Cidade
José da Silva Leiria
José da Silva Faro
António Costa Leiria
Nome Telefone
José da Silva 123456789
José da Silva 222222222
António Costa 333333333
R1 R2
Nome Telefone Cidade
José da Silva 123456789 Leiria
José da Silva 123456789 Faro
José da Silva 222222222 Leiria
José da Silva 222222222 Faro
António Costa 333333333 Leiria
Junção da decomposição
diferente da relação inicial
Decomposição não pode ser
feita desta forma
53. Normalização
• Obtida pela decomposição da relação em duas ou mais relações
• Procedimento bem definido
• Vários níveis:
• 1ª Forma Normal (1FN)
• 2ª Forma Normal (2FN)
• 3ª Forma Normal (3FN)
• Forma Normal de Boyce Codd (FNBC)
• 4ª Forma Normal (4FN)
• 5ª Forma Normal (5FN)
54. Normalização (cont.)
• Forma normal mais avançada implica menor redundância
• Se relação está numa forma normal também está nas FN anteriores
5FN 4FN FNBC 3FN 2FN 1FN
55. Primeira Forma Normal (1FN)
• Uma relação está na 1FN se
• Atributos contêm valores atómicos
• Não há atributos repetidos (descrevem mesma caracteristica)
• Não tem grupos de atributos repetitivos.
56. Exemplo 1
• PessoaCursos1
Nome Endereço NIF Cursos
Artur Covilhã 123456789 Programador
Ana Fundão 222222222 Operador,Programador
Carlos Covilhã 222333444 Analista, Programador,
Operador
Paulo Guarda 555666777 Operador, Analista
57. Exemplo 1
• PessoaCursos1
• O atributo Cursos contém valores não atómicos
• A relação PessoaCursos1 não está na 1FN
Nome Endereço NIF Cursos
Artur Covilhã 123456789 Programador
Ana Fundão 222222222 Operador,Programador
Carlos Covilhã 222333444 Analista, Programador,
Operador
Paulo Guarda 555666777 Operador, Analista
58. Exemplo 2
• PessoaCursos2
Nome Endereço NIF Curso1 Curso2 Curso3
Artur Covilhã 123456789 Programador
Ana Fundão 222222222 Operador Programador
Carlos Covilhã 222333444 Analista Programador Operador
Paulo Guarda 555666777 Operador Analista
59. Exemplo 2
• PessoaCursos2
• São repetidos atributos do mesmo tipo (grupo repetitivo)
• A relação PessoaCursos2 não está na 1FN
Nome Endereço NIF Curso1 Curso2 Curso3
Artur Covilhã 123456789 Programador
Ana Fundão 222222222 Operador Programador
Carlos Covilhã 222333444 Analista Programador Operador
Paulo Guarda 555666777 Operador Analista
60. Exemplo 3
• Considere a relação
R( N_nota_enc, Cod_cliente, Nome_cliente, Morada_cliente, Cod_produto, Desc_produto,
Preço_produto, Quantidade )
Os dados de cada produto encomendado
• Como decompor?
61. Exemplo 3
• Considere a relação
R( N_nota_enc, Cod_cliente, Nome_cliente, Morada_cliente, (Cod_produto, Desc_produto,
Preço_produto, Quantidade)* )
Os dados de cada produto encomendado
• Como decompor?
62. Exemplo 3
• Considere a relação
R( N_nota_enc, Cod_cliente, Nome_cliente, Morada_cliente, (Cod_produto, Desc_produto,
Preço_produto, Quantidade)* )
Os dados de cada produto encomendado
• Como decompor?
N_nota_enc ⟶ Cod_cliente, Nome_cliente, Morada_cliente (dependência funcional)
63. Exemplo 3
• Considere a relação
R( N_nota_enc, Cod_cliente, Nome_cliente, Morada_cliente, (Cod_produto, Desc_produto,
Preço_produto, Quantidade)* )
Os dados de cada produto encomendado
• Como decompor?
N_nota_enc ⟶ Cod_cliente, Nome_cliente, Morada_cliente (dependência funcional)
• Podemos decompor R em
Nota_de_enc(N_nota_enc, Cod_cliente, Nome_cliente, Morada_cliente)
Linha_nota_enc(N_nota_enc, Cod_produto, Desc_produto, Preço_produto, Quantidade)
64. Segunda Forma Normal (2FN)
• Considere R(Fornecedor, Peça, Cidade, Quantidade)
• Onde
• Fornecedor ↛ Peça
• Peça ↛ Fornecedor
• Fornecedor ⟶ Cidade
65. Segunda Forma Normal (2FN) (cont.)
• Num dado instante,
Fornecedor Peça Cidade Quantidade
Empresa A 1 Covilhã 100
Empresa A 2 Covilhã 200
Empresa A 3 Covilhã 300
Empresa B 1 Fundão 400
Empresa B 3 Fundão 500
66. Segunda Forma Normal (2FN) (cont.)
• Num dado instante,
• Algumas anomalias
• Inserção: inserir fornecedor sem peça (peça faz parte da chave)
• Eliminação: eliminar peça 1 e 3 de empresa B perde-se informação sobre fornecedor
• Modificação: atualizar cidade de fornecedor implica atualizar todos os tuplos do fornecedor
Fornecedor Peça Cidade Quantidade
Empresa A 1 Covilhã 100
Empresa A 2 Covilhã 200
Empresa A 3 Covilhã 300
Empresa B 1 Fundão 400
Empresa B 3 Fundão 500
67. Segunda Forma Normal (2FN) (cont.)
• Num dado instante,
• Algumas anomalias
• Inserção: inserir fornecedor sem peça (peça faz parte da chave)
• Eliminação: eliminar peça 1 e 3 de empresa B perde-se informação sobre fornecedor
• Modificação: atualizar cidade de fornecedor implica atualizar todos os tuplos do fornecedor
Fornecedor Peça Cidade Quantidade
Empresa A 1 Covilhã 100
Empresa A 2 Covilhã 200
Empresa A 3 Covilhã 300
Empresa B 1 Fundão 400
Empresa B 3 Fundão 500
68. Segunda Forma Normal (2FN) (cont.)
• Num dado instante,
• Algumas anomalias
• Inserção: inserir fornecedor sem peça (peça faz parte da chave)
• Eliminação: eliminar peça 1 e 3 de empresa B perde-se informação sobre fornecedor
• Modificação: atualizar cidade de fornecedor implica atualizar todos os tuplos do fornecedor
Fornecedor Peça Cidade Quantidade
Empresa A 1 Covilhã 100
Empresa A 2 Covilhã 200
Empresa A 3 Covilhã 300
Empresa B 1 Fundão 400
Empresa B 3 Fundão 500
69. Segunda Forma Normal (2FN) (cont.)
• Num dado instante,
• Algumas anomalias
• Inserção: inserir fornecedor sem peça (peça faz parte da chave)
• Eliminação: eliminar peça 1 e 3 de empresa B perde-se informação sobre fornecedor
• Modificação: atualizar cidade de fornecedor implica atualizar todos os tuplos do fornecedor
Fornecedor Peça Cidade Quantidade
Empresa A 1 Covilhã 100
Empresa A 2 Covilhã 200
Empresa A 3 Covilhã 300
Empresa B 1 Fundão 400
Empresa B 3 Fundão 500
70. Segunda Forma Normal (2FN) (cont.)
• Decomposição
• 𝑅1 = 𝜋 𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟,𝐶𝑖𝑑𝑎𝑑𝑒 (𝑅) R1(Fornecedor, Cidade)
• 𝑅2 = 𝜋 𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟,𝑃𝑒ç𝑎,𝑄𝑢𝑎𝑛𝑡𝑖𝑑𝑎𝑑𝑒 (𝑅) R2(Fornecedor, Peça,Quantidade)
• Desaparecem anomalias
• A DF Fornecedor ⟶ Cidade
• Garante que 𝑅 = 𝑅1 ⋈𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟=𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟 𝑅2
• Uma relação está na 2ª forma normal
• se está na 1FN
• atributos que não são chave dependem da totalidade da chave.
71. Segunda Forma Normal (2FN) (cont.)
• Decomposição
• 𝑅1 = 𝜋 𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟,𝐶𝑖𝑑𝑎𝑑𝑒 (𝑅) R1(Fornecedor, Cidade)
• 𝑅2 = 𝜋 𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟,𝑃𝑒ç𝑎,𝑄𝑢𝑎𝑛𝑡𝑖𝑑𝑎𝑑𝑒 (𝑅) R2(Fornecedor, Peça,Quantidade)
• Desaparecem anomalias
• A DF Fornecedor ⟶ Cidade
• Garante que 𝑅 = 𝑅1 ⋈𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟=𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟 𝑅2
• Uma relação está na 2ª forma normal
• se está na 1FN
• atributos que não são chave dependem da totalidade da chave.
72. Segunda Forma Normal (2FN) (cont.)
• Decomposição
• 𝑅1 = 𝜋 𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟,𝐶𝑖𝑑𝑎𝑑𝑒 (𝑅) R1(Fornecedor, Cidade)
• 𝑅2 = 𝜋 𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟,𝑃𝑒ç𝑎,𝑄𝑢𝑎𝑛𝑡𝑖𝑑𝑎𝑑𝑒 (𝑅) R2(Fornecedor, Peça,Quantidade)
• Desaparecem anomalias
• A DF Fornecedor ⟶ Cidade
• Garante que 𝑅 = 𝑅1 ⋈𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟=𝐹𝑜𝑟𝑛𝑒𝑐𝑒𝑑𝑜𝑟 𝑅2
• Uma relação está na 2ª forma normal
• se está na 1FN
• atributos que não são chave dependem da totalidade da chave.
73. Dependencia funcional elementar e parcial
• Considere R(X, Y, Z, …)
• Dependência funcional elementar
• X ⟶ Y é elementar se ∀𝑋′ ⊂ 𝑋: 𝑋′ ↛ 𝑌
• Dependência funcional parcial
• X ⟶ Y e X’ ⟶ Y (com 𝑋′ ⊂ 𝑋) então X ⟶ Y é uma DF parcial
74. Dependencia funcional elementar e parcial
• Considere R(X, Y, Z, …)
• Dependência funcional elementar
• X ⟶ Y é elementar se ∀𝑋′ ⊂ 𝑋: 𝑋′ ↛ 𝑌
• Dependência funcional parcial
• X ⟶ Y e X’ ⟶ Y (com 𝑋′ ⊂ 𝑋) então X ⟶ Y é uma DF parcial
78. Exemplo
• Linha_nota_enc (N_nota_enc, Cod_produto, Desc_produto,
Preço_prod, Quantidade)
• Linha_nota_enc é decomposto em
• Linha_Nota_Enc ( N_nota_enc, Cod_produto, Quantidade)
• Produto ( Cod_produto, Desc_produto, Preço_produto)
• A DF Cod_produto ⟶ Desc_produto, Preço_produto garante validade
da decomposição
79. Exemplo
• Linha_nota_enc (N_nota_enc, Cod_produto, Desc_produto,
Preço_prod, Quantidade)
• Linha_nota_enc é decomposto em
• Linha_Nota_Enc ( N_nota_enc, Cod_produto, Quantidade)
• Produto ( Cod_produto, Desc_produto, Preço_produto)
• A DF Cod_produto ⟶ Desc_produto, Preço_produto garante validade
da decomposição
80. Exemplo
• Linha_nota_enc (N_nota_enc, Cod_produto, Desc_produto,
Preço_prod, Quantidade)
• Linha_nota_enc é decomposto em
• Linha_Nota_Enc ( N_nota_enc, Cod_produto, Quantidade)
• Produto ( Cod_produto, Desc_produto, Preço_produto)
• A DF Cod_produto ⟶ Desc_produto, Preço_produto garante validade
da decomposição
81. Casos especiais da 2FN
• Se todos os atributos de uma relação são primos (pertencem a uma
chave)
ou
• A chave da relação consiste num único atributo.
• Então a relação está na 2ª forma normal.
82. Decomposição na 2FN
• Toda a relação R que não esteja na 2FN pode ser decomposta num
conjunto de projecções que estão na 2FN.
• Para vermos se uma relação está na 2FN:
1. Identificamos a chave da tabela. Se a chave for apenas um atributo, ou for
constituída por todos os atributos da relação, então podemos concluir que está na
2FN.
2. Se a chave for composta (tiver mais do que um atributo) verificamos se há
atributos que não são chave e que dependem apenas de parte da chave. Se não
houver, então está na 2FN.
3. Se houver, então decompor de acordo com o esquema anterior.
83. Decomposição na 2FN
• Toda a relação R que não esteja na 2FN pode ser decomposta num
conjunto de projecções que estão na 2FN.
• Para vermos se uma relação está na 2FN:
1. Identificamos a chave da tabela. Se a chave for apenas um atributo, ou for
constituída por todos os atributos da relação, então podemos concluir que está na
2FN.
2. Se a chave for composta (tiver mais do que um atributo) verificamos se há
atributos que não são chave e que dependem apenas de parte da chave. Se não
houver, então está na 2FN.
3. Se houver, então decompor de acordo com o esquema anterior.
84. Decomposição na 2FN
• Toda a relação R que não esteja na 2FN pode ser decomposta num
conjunto de projecções que estão na 2FN.
• Para vermos se uma relação está na 2FN:
1. Identificamos a chave da tabela. Se a chave for apenas um atributo, ou for
constituída por todos os atributos da relação, então podemos concluir que está na
2FN.
2. Se a chave for composta (tiver mais do que um atributo) verificamos se há
atributos que não são chave e que dependem apenas de parte da chave. Se não
houver, então está na 2FN.
3. Se houver, então decompor de acordo com o esquema anterior.
85. Decomposição na 2FN
• Toda a relação R que não esteja na 2FN pode ser decomposta num
conjunto de projecções que estão na 2FN.
• Para vermos se uma relação está na 2FN:
1. Identificamos a chave da tabela. Se a chave for apenas um atributo, ou for
constituída por todos os atributos da relação, então podemos concluir que está na
2FN.
2. Se a chave for composta (tiver mais do que um atributo) verificamos se há
atributos que não são chave e que dependem apenas de parte da chave. Se não
houver, então está na 2FN.
3. Se houver, então decompor de acordo com o esquema anterior.
86. Decomposição na 2FN
• Toda a relação R que não esteja na 2FN pode ser decomposta num
conjunto de projecções que estão na 2FN.
• Para vermos se uma relação está na 2FN:
1. Identificamos a chave da tabela. Se a chave for apenas um atributo, ou for
constituída por todos os atributos da relação, então podemos concluir que está na
2FN.
2. Se a chave for composta (tiver mais do que um atributo) verificamos se há
atributos que não são chave e que dependem apenas de parte da chave. Se não
houver, então está na 2FN.
3. Se houver, então decompor de acordo com o esquema anterior.
87. Terceira Forma Normal (3FN)
• Considere a relação E(N_emp, Dep, Cidade)
• Com
• N_emp ⟶ Dep
• Dep ↛ N_emp
• Dep ⟶ Cidade
• Cidade ↛ Dep
88. Anomalias
• E
E(N_emp, Dep, Cidade) está na 2FN
N_emp Dep Cidade
a A X
b A X
c A X
d B Y
e B Y
f C X
g C X
Inserção: não podemos inserir um departamento
se não tem empregados
Eliminação: se eliminamos o ultimo empregado
de departamento perdemos informação
Modificação: Atributo cidade repetido para
departamento, implica alteração em todos os
empregados
89. Anomalias
• E
E(N_emp, Dep, Cidade) está na 2FN
N_emp Dep Cidade
a A X
b A X
c A X
d B Y
e B Y
f C X
g C X
Inserção: não podemos inserir um departamento
se não tem empregados
Eliminação: se eliminamos o ultimo empregado
de departamento perdemos informação
Modificação: Atributo cidade repetido para
departamento, implica alteração em todos os
empregados
90. Anomalias
• E
E(N_emp, Dep, Cidade) está na 2FN
N_emp Dep Cidade
a A X
b A X
c A X
d B Y
e B Y
f C X
g C X
Inserção: não podemos inserir um departamento
se não tem empregados
Eliminação: se eliminamos o ultimo empregado
de departamento perdemos informação
Modificação: Atributo cidade repetido para
departamento, implica alteração em todos os
empregados
91. Anomalias
• E
E(N_emp, Dep, Cidade) está na 2FN
N_emp Dep Cidade
a A X
b A X
c A X
d B Y
e B Y
f C X
g C X
Inserção: não podemos inserir um departamento
se não tem empregados
Eliminação: se eliminamos o ultimo empregado
de departamento perdemos informação
Modificação: Atributo cidade repetido para
departamento, implica alteração em todos os
empregados
92. Anomalias
• E
E(N_emp, Dep, Cidade) está na 2FN
N_emp Dep Cidade
a A X
b A X
c A X
d B Y
e B Y
f C X
g C X
Inserção: não podemos inserir um departamento
se não tem empregados
Eliminação: se eliminamos o ultimo empregado
de departamento perdemos informação
Modificação: Atributo cidade repetido para
departamento, implica alteração em todos os
empregados
(atributos não chave depende da
totalidade da chave)
93. Decomposição de E
• Se substituirmos E por
𝐸𝑚𝑝𝑟𝑒𝑔𝑎𝑑𝑜 = 𝜋𝑁𝑒𝑚𝑝,𝐷𝑒𝑝 𝐸
𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜 = 𝜋𝐷𝑒𝑝,𝐶𝑖𝑑𝑎𝑑𝑒(𝐸)
desaparecem as anomalias.
A DF 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜 ⟶ 𝐶𝑖𝑑𝑎𝑑𝑒 garante que
𝐸 = 𝐸𝑚𝑝𝑟𝑒𝑔𝑎𝑑𝑜 ⋈𝐷𝑒𝑝=𝐷𝑒𝑝 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜
• Uma relação está na 3ª forma normal
• se está na 2FN
• nenhum dos atributos não chave depende de outro não chave.
94. Decomposição de E
• Se substituirmos E por
𝐸𝑚𝑝𝑟𝑒𝑔𝑎𝑑𝑜 = 𝜋𝑁𝑒𝑚𝑝,𝐷𝑒𝑝 𝐸
𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜 = 𝜋𝐷𝑒𝑝,𝐶𝑖𝑑𝑎𝑑𝑒(𝐸)
desaparecem as anomalias.
A DF 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜 ⟶ 𝐶𝑖𝑑𝑎𝑑𝑒 garante que
𝐸 = 𝐸𝑚𝑝𝑟𝑒𝑔𝑎𝑑𝑜 ⋈𝐷𝑒𝑝=𝐷𝑒𝑝 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜
• Uma relação está na 3ª forma normal
• se está na 2FN
• nenhum dos atributos não chave depende de outro não chave.
95. Decomposição na 3ª Forma Normal
• Toda a relação R que não esteja na 3FN pode ser decomposta num
conjunto de projecções que estão na 3FN.
• Se 𝑋 ⟶ 𝑌 (com X chave), 𝑌 ↛ 𝑋 e 𝑌 ⟶ 𝑍
(isto é, existe 𝑋 ⟶ 𝑍 não direta, com Z não chave)
• R(YZ) e R(XYW) onde W tem todos os atributos que não são de X, nem
de Y nem de Z.
96. Decomposição na 3ª Forma Normal
• Toda a relação R que não esteja na 3FN pode ser decomposta num
conjunto de projecções que estão na 3FN.
• Se 𝑋 ⟶ 𝑌 (com X chave), 𝑌 ↛ 𝑋 e 𝑌 ⟶ 𝑍
(isto é, existe 𝑋 ⟶ 𝑍 não direta, com Z não chave)
• R(YZ) e R(XYW) onde W tem todos os atributos que não são de X, nem
de Y nem de Z.
97. Decomposição na 3ª Forma Normal
• Toda a relação R que não esteja na 3FN pode ser decomposta num
conjunto de projecções que estão na 3FN.
• Se 𝑋 ⟶ 𝑌 (com X chave), 𝑌 ↛ 𝑋 e 𝑌 ⟶ 𝑍
(isto é, existe 𝑋 ⟶ 𝑍 não direta, com Z não chave)
• R(YZ) e R(XYW) onde W tem todos os atributos que não são de X, nem
de Y nem de Z.
98. Exemplo 1
• Nota_de_enc ( N_nota_enc, Cod_cliente, Nome_cliente,
Morada_cliente)
• Cod_cliente ⟶ Nome_cliente
• Cod_cliente ⟶ Morada_cliente
• Por união, Cod_cliente ⟶ Nome_cliente, Morada_cliente
(logo a DF N_nota_enc ⟶ Nome_cliente, Morada_cliente não é direta)
A relação não está na 3FN
99. Exemplo 1
• Nota_de_enc ( N_nota_enc, Cod_cliente, Nome_cliente,
Morada_cliente)
• Cod_cliente ⟶ Nome_cliente
• Cod_cliente ⟶ Morada_cliente
• Por união, Cod_cliente ⟶ Nome_cliente, Morada_cliente
(logo a DF N_nota_enc ⟶ Nome_cliente, Morada_cliente não é direta)
A relação não está na 3FN
100. Exemplo 1
• Nota_de_enc ( N_nota_enc, Cod_cliente, Nome_cliente,
Morada_cliente)
• Cod_cliente ⟶ Nome_cliente
• Cod_cliente ⟶ Morada_cliente
• Por união, Cod_cliente ⟶ Nome_cliente, Morada_cliente
(logo a DF N_nota_enc ⟶ Nome_cliente, Morada_cliente não é direta)
A relação não está na 3FN
102. Vantagens da Normalização
• Estruturas de dados mais estáveis
• Elimina a redundância
• Obtêm-se um modelo de dados mais natural e mais simples
• Evitam-se os efeitos laterais da alteração
• Evitam-se os efeitos laterais da inserção
• Evitam-se os efeitos laterais da remoção
• Facilita a exploração e manutenção de ficheiros
103. Desvantagens da Normalização
• Favorece a proliferação no n.º de tabelas
• Favorece a fragmentação exagerada
• Perigoso de seguir cegamente
Conclusão: Normalizar? Sim, mas com bom senso ...