Normalização
ADAA / JÚLIO DA SILVA DIAS
Data Literacy
Simply stated, data literacy is the ability
to explore, understand,
and communicate with data.
Estrutura de Dados Relacional
Existem cinco components estruturais no modelo de dados relacional:
relação, atributo, tupla, domínio e banco de dados relacional.
• Relação > Uma tabela com colunas e linhas
• Atributo > Uma coluna identificada por um nome de uma relação
• Tupla > Uma linha de uma relação
• Domínio > O conjunto de valores possíveis de um atributo
• Banco de dados relacional > Uma coleção de tabelas normalizadas
Entidade Relacionamento
Faça o Diagrama Entidade-Relacionamento para a situações a seguir.
Indique as cardinalidades máximas e mínimas. Para cada conjunto de
entidades, coloque um conjunto mínimo de atributos, indicando a sua chave
primária.
1. Em uma construtora, um engenheiro pode gerenciar vários projetos, sendo
que cada projeto é gerenciado obrigatória e unicamente por um
engenheiro. Um funcionário pode trabalhar em vários projetos ao mesmo
tempo. Os projetos são numerados por engenheiro. Por exemplo: há os
projetos 1,2,3 para o engenheiro Roberto; também há os projetos 1 e 2 para
o engenheiro João.
5
2. Em uma clínica odontológica, um dentista pode consultar vários
pacientes. Após a consulta, podem ser iniciados os atendimentos, mas
nem toda consulta resulta em atendimento. Um paciente pode ser
atendido por mais de um dentista. O(s) dentista(s) que consulta(m) não
precisa(m) ser o(s) mesmo(s) que atende(m). Deve ser registrada a
data, a hora e a descrição de cada atendimento.
3. Em um buffet, um cliente pode contratar várias festas. Uma festa, no
entanto, é contratada por um único cliente. Uma festa tem várias
bebidas e vários alimentos, sendo obrigatória a escolha de pelo menos
uma bebida e um alimento. O pagamento de uma festa pode ser à
vista ou parcelado em até 12 vezes, devendo ser controlada a data de
vencimento e data de pagamento de cada parcela.
6
Normalizar / Porquê?
Um bom projeto de uma base de dados garante que usuários podem
modificar o conteúdo da base de dados sem efeitos colaterais não
esperados. Por exemplo uma base de dados da universidade, na qual um
usuário deve ser capaz de inserir um novo curso sem ter que
simultaneamente inserir uma nova oferta do curso e um novo estudante
matriculado no curso.
Da mesma forma, quando um estudante é deletado da base de dados ao
final da sua graduação, dados sobre os cursos que realizou não devem ser
perdidos. Estes problemas são exemplos de anomalias de modificação,
efeitos colaterais não esperados que ocorrem quando alterando o conteúdo
de uma tabela com excess de redundância. Um bom projeto de base de
dados evita anomalias de modificação pela eleminação excessive de
redundâncias.
Normalizar / Porquê?
Após a construção do modelo conceitual dos dados (Modelo
Entidade/Relacionamento) é feita a transformação para o modelo
lógico (Esquema de Tabelas).
O Desenho de Tabelas obtido representa a estrutura da informação
de um modo natural e completo.
Mas terá o mínimo de redundância possível?
A Normalização tem como objetivo avaliar a qualidade do Projeto de
Tabelas e transformá-lo (em caso de necessidade) num Projeto
(Conjunto de Tabelas) equivalente, menos redundante e mais estável.
Projeto Lógico - Normalização
Processo importante para um projeto de banco de
dados;
Consiste em analisar o modelo e através de regras
formais, reestruturar possíveis tabelas e atributos,
reduzindo assim redundâncias e permitindo o
crescimento do Banco de Dados com o mínimo de
efeito colateral.
Consiste em diminuir redundâncias e anomalias de
inserção, atualização e deleção.
• Consiste em analisar relações para satisfazer requisitos
cada vez mais rigorosos acarretando agrupamentos
cada vez melhores, mais estáveis e seguros
• Realiza-se uma série de testes para certificar se a relação
está ou não em uma determinada forma normal. O
processo consiste em certificar e decompor.
• Fundamentado no conceito de Dependência Funcional.
Normalização
 Definição:
A normalização é um proceso no qual comprovamos
o cumprimento de uma série de regras, que servem
para ajudar a eliminação de redundâncias e
inconsistências em uma base de dados.
11
Normalização
Modelo E-R
Tabela Não
Normalizada
1ª Forma
Normal (1FN)
2ª Forma
Normal (2FN)
3ª Forma
Normal (3FN)
Eliminar
Grupos de
Atributos
Repetitivos
Eliminar
Dependências
Funcionais (DF
´s) Parciais
Eliminar DF´s
Transitiva
Normalização 13
1FN
2FN
3FN
BCNF
4FN
5FN
Normalização 14
1F
N
Normalização
 Formas Normais:
Uma tabela está na Primeira Forma (1FN) se todos
os seus atributos contém valores atômicos.
15
Normalização
 Formas Normis:
Uma tabela está na Primeira Forma (1FN) se seus
atributos contèm somente valores atômicos.
“Uma relação na qual a intersecção de toda linha e
coluna contém somente um valor”
16
Normalização
 Exemplo
17
ID Nome Idade Nacionalidade E-mail
0001 Tom Hanks 51 USA tom@yahoo.com,
tom@hotmail.com
0002 Nicolas Cage 43 USA nicolas@hotmail.com
1010 Johnny Depp 44 USA johnny@gmail.com
2345 John Malkovich 54 USA malkovich@hotmail.com
O esquema não se encontra na 1FN, o atributo e-mail contém mais de um valor.
Normalização (Solução 1)
 Primera Forma Normal (1FN):
18
ID Nome Idade Nacionalidade
0001 Tom Hanks 51 USA
0002 Nicolas Cage 43 USA
1010 Johnny Depp 44 USA
2345 John Malkovich 54 USA
ID ID_Email E-mail
0001 1 tom@yahoo.com
0001 2 tom@hotmail.com
0002 1 nicolas@hotmail.com
1010 1 johnny@gmail.com
2345 1 malkovich@hotmail.com
Normalização (Solução 2)
 Primera Forma Normal (1FN):
19
# #
ID Nome Idade Nacionalidade E-mail
0001 Tom Hanks 51 USA tom@yahoo.com
0001 Tom Hanks 51 USA tom@hotmail.com
0002 Nicolas Cage 43 USA nicolas@hotmail.com
1010 Johnny Depp 44 USA johnny@gmail.com
2345 John Malkovich 54 USA malkovich@hotmail.com
Primeira Forma Normal
Uma relação está na primeira forma normal se todos os seus atributo são monovalorados e atômicos.
Quando encontrarmos um atributo multivalorado, deve-se criar um novo atributo que individualize a
informação que esta multivalorada:
BOLETIM = {matricula-aluno, materia, notas}
No caso acima, cada nota seria individualizada identificando a prova a qual aquela nota se refere:
BOLETIM = {matricula-aluno, materia, numero-prova, nota}
Quando encontrarmos um atributo não atômico, deve-se dividi-lo em outros atributos que sejam
atômicos:
PESSOA = {CPF, nome-completo}
Vamos supor que, para a aplicação que utilizará esta relação, o atributo nome-completo não é
atômico, a solução então será:
PESSOA = {CPF, nome, sobrenome}
Chaves
Conceito usado para especificar restrições
de integridade básicas de um SGBD
relacional
Três tipos:
– chave primária
– chave alternativa
– chave estrangeira
21
Chave primária
Uma chave primária é uma coluna ou uma combinação de
colunas cujos valores distinguem uma linha das demais dentro
de uma tabela
22
Chave estrangeira
Uma coluna ou uma combinação de colunas, cujos
valores aparecem necessariamente na chave primária
de uma tabela.
Mecanismo que permite a implementação de
relacionamentos em um banco de dados relacional
23
Chave alternativa
Mais de uma coluna ou combinações de colunas podem servir
para distinguir uma linha das demais.
Uma das colunas (ou combinação de colunas) é escolhida
como chave primária.
As demais colunas ou combinações são denominadas chaves
alternativas.
24
CONCEITO DE CHAVE
Superchave é o conjunto de um ou mais atributos que, tomados
coletivamente nos permite identificar de maneira unívoca uma tupla
em um conjunto de tuplas.
Chave candidata - É uma superchave para qual nenhum
subconjunto possa ser uma superchave.
Chave primária é a chave candidata que é escolhida pelo projetista
para identificar tuplas dentro de um conjunto de tuplas.
25
Conceito de Chaves Candidatas e Superchaves
 A chave primária é aquele conjunto de colunas que serve para identificar
a tupla de uma forma única (pode ser só uma coluna, ou podem ser duas
ou mais). É importante que o projetista do banco de dados saiba identificar
quais são as colunas mais apropriadas para serem eleitas como parte da
chave primária.
 Entretanto, às vezes há mais do que um conjunto de colunas que poderia
ser chave primária. Cada um desses conjuntos é chamado de chave
candidata. Por exemplo, em uma tabela Pessoa que tenha os campos
CPF, RG, Estado e Nome, tanto o CPF quanto o RG junto com o Estado são
chaves candidatas. Assim, é possível chegar-se ao Nome a partir do CPF,
mas também é possível chegar-se ao Nome a partir do RG e do Estado.
 Qualquer conjunto de colunas que tenha como subconjunto, uma chave
candidata é denominado de superchave.
27
Chave Surrogada ou Substituta
 Um requisito básico no desenvolvimento de um banco de dados é ter
uma chave primária para cada tabela. Podemos especificar uma
chave primária de duas formas:
 Usar os próprios dados armazenados como chave primária – Por
exemplo, usar o CPF armazenado de um cliente como chave primária
de uma tabela de Clientes. Chamamos a esse tipo de chave de
Chave Natural.
 Usar um campo criado especificamente para ser chave primária, com
valores gerados artificialmente, por exemplo por meio de uma
sequência de números em auto-incremento. Esse tipo de chave é
chamada de Chave Surrogada (Surrogate key) ou Chave Substituta.
28
Exemplo
 No exemplo abaixo, temos uma tabela de produtos em estoque em
um pequeno mercado. Note que existe um campo, batizado de “ID”,
cujo valor é um número sequencial, sem significado nenhum para os
produtos em si. Esta é a chave primária surrogada, pois seus valores
são gerados automaticamente pelo sistema cada vez que um novo
produto é cadastrado:
ID Nome_Produto Quant_Prod Preco_Prod Categ_Prod
1 Lata de Sardinha 25 3,99 Enlatados
2 Biscoito de Leite 30 1,65 Doces
3 Salame Italiano 12 56,20 Embutidos
4 Milho em Conserva 30 2,50 Enlatados
5 Chocolate Kit-Kat 37 3,50 Doces
Chaves
 Chaves simples: são aquelas que contêm somente um atributo;
 Chaves compostas: são aquelas que contêm mais de um atributo;
 Chaves superpostas: dizemos que duas chaves são superpostas
quando pelo uma delas é composta e entre elas existe pelo
menos um atributo em comum;
 Chaves disjuntas: dizemos que duas chaves são disjuntas se entre
elas não existe superposição.
29
Chaves 30
Temos várias chaves candidatas:
a)CodGeral;
b)Semestre+CodDisc;
c) Semestre+Disciplina
• Chaves simples: somente a);
• Chaves compostas: b) e c);
• Chaves superpostas: b) é sobreposta a c), pois o campo semestre está nas duas
chaves;
• Chaves disjuntas: a) é disjunta a b) e a) é disjunta a c).
Normalização
 Exercício 1: Verifique se as tabelas estão na 1FN e caso não
estejam realizem a transformação para a 1FN:
Pessoa (CPF, Nome, Idade, Data_Nascimento, Telefones)
31
CPF Nome Idade Data_Nascimento Telefones
01 Carl Jones 51 01/01/1999 9234-3212, 9991-2345
02 Joseph Cage 43 02/10/1998 9989-8182, 3334-1111
03 Johnny Hal 44 04/11/1995 9999-8183
45 John Bell 54 12/12/2000 9789-8184
Normalização
 Exercício 2: Verifique se as tabelas estão na 1FN e caso não estejam
realizem a transformação para a 1FN:
Cliente (ID, Nome, Endereco, Saldo, Limite_Credito)
32
ID Nome Endereco Saldo Limite_Credito
01 Carl Jones Rua A, 123 Ap. 12 2.000,00 5.000,00
02 Joseph Cage Rua 10, 1123 1.500,00 10.000,00
03 Johnny Hal Rua B, 750 3.500,00 5.000,00
45 John Bell Rua A, 7500 2.700,00 3.000,00
Normalização
 Exercício 3: Verifique se as tabelas estão na 1FN e caso não estejam
realizem a transformação para a 1FN:
Empresa (ID, Nome, Endereco, Sites)
33
ID Nome Endereco Sites
01 Empresa 1 Rua A, 123 www.empresa1.com,
www.empresa1.com.br,
www.altempresa1.com
02 Empresa 2 Rua 10, 1123 www.empresa2.com.br
Normalização (Ex 4) 34
Verifique se a tabela está normalizada. Caso não esteja transforme na 1FN.
ID_Pedido Data_Pedid
o
ID_Clie
nte
Nome_Clien
te
ID_Pro Nome_Pro Qtd
e
Valor_U
nit
Total_Pr
od
Total_Pe
dido
001 10/01/2023 1003 Ernesto 31 Caderno 2 15,00 30,00 38,00
42 Caneta 1 3,00 3,00
67 Lápis 5 1,00 5,00
002 12/01/2023 1007 Fabiana 42 Caneta 2 3,00 6,00 19,00
67 Lápis 3 1,00 3,00
85 Lapiseira 2 5,00 10,00
Dependências funcionais 35
A B
determinante dependente
35
B depende funcionalmente de A
Dependência Funcional de Dados
Descreve uma relação entre atributos de uma
tabela.
“Se A e B são atributos de uma tabela, B será
funcionalmente dependente de A. Se cada valor de
A está associado com exatamente um valor de B”
Dependência Funcional de Dados
Procuram encontrar atributos que se tem o
mesmo valor de A e B.
Dependências Funcionais 36
A B
determinante dependente
36
B depende funcionalmente de A
Dependências Funcionais
Dependência Funcional de Dados
Exemplo:
37
37
ID_Colaborador Nome Cargo Salario Local
SL21 Juan Director 24000 B005
SG37 Ana Asistente 9000 B003
SG14 David Supervisor 18000 B003
SA9 María Asistente 9000 B007
SG5 Susana Director 24000 B003
SL41 Julia Asistente 9000 B005
Colaboradores
Dependência Funcional
• Corresponde a uma restrição entre conjuntos de atributos em uma
relação.
• Sempre que um atributo X identifica um atributo Y, dizemos que
entre eles há uma dependência funcional. Temos, portanto, que X é
o determinante e que Y é o dependente.
• A representação é: X->Y (lê-se X determina Y ou Y é funcionalmente
dependente de X).
Dependência Funcional
Dependência Funcional
E-Commerce 2019: Business, Technology and Society 15th Edition > ISBN-13 : 978-
0134998459
E-Commerce 2021: Business, Technology and Society 16th Edition > ISBN-13 : 978-0136931805
E-Commerce 2020–2021: Business, Technology and Society, Global Edition 16th Edition > ISBN-13: 978-
1292343167
Tabela de vendas (Dependência Funcional)
F# : chave primária do fornecedor
Cidade : cidade do fornecedor
P# : chave primária do produto
QDE : quantidade
F# CIDADE P# QDE
F1 Londres P1 100
F1 Londres P2 100
F2 Paris P1 200
F2 Paris P2 200
F3 Paris P2 300
F4 Londres P2 400
F4 Londres P4 400
F4 Londres P5 400
Exemplos de dependências funcionais
válidas:
{ F# } → { CIDADE }
{ F#, P#} → { QDE }
{ F#, P#} → { CIDADE }
{ F#, P#} → { CIDADE, QDE }
{ F#, P#} → { F# }
{ F#, P#} → { F#, P#, CIDADE, QDE }
{ F# } → { QDE }
{ QDE } → { F# }
Dependência Funcional
Dependência Funcional de Dados
Exercicío:
42
42
ID Nome Autor Editora Ano
1022 Sistemas de Bancos de Dados Elmasri Pearson 2019
1022 Sistemas de Bancos de Dados Navathe Pearson 2019
2893 Fundamentos de Bancos de Dados Silberschatz. GEN LTC 2020
2893 Fundamentos de Bancos de Dados Korth. GEN LTC 2020
2893 Fundamentos de Bancos de Dados Sudarshan. GEN LTC 2020
Livros
Dependências Funcionais
Dependência Funcional Completa
Indica que se A e B são atributos de uma
tabela, B depende funcionalmente de A, e
de nenhum subconjunto de A.
43
43
Dependências Funcionais
Dependência Funcional Completa
Exemplo 1
44
44
Matrícula
Código
curso
Nome Sobrenome Nota
1256 34 Pedro Valiente 9
1256 25 Pedro Valiente 8
5776 34 Ana Fernández 6
3491 25 Sara González 7
3491 34 Sara González 6
Dependências Funcionais
Dependência Funcional Transitiva
Acontece quando temos três atributos X, Y e Z.
Y depende funcionalmente de X (X→Y),
Z depende funcionalmente de Y (Y→Z).
X não depende funcionalmente de Y.
Então ocorre que X produz una dependência funcional transitiva
sobre Z.
Normalização 46
1FN
2FN
Normalização
Segunda Forma Normal (2FN)
Ocorre se uma tabela está na primeira
forma normal (1FN) e que cada atributo
que não é chave, depende de forma
funcional completa das chaves
primárias.
47
Normalização
Segunda Forma Normal (2FN)
Exemplo:
48
Matrícula
Código
curso
Nome Sobrenome Nota
1256 34 Pedro Valiente 9
1256 25 Pedro Valiente 8
5776 34 Ana Fernández 6
3491 25 Sara González 7
3491 34 Sara González 6
Normalização
Segunda Forma Normal (2FN)
Solução:
49
Matrícul
a
Nome
Sobrenom
e
1256 Pedro Valiente
5776 Ana Fernández
3491 Sara González
Matrícul
a
Código
curso
Nota
1256 34 9
1256 25 8
5776 34 6
3491 25 7
3491 34 6
Normalização
Segunda Forma Normal (2FN)
Exercício:
50
No.
vendedor
Nome
vendedor
Numero
cliente
Nome
Cliente
Valor da
Venda
1022 Mariana 1840 Melisa 13540
1022 Mariana 1834 Álvaro 10600
1022 Mariana 1856 Victoria 9700
2893 Salvador 1865 Francisco 68400
2893 Salvador 1890 Enrique 34600
2785 Adrian 1864 25000 25000
2785 Adrian 1823 Alma 35008
Normalização 51
1FN
2FN
3FN
Normalização
Terceira Forma Normal (3FN)
Ocorre quando uma tabela está na 2FN e
nenhum atributo que não seja chave depende
transitivamente das chaves da tabela. Nenhum
atributo debe depender funcionalmente de
atributos que não sejam chave.
52
Normalização
Terceira Forma Normal (3FN)
53
ID Nome Sobrenome Codigo_Cidade Cidade
12121349A Salvador Velasco 34 Palhoça
12121349B Pedro Valiente 34 Palhoça
3457775G Ana Fernández 47 Itajaí
5674378J Sara Crespo 47 Itajaí
3456858S Marina Serrat 08 Florianópolis
Alunos
Normalização
Terceira Forma Normal (3FN)
Solução:
Alunos(#ID, Nome, Sobrenome, Cod_Cidade)
Cidade(#Cod_Cidade, Cidade)
54
Normalização
Terceira Forma Normal (3FN)
55
ID Cidade País Idade
1 Montreal Canadá 34
2 Vancouver Canadá 25
3 Victoria Canadá 19
4 Miami EUA 22
5 Miami EUA 30
Socio
O campo não chave primaria País depende transitivamente da
chave ID (através do campo Cidade).
Normalização
Terceira Forma Normal (3FN)
Solução:
Socio(#ID, Idade, Cidade)
Pais(#Cidade, Pais)
56
Normalizar para a 3FN (Ex 1)
Matricula NomeColaborador CodCargo NomeCargo DescCargo SalarioCargo
1 Ana Cintra 1 Professor Professor Universitário 7500
2 Carla Mendes 2 Advogado Apoio Legal 6500
3 Angela Ribeiro 3 Secretaria Apoio Administrativo 1550
4 Rodrigo Reno 1 Professor Professor Universitário 7500
Normalizar até a 3FN (Controle de Colaboradores)
Normalização (Ex 2)
Normalizar até a 3FN (Controle de Uso de Recursos)
58
CPF_Prof Nome_Prof Sala Recurso DescriçãoRecurso DataUso
1 Ana Cintra 1 R122 Camêra 1/3/2023
2 Carla Mendes 2 R200 Tablet 24/02/2023
3 Angela Ribeiro 3 R122 Camêra 25/02/2023
4 Rodrigo Reno 1 R201 Sistema de Som 2/3/2023
Normalização (Ex 3)
Exercício 3: Normalizar até 3FN
59
CPF NomeProfessor NumeroSala Curso
1 Ana Cintra 100 101, 143, 159
2 Carla Mendes 200 201, 211,214
3 Angela Ribeiro 300 700, 722
4 Rodrigo Reno 150 101, 154, 302
Normalização 60
1FN
2FN
3FN
BCNF
Forma Normal de Boyce-Codd (FNBC)
No processo de normalização, essa forma normal deve ser
aplicada às tabelas em 3FN que possuam mais de uma chave
candidata (lembre-se de que a chave primária é também uma
chave candidata), onde pelo menos uma delas seja composta e
onde haja superposição entre elas.
61
Forma Normal de Boyce-Codd
(FNBC)
Definimos que uma tabela está em FNBC se e somente se todos os
determinantes são chaves candidatas. Ou seja, se houver algum
atributo que seja determinado por outro(s) atributo(s) que não é
(sejam) uma chave candidata, não estamos na FNBC. A solução é
levar esses atributos para outra tabela, utilizando o conceito de
decomposição sem perdas.
62
Normalização
Uma forma simples de comprobar se uma relação se
encontra na FNBC consiste em comprovar, que além de
estar na 3FN, atende os seguintes aspectos:
1. Se não existem chaves candidatas compostas (com
vários atributos), está na FNBC.
2. Se exitem chaves candidatas compostas e estas tem
um elemento comum, não está na FNBC.
63
Normalização
Forma normal de Boyce-Codd (FNBC)
Exemplo:
64
ID Curso Tutor
1 Estatística Eva
1 Matemática Andrés
3 Estatística Eva
2 Matemática Guillermo
2 Estatística Julia
4 Matemática Guillermo
TUTORIAS
Normalização
Forma normal de Boyce-Codd (FNBC)
Solução:
Tutorias(#ID,#Tutor)
TutorCurso(#Tutor, Curso)
65
Normalização de Tabelas
Discutir em Grupo
Identifique as dependências funcionais na relação abaixo:
Matrícula, nome do aluno, sexo e data de nascimento do
aluno, código, nome da disciplina e carga horária de disciplina e
a data da inscrição do aluno na disciplina.
Codigo Nome Telefone Endereço
1 Ary (34) 3821-0000
(34) 9979-0000
(34) 9964-0000
Av. Getúlio Vargas, 1000, apto 201 – Centro – Patos de Minas-MG
2 Tatiana (34) 3822-0000
(34) 9976-0000
Av. Brasil, 966 – Centro – Belo Horizonte-MG
3 Ana (11)3184-000 Rua Minas Gerais, 100 – Bairro Brasil – Recife-PE
4 João (31)3257-000 Praça da Liberdade, 27 – Bairro Esperança – São Paulo-SP
Anomalias
Problema de Inserção
• Só é possível inserir um novo fornecedor quando o mesmo
solicitar peças;
• Só é possível inserir uma nova peça quando a mesma for
solicitada por um fornecedor.
Problemas de Atualização
• Para atualizar o endereço do fornecedor, todos os registros
desse fornecedor deverão ser atualizados;
• Para atualizar o preço da peça, todos os registros dessa peça
deverão ser atualizados.
Problema de Exclusão
• Caso sejam deletadas todas as solicitações de um fornecedor,
seus dados cadastrais também serão apagados.
Primeira forma normal (1NF)
Primeira regra para eliminar as anomalias é:
• Não devem existir colunas multivaloradas.
O que é uma coluna multivalorada? É uma coluna na qual é possível armazenar-
se mais de um valor por registro. Por exemplo, imagine que você tenha na sua
tabela de clientes as colunas codigo, nome e telefones, preenchidos assim:
Codigo Nome Telefones
1 Paulo 99567-4289, 3605-4900
2 Maria 97223-0444
3 Alan
4 Juliana 2853-0266, 96610-5480, 2410-9941
Codigo Nome ID_Telefone Telefones
1 Paulo 1 99567-4289
1 Paulo 2 3605-4900
2 Maria 1 97223-0444
4 Juliana 1 2853-0266
4 Juliana 2 96610-5480
4 Juliana 3 2410-9941
Codigo Nome Telefones
1 Paulo 99567-4289, 3605-4900
2 Maria 97223-0444
3 Alan
4 Juliana 2853-0266, 96610-5480, 2410-9941
Observe que a coluna de telefones é multivalorada. Inserir, atualizar e excluir telefones nesse
esquema é algo complicado de se fazer. Pesquisar por algum número de telefone específico
também é algo complicado. A solução para isso é dividir em duas tabelas:
Codigo Nome
1 Paulo
2 Maria
3 Alan
4 Juliana
Codigo ID_Telefone Telefones
1 1 99567-4289
1 2 3605-4900
2 1 97223-0444
4 1 2853-0266
4 2 96610-5480
4 3 2410-9941
Ao eliminar-se todas as colunas multivaloradas, o banco de dados atinge uma forma
estrutural denominada de primeira forma normal, ou simplesmente 1FN.
Segunda forma normal (2FN)
A segunda forma normal é aquela que diz que:
• Todas as colunas devem ter dependência funcional com a totalidade
de cada chave candidata.
Na maioria dos casos por “cada chave candidata“, entenda-se por “com
a chave primária“, exceto se houver mais do que uma chave candidata.
Além disso, para que uma tabela esteja na segunda forma normal, ela
deve estar antes de tudo, na primeira forma normal.
Uma coluna está em dependência funcional com a chave primária
quando ela é determinada no domínio da aplicação por meio da chave
primária. Uma coluna não tem dependência funcional com a chave
primária quando ela é definida de forma independente da chave
primária ou quando ela é definida a partir de alguma outra coluna que
não seja a chave primária.
Uma dependência funcional pode ser dita estar na totalidade da chave
primária quando todos os campos da chave primária são necessários
para estabelecer-se a relação de dependência. No caso de a chave
primária ser composta, é possível se ter uma dependência parcial.
Para dar um exemplo da 2FN, imagine que sua empresa tenha
representantes comerciais atuando em clientes e queira representar a
relação de quais representantes comerciais atuam em quais clientes.
Nessa tabela (vamos chamar de representação), temos as colunas
ID_Cliente e ID_Rep como chaves primárias e temos também as
colunas Nome_Cliente, Nome_Rep, Endereço_Rep, Endereço_Cliente e
Valor_Contrato.
2FN
ID_Cliente Nome_Cliente ID_Rep Nome_Rep Endereço_Rep Endereço_Cliente Valor_Contrato
12 ABC DEF 21 QWE RTY Rua X, 123 Rua H, 123 1200,00
13 ASD FGH 23 ZXC VBN Rua Z, 5678 Rua K, 5678 2340,00
Representação
Observe que as colunas Nome_Rep, Endereço_Rep, Nome_cliente e Endereço_Cliente dependem da
chave primária. Mas eles não dependem de toda a chave primária, cada um depende apenas de
parte dela. A solução neste caso é ter uma tabela de clientes (com o endereço do cliente), uma tabela
de representantes comerciais (com o endereço dele também) e deixar na tabela de atuação as
respectivas chaves estrangeiras com o valor do contrato.
{ID_Cliente,ID_Rep} -> Nome_Cliente, Nome_Rep, Endereço_Rep, Endereço_Cliente, Valor_Contrato
Relações na 2FN
ID_Cliente ID_Rep Valor_Contrato
12 21 1200,00
13 23 2340,00
Representação
ID_Cliente Nome_Cliente Endereço_Cliente
12 ABC DEF Rua H, 123
13 ASD FGH Rua K, 5678
Cliente
ID_Rep Nome_Rep Endereço_Rep
21 QWE RTY Rua X, 123
23 ZXC VBN Rua Z, 5678
Representante
Terceira forma normal (3FN)
A terceira forma normal é aquela que diz que:
• Todas as colunas devem ter dependência funcional com a totalidade
de cada chave candidata e nada mais além do que essas chaves
candidatas.
Novamente, na maioria dos casos por “cada chave candidata“, entenda-se por “com a
chave primária“, exceto se houver mais do que uma chave candidata. Se a única
chave candidata existente for a chave primária, isso ficaria assim:
Todas as colunas devem ter dependência funcional com a totalidade da chave
primária e nada mais além da chave primária.
Além disso, para uma tabela estar na terceira forma normal, ela deve estar
primeiramente na segunda forma normal (e também na primeira). A parte de
depender da totalidade de cada chave candidata é abordada na segunda forma
normal, então o foco aqui é depender de nada mais que essas chaves.
Por exemplo. Imagine a tabela de carros com as colunas placa (chave
primária), cor, nome_proprietário, endereço_proprietário:
placa cor nome_proprietário endereço_proprietário
ABX-1234 Azul José Rua X, 123
NNU-5566 Verde Marcos Rua exemplo, 5678
SGH-7210 Preto Maria Avenida teste, 7743
ERT-6902 Vermelho José Rua X, 123
BGH-5431 Preto José Rua X, 123
placa -> endereço_proprietário (placa determina endereço_proprietário de forma transitiva)
Observe o endereço do proprietário – ele é uma violação da terceira
forma normal.
Observe que o endereço do proprietário é definido como resultado de
quem é o proprietário, e não como consequência da placa do carro.
Se o José mudar de endereço e atualizarmos o endereço de apenas um
dos carros dele, o banco de dados ficará inconsistente (há anomalia de
alteração). Se a Maria comprar mais um novo carro e adicionarmos
com um outro endereço, também ficará inconsistente (anomalia de
inserção).
Se o Marcos vender o carro dele, o seu endereço será esquecido
(anomalia de exclusão). A solução novamente, é separar em duas
tabelas:
placa cor id_proprietário
ABX-1234 Azul 1
NNU-5566 Verde 2
SGH-7210 Preto 3
ERT-6902 Vermelho 1
BGH-5431 Preto 1
proprietário nome endereço_proprietário
1 José Rua X, 123
2 Marcos Rua exemplo, 5678
3 Maria Avenida teste, 7743
Exercício 1 – Colocar na 3FN
Pedido ( ID_Cliente,Nome-cliente, ISBN, Data-pedido, Título, Autor(es),
Quantidade, Preço, Valor-total)
ID_Cliente Nome-cliente ISBN Data_Pedido Título Autor(es) Quantidade Preço Valor-total
NN -> 1FN (Agrupamentos e Multivalorados)
1FN -> 2FN (Sem Dependência Funcional Parcial)
1FN (Tabela Pedidos e Tabela Autores)
ID_Cliente Nome-cliente ISBN Data_Pedido Título Quantidade Preço Valor-total
ID_Autor ISBN Autor
Pedido ( ID_Cliente, Nome-cliente, ISBN, Data-pedido, Título, Quantidade, Preço, Valor-total)
Autor ( ID_Autor, ISBN, Nome_Autor)
2FN (Tabela Pedido, Autor, Cliente e Livro)
ID_Cliente ISBN Data_Pedido Quantidade Valor-total
ISBN ID_Autor Autor
Pedido ( ID_Cliente, ISBN, Data-pedido, Quantidade, Valor-total)
Autor (ISBN, ID_Autor, Nome_Autor)
Livro ( ISBN, Título, Preço)
Cliente ( ID_Cliente, Nome_Cliente)
ID_Cliente Nome_Cliente
ISBN Titulo Preço
3FN (Tabela Pedido, Autor, Cliente e Livro)
ID_Cliente ISBN Data_Pedido Quantidade
ISBN ID_Autor Autor
Pedido ( ID_Cliente, ISBN, Data-pedido, Quantidade)
Autor (ISBN, ID_Autor, Nome_Autor)
Livro ( ISBN, Título, Preço)
Cliente ( ID_Cliente, Nome_Cliente)
ID_Cliente Nome_Cliente
ISBN Titulo Preço
Exercício 2 – Colocar na 3FN
N_Pedido Codigo_Produto Nome_Produto Quantidade Valor_Unitario Subtotal
1005 1-934 ABC 5 1500,00 7500,00
1006 1-956 BCD 3 350,00 1050,00
1007 1-923 DEF 1 190,00 190,00
1008 1-908 EFG 6 980,00 5880,00
{N_Pedido, Codigo_Produto} -> Quantidade, Subtotal
{Codigo_Produto} -> Nome_Produto, Valor_Unitario
Exercício 2 – Colocar na 3FN
N_Pedido Codigo_Produto Quantidade Subtotal
1005 1-934 5 7500,00
1006 1-956 3 1050,00
1007 1-923 1 190,00
1008 1-908 6 5880,00
{N_Pedido, Codigo_Produto} -> Quantidade, Subtotal
{Codigo_Produto} -> Nome_Produto, Valor_Unitario
Codigo_Produto Nome_Produto Valor_Unitario
1-934 ABC 1500,00
1-956 BCD 350,00
1-923 DEF 190,00
1-908 EFG 980,00
Exercício 2 – Colocar na 3FN
N_Pedido Codigo_Produto Quantidade
1005 1-934 5
1006 1-956 3
1007 1-923 1
1008 1-908 6
{N_Pedido, Codigo_Produto} -> Quantidade, Subtotal
{Codigo_Produto} -> Nome_Produto, Valor_Unitario
Codigo_Produto Nome_Produto Valor_Unitario
1-934 ABC 1500,00
1-956 BCD 350,00
1-923 DEF 190,00
1-908 EFG 980,00
• O Subtotal depende da multiplicação de Quant por Valor_unit, desta
forma a coluna Subtotal depende de outras colunas não-chave.
• Para levar esta coluna para a 3FN devemos eliminar a coluna Subtotal.
Normalizar para a 3FN
Matricula NomeFuncionario CodCargo NomeCargo DescCargo SalarioCargo
1 Ana Cintra 1 Professor Professor Universitário 7500
2 Carla Mendes 2 Advogado Apoio Legal 6500
3 Angela Ribeiro 3 Secretaria Apoio Administrativo 1550
4 Rodrigo Reno 1 Professor Professor Universitário 7500
Observamos que nesta tabela existe a seguinte
dependência: CodCargo => NomeCargo, DescCargo,
SalarioCargo.
Perceba que CodCargo não é chave primária e os
atributos CargoNome, DescCargo e SalarioCargo
estão dependendo dele, ou seja, existe uma
dependência funcional transitiva.

Processo de Normalização de Dados - Introdução

  • 1.
  • 2.
    Data Literacy Simply stated,data literacy is the ability to explore, understand, and communicate with data.
  • 3.
    Estrutura de DadosRelacional Existem cinco components estruturais no modelo de dados relacional: relação, atributo, tupla, domínio e banco de dados relacional. • Relação > Uma tabela com colunas e linhas • Atributo > Uma coluna identificada por um nome de uma relação • Tupla > Uma linha de uma relação • Domínio > O conjunto de valores possíveis de um atributo • Banco de dados relacional > Uma coleção de tabelas normalizadas
  • 5.
    Entidade Relacionamento Faça oDiagrama Entidade-Relacionamento para a situações a seguir. Indique as cardinalidades máximas e mínimas. Para cada conjunto de entidades, coloque um conjunto mínimo de atributos, indicando a sua chave primária. 1. Em uma construtora, um engenheiro pode gerenciar vários projetos, sendo que cada projeto é gerenciado obrigatória e unicamente por um engenheiro. Um funcionário pode trabalhar em vários projetos ao mesmo tempo. Os projetos são numerados por engenheiro. Por exemplo: há os projetos 1,2,3 para o engenheiro Roberto; também há os projetos 1 e 2 para o engenheiro João. 5
  • 6.
    2. Em umaclínica odontológica, um dentista pode consultar vários pacientes. Após a consulta, podem ser iniciados os atendimentos, mas nem toda consulta resulta em atendimento. Um paciente pode ser atendido por mais de um dentista. O(s) dentista(s) que consulta(m) não precisa(m) ser o(s) mesmo(s) que atende(m). Deve ser registrada a data, a hora e a descrição de cada atendimento. 3. Em um buffet, um cliente pode contratar várias festas. Uma festa, no entanto, é contratada por um único cliente. Uma festa tem várias bebidas e vários alimentos, sendo obrigatória a escolha de pelo menos uma bebida e um alimento. O pagamento de uma festa pode ser à vista ou parcelado em até 12 vezes, devendo ser controlada a data de vencimento e data de pagamento de cada parcela. 6
  • 7.
    Normalizar / Porquê? Umbom projeto de uma base de dados garante que usuários podem modificar o conteúdo da base de dados sem efeitos colaterais não esperados. Por exemplo uma base de dados da universidade, na qual um usuário deve ser capaz de inserir um novo curso sem ter que simultaneamente inserir uma nova oferta do curso e um novo estudante matriculado no curso. Da mesma forma, quando um estudante é deletado da base de dados ao final da sua graduação, dados sobre os cursos que realizou não devem ser perdidos. Estes problemas são exemplos de anomalias de modificação, efeitos colaterais não esperados que ocorrem quando alterando o conteúdo de uma tabela com excess de redundância. Um bom projeto de base de dados evita anomalias de modificação pela eleminação excessive de redundâncias.
  • 8.
    Normalizar / Porquê? Apósa construção do modelo conceitual dos dados (Modelo Entidade/Relacionamento) é feita a transformação para o modelo lógico (Esquema de Tabelas). O Desenho de Tabelas obtido representa a estrutura da informação de um modo natural e completo. Mas terá o mínimo de redundância possível? A Normalização tem como objetivo avaliar a qualidade do Projeto de Tabelas e transformá-lo (em caso de necessidade) num Projeto (Conjunto de Tabelas) equivalente, menos redundante e mais estável.
  • 9.
    Projeto Lógico -Normalização Processo importante para um projeto de banco de dados; Consiste em analisar o modelo e através de regras formais, reestruturar possíveis tabelas e atributos, reduzindo assim redundâncias e permitindo o crescimento do Banco de Dados com o mínimo de efeito colateral. Consiste em diminuir redundâncias e anomalias de inserção, atualização e deleção.
  • 10.
    • Consiste emanalisar relações para satisfazer requisitos cada vez mais rigorosos acarretando agrupamentos cada vez melhores, mais estáveis e seguros • Realiza-se uma série de testes para certificar se a relação está ou não em uma determinada forma normal. O processo consiste em certificar e decompor. • Fundamentado no conceito de Dependência Funcional.
  • 11.
    Normalização  Definição: A normalizaçãoé um proceso no qual comprovamos o cumprimento de uma série de regras, que servem para ajudar a eliminação de redundâncias e inconsistências em uma base de dados. 11
  • 12.
    Normalização Modelo E-R Tabela Não Normalizada 1ªForma Normal (1FN) 2ª Forma Normal (2FN) 3ª Forma Normal (3FN) Eliminar Grupos de Atributos Repetitivos Eliminar Dependências Funcionais (DF ´s) Parciais Eliminar DF´s Transitiva
  • 13.
  • 14.
  • 15.
    Normalização  Formas Normais: Umatabela está na Primeira Forma (1FN) se todos os seus atributos contém valores atômicos. 15
  • 16.
    Normalização  Formas Normis: Umatabela está na Primeira Forma (1FN) se seus atributos contèm somente valores atômicos. “Uma relação na qual a intersecção de toda linha e coluna contém somente um valor” 16
  • 17.
    Normalização  Exemplo 17 ID NomeIdade Nacionalidade E-mail 0001 Tom Hanks 51 USA tom@yahoo.com, tom@hotmail.com 0002 Nicolas Cage 43 USA nicolas@hotmail.com 1010 Johnny Depp 44 USA johnny@gmail.com 2345 John Malkovich 54 USA malkovich@hotmail.com O esquema não se encontra na 1FN, o atributo e-mail contém mais de um valor.
  • 18.
    Normalização (Solução 1) Primera Forma Normal (1FN): 18 ID Nome Idade Nacionalidade 0001 Tom Hanks 51 USA 0002 Nicolas Cage 43 USA 1010 Johnny Depp 44 USA 2345 John Malkovich 54 USA ID ID_Email E-mail 0001 1 tom@yahoo.com 0001 2 tom@hotmail.com 0002 1 nicolas@hotmail.com 1010 1 johnny@gmail.com 2345 1 malkovich@hotmail.com
  • 19.
    Normalização (Solução 2) Primera Forma Normal (1FN): 19 # # ID Nome Idade Nacionalidade E-mail 0001 Tom Hanks 51 USA tom@yahoo.com 0001 Tom Hanks 51 USA tom@hotmail.com 0002 Nicolas Cage 43 USA nicolas@hotmail.com 1010 Johnny Depp 44 USA johnny@gmail.com 2345 John Malkovich 54 USA malkovich@hotmail.com
  • 20.
    Primeira Forma Normal Umarelação está na primeira forma normal se todos os seus atributo são monovalorados e atômicos. Quando encontrarmos um atributo multivalorado, deve-se criar um novo atributo que individualize a informação que esta multivalorada: BOLETIM = {matricula-aluno, materia, notas} No caso acima, cada nota seria individualizada identificando a prova a qual aquela nota se refere: BOLETIM = {matricula-aluno, materia, numero-prova, nota} Quando encontrarmos um atributo não atômico, deve-se dividi-lo em outros atributos que sejam atômicos: PESSOA = {CPF, nome-completo} Vamos supor que, para a aplicação que utilizará esta relação, o atributo nome-completo não é atômico, a solução então será: PESSOA = {CPF, nome, sobrenome}
  • 21.
    Chaves Conceito usado paraespecificar restrições de integridade básicas de um SGBD relacional Três tipos: – chave primária – chave alternativa – chave estrangeira 21
  • 22.
    Chave primária Uma chaveprimária é uma coluna ou uma combinação de colunas cujos valores distinguem uma linha das demais dentro de uma tabela 22
  • 23.
    Chave estrangeira Uma colunaou uma combinação de colunas, cujos valores aparecem necessariamente na chave primária de uma tabela. Mecanismo que permite a implementação de relacionamentos em um banco de dados relacional 23
  • 24.
    Chave alternativa Mais deuma coluna ou combinações de colunas podem servir para distinguir uma linha das demais. Uma das colunas (ou combinação de colunas) é escolhida como chave primária. As demais colunas ou combinações são denominadas chaves alternativas. 24
  • 25.
    CONCEITO DE CHAVE Superchaveé o conjunto de um ou mais atributos que, tomados coletivamente nos permite identificar de maneira unívoca uma tupla em um conjunto de tuplas. Chave candidata - É uma superchave para qual nenhum subconjunto possa ser uma superchave. Chave primária é a chave candidata que é escolhida pelo projetista para identificar tuplas dentro de um conjunto de tuplas. 25
  • 26.
    Conceito de ChavesCandidatas e Superchaves  A chave primária é aquele conjunto de colunas que serve para identificar a tupla de uma forma única (pode ser só uma coluna, ou podem ser duas ou mais). É importante que o projetista do banco de dados saiba identificar quais são as colunas mais apropriadas para serem eleitas como parte da chave primária.  Entretanto, às vezes há mais do que um conjunto de colunas que poderia ser chave primária. Cada um desses conjuntos é chamado de chave candidata. Por exemplo, em uma tabela Pessoa que tenha os campos CPF, RG, Estado e Nome, tanto o CPF quanto o RG junto com o Estado são chaves candidatas. Assim, é possível chegar-se ao Nome a partir do CPF, mas também é possível chegar-se ao Nome a partir do RG e do Estado.  Qualquer conjunto de colunas que tenha como subconjunto, uma chave candidata é denominado de superchave.
  • 27.
    27 Chave Surrogada ouSubstituta  Um requisito básico no desenvolvimento de um banco de dados é ter uma chave primária para cada tabela. Podemos especificar uma chave primária de duas formas:  Usar os próprios dados armazenados como chave primária – Por exemplo, usar o CPF armazenado de um cliente como chave primária de uma tabela de Clientes. Chamamos a esse tipo de chave de Chave Natural.  Usar um campo criado especificamente para ser chave primária, com valores gerados artificialmente, por exemplo por meio de uma sequência de números em auto-incremento. Esse tipo de chave é chamada de Chave Surrogada (Surrogate key) ou Chave Substituta.
  • 28.
    28 Exemplo  No exemploabaixo, temos uma tabela de produtos em estoque em um pequeno mercado. Note que existe um campo, batizado de “ID”, cujo valor é um número sequencial, sem significado nenhum para os produtos em si. Esta é a chave primária surrogada, pois seus valores são gerados automaticamente pelo sistema cada vez que um novo produto é cadastrado: ID Nome_Produto Quant_Prod Preco_Prod Categ_Prod 1 Lata de Sardinha 25 3,99 Enlatados 2 Biscoito de Leite 30 1,65 Doces 3 Salame Italiano 12 56,20 Embutidos 4 Milho em Conserva 30 2,50 Enlatados 5 Chocolate Kit-Kat 37 3,50 Doces
  • 29.
    Chaves  Chaves simples:são aquelas que contêm somente um atributo;  Chaves compostas: são aquelas que contêm mais de um atributo;  Chaves superpostas: dizemos que duas chaves são superpostas quando pelo uma delas é composta e entre elas existe pelo menos um atributo em comum;  Chaves disjuntas: dizemos que duas chaves são disjuntas se entre elas não existe superposição. 29
  • 30.
    Chaves 30 Temos váriaschaves candidatas: a)CodGeral; b)Semestre+CodDisc; c) Semestre+Disciplina • Chaves simples: somente a); • Chaves compostas: b) e c); • Chaves superpostas: b) é sobreposta a c), pois o campo semestre está nas duas chaves; • Chaves disjuntas: a) é disjunta a b) e a) é disjunta a c).
  • 31.
    Normalização  Exercício 1:Verifique se as tabelas estão na 1FN e caso não estejam realizem a transformação para a 1FN: Pessoa (CPF, Nome, Idade, Data_Nascimento, Telefones) 31 CPF Nome Idade Data_Nascimento Telefones 01 Carl Jones 51 01/01/1999 9234-3212, 9991-2345 02 Joseph Cage 43 02/10/1998 9989-8182, 3334-1111 03 Johnny Hal 44 04/11/1995 9999-8183 45 John Bell 54 12/12/2000 9789-8184
  • 32.
    Normalização  Exercício 2:Verifique se as tabelas estão na 1FN e caso não estejam realizem a transformação para a 1FN: Cliente (ID, Nome, Endereco, Saldo, Limite_Credito) 32 ID Nome Endereco Saldo Limite_Credito 01 Carl Jones Rua A, 123 Ap. 12 2.000,00 5.000,00 02 Joseph Cage Rua 10, 1123 1.500,00 10.000,00 03 Johnny Hal Rua B, 750 3.500,00 5.000,00 45 John Bell Rua A, 7500 2.700,00 3.000,00
  • 33.
    Normalização  Exercício 3:Verifique se as tabelas estão na 1FN e caso não estejam realizem a transformação para a 1FN: Empresa (ID, Nome, Endereco, Sites) 33 ID Nome Endereco Sites 01 Empresa 1 Rua A, 123 www.empresa1.com, www.empresa1.com.br, www.altempresa1.com 02 Empresa 2 Rua 10, 1123 www.empresa2.com.br
  • 34.
    Normalização (Ex 4)34 Verifique se a tabela está normalizada. Caso não esteja transforme na 1FN. ID_Pedido Data_Pedid o ID_Clie nte Nome_Clien te ID_Pro Nome_Pro Qtd e Valor_U nit Total_Pr od Total_Pe dido 001 10/01/2023 1003 Ernesto 31 Caderno 2 15,00 30,00 38,00 42 Caneta 1 3,00 3,00 67 Lápis 5 1,00 5,00 002 12/01/2023 1007 Fabiana 42 Caneta 2 3,00 6,00 19,00 67 Lápis 3 1,00 3,00 85 Lapiseira 2 5,00 10,00
  • 35.
    Dependências funcionais 35 AB determinante dependente 35 B depende funcionalmente de A Dependência Funcional de Dados Descreve uma relação entre atributos de uma tabela. “Se A e B são atributos de uma tabela, B será funcionalmente dependente de A. Se cada valor de A está associado com exatamente um valor de B”
  • 36.
    Dependência Funcional deDados Procuram encontrar atributos que se tem o mesmo valor de A e B. Dependências Funcionais 36 A B determinante dependente 36 B depende funcionalmente de A
  • 37.
    Dependências Funcionais Dependência Funcionalde Dados Exemplo: 37 37 ID_Colaborador Nome Cargo Salario Local SL21 Juan Director 24000 B005 SG37 Ana Asistente 9000 B003 SG14 David Supervisor 18000 B003 SA9 María Asistente 9000 B007 SG5 Susana Director 24000 B003 SL41 Julia Asistente 9000 B005 Colaboradores
  • 38.
    Dependência Funcional • Correspondea uma restrição entre conjuntos de atributos em uma relação. • Sempre que um atributo X identifica um atributo Y, dizemos que entre eles há uma dependência funcional. Temos, portanto, que X é o determinante e que Y é o dependente. • A representação é: X->Y (lê-se X determina Y ou Y é funcionalmente dependente de X).
  • 39.
  • 40.
    Dependência Funcional E-Commerce 2019:Business, Technology and Society 15th Edition > ISBN-13 : 978- 0134998459 E-Commerce 2021: Business, Technology and Society 16th Edition > ISBN-13 : 978-0136931805 E-Commerce 2020–2021: Business, Technology and Society, Global Edition 16th Edition > ISBN-13: 978- 1292343167
  • 41.
    Tabela de vendas(Dependência Funcional) F# : chave primária do fornecedor Cidade : cidade do fornecedor P# : chave primária do produto QDE : quantidade F# CIDADE P# QDE F1 Londres P1 100 F1 Londres P2 100 F2 Paris P1 200 F2 Paris P2 200 F3 Paris P2 300 F4 Londres P2 400 F4 Londres P4 400 F4 Londres P5 400 Exemplos de dependências funcionais válidas: { F# } → { CIDADE } { F#, P#} → { QDE } { F#, P#} → { CIDADE } { F#, P#} → { CIDADE, QDE } { F#, P#} → { F# } { F#, P#} → { F#, P#, CIDADE, QDE } { F# } → { QDE } { QDE } → { F# }
  • 42.
    Dependência Funcional Dependência Funcionalde Dados Exercicío: 42 42 ID Nome Autor Editora Ano 1022 Sistemas de Bancos de Dados Elmasri Pearson 2019 1022 Sistemas de Bancos de Dados Navathe Pearson 2019 2893 Fundamentos de Bancos de Dados Silberschatz. GEN LTC 2020 2893 Fundamentos de Bancos de Dados Korth. GEN LTC 2020 2893 Fundamentos de Bancos de Dados Sudarshan. GEN LTC 2020 Livros
  • 43.
    Dependências Funcionais Dependência FuncionalCompleta Indica que se A e B são atributos de uma tabela, B depende funcionalmente de A, e de nenhum subconjunto de A. 43 43
  • 44.
    Dependências Funcionais Dependência FuncionalCompleta Exemplo 1 44 44 Matrícula Código curso Nome Sobrenome Nota 1256 34 Pedro Valiente 9 1256 25 Pedro Valiente 8 5776 34 Ana Fernández 6 3491 25 Sara González 7 3491 34 Sara González 6
  • 45.
    Dependências Funcionais Dependência FuncionalTransitiva Acontece quando temos três atributos X, Y e Z. Y depende funcionalmente de X (X→Y), Z depende funcionalmente de Y (Y→Z). X não depende funcionalmente de Y. Então ocorre que X produz una dependência funcional transitiva sobre Z.
  • 46.
  • 47.
    Normalização Segunda Forma Normal(2FN) Ocorre se uma tabela está na primeira forma normal (1FN) e que cada atributo que não é chave, depende de forma funcional completa das chaves primárias. 47
  • 48.
    Normalização Segunda Forma Normal(2FN) Exemplo: 48 Matrícula Código curso Nome Sobrenome Nota 1256 34 Pedro Valiente 9 1256 25 Pedro Valiente 8 5776 34 Ana Fernández 6 3491 25 Sara González 7 3491 34 Sara González 6
  • 49.
    Normalização Segunda Forma Normal(2FN) Solução: 49 Matrícul a Nome Sobrenom e 1256 Pedro Valiente 5776 Ana Fernández 3491 Sara González Matrícul a Código curso Nota 1256 34 9 1256 25 8 5776 34 6 3491 25 7 3491 34 6
  • 50.
    Normalização Segunda Forma Normal(2FN) Exercício: 50 No. vendedor Nome vendedor Numero cliente Nome Cliente Valor da Venda 1022 Mariana 1840 Melisa 13540 1022 Mariana 1834 Álvaro 10600 1022 Mariana 1856 Victoria 9700 2893 Salvador 1865 Francisco 68400 2893 Salvador 1890 Enrique 34600 2785 Adrian 1864 25000 25000 2785 Adrian 1823 Alma 35008
  • 51.
  • 52.
    Normalização Terceira Forma Normal(3FN) Ocorre quando uma tabela está na 2FN e nenhum atributo que não seja chave depende transitivamente das chaves da tabela. Nenhum atributo debe depender funcionalmente de atributos que não sejam chave. 52
  • 53.
    Normalização Terceira Forma Normal(3FN) 53 ID Nome Sobrenome Codigo_Cidade Cidade 12121349A Salvador Velasco 34 Palhoça 12121349B Pedro Valiente 34 Palhoça 3457775G Ana Fernández 47 Itajaí 5674378J Sara Crespo 47 Itajaí 3456858S Marina Serrat 08 Florianópolis Alunos
  • 54.
    Normalização Terceira Forma Normal(3FN) Solução: Alunos(#ID, Nome, Sobrenome, Cod_Cidade) Cidade(#Cod_Cidade, Cidade) 54
  • 55.
    Normalização Terceira Forma Normal(3FN) 55 ID Cidade País Idade 1 Montreal Canadá 34 2 Vancouver Canadá 25 3 Victoria Canadá 19 4 Miami EUA 22 5 Miami EUA 30 Socio O campo não chave primaria País depende transitivamente da chave ID (através do campo Cidade).
  • 56.
    Normalização Terceira Forma Normal(3FN) Solução: Socio(#ID, Idade, Cidade) Pais(#Cidade, Pais) 56
  • 57.
    Normalizar para a3FN (Ex 1) Matricula NomeColaborador CodCargo NomeCargo DescCargo SalarioCargo 1 Ana Cintra 1 Professor Professor Universitário 7500 2 Carla Mendes 2 Advogado Apoio Legal 6500 3 Angela Ribeiro 3 Secretaria Apoio Administrativo 1550 4 Rodrigo Reno 1 Professor Professor Universitário 7500 Normalizar até a 3FN (Controle de Colaboradores)
  • 58.
    Normalização (Ex 2) Normalizaraté a 3FN (Controle de Uso de Recursos) 58 CPF_Prof Nome_Prof Sala Recurso DescriçãoRecurso DataUso 1 Ana Cintra 1 R122 Camêra 1/3/2023 2 Carla Mendes 2 R200 Tablet 24/02/2023 3 Angela Ribeiro 3 R122 Camêra 25/02/2023 4 Rodrigo Reno 1 R201 Sistema de Som 2/3/2023
  • 59.
    Normalização (Ex 3) Exercício3: Normalizar até 3FN 59 CPF NomeProfessor NumeroSala Curso 1 Ana Cintra 100 101, 143, 159 2 Carla Mendes 200 201, 211,214 3 Angela Ribeiro 300 700, 722 4 Rodrigo Reno 150 101, 154, 302
  • 60.
  • 61.
    Forma Normal deBoyce-Codd (FNBC) No processo de normalização, essa forma normal deve ser aplicada às tabelas em 3FN que possuam mais de uma chave candidata (lembre-se de que a chave primária é também uma chave candidata), onde pelo menos uma delas seja composta e onde haja superposição entre elas. 61
  • 62.
    Forma Normal deBoyce-Codd (FNBC) Definimos que uma tabela está em FNBC se e somente se todos os determinantes são chaves candidatas. Ou seja, se houver algum atributo que seja determinado por outro(s) atributo(s) que não é (sejam) uma chave candidata, não estamos na FNBC. A solução é levar esses atributos para outra tabela, utilizando o conceito de decomposição sem perdas. 62
  • 63.
    Normalização Uma forma simplesde comprobar se uma relação se encontra na FNBC consiste em comprovar, que além de estar na 3FN, atende os seguintes aspectos: 1. Se não existem chaves candidatas compostas (com vários atributos), está na FNBC. 2. Se exitem chaves candidatas compostas e estas tem um elemento comum, não está na FNBC. 63
  • 64.
    Normalização Forma normal deBoyce-Codd (FNBC) Exemplo: 64 ID Curso Tutor 1 Estatística Eva 1 Matemática Andrés 3 Estatística Eva 2 Matemática Guillermo 2 Estatística Julia 4 Matemática Guillermo TUTORIAS
  • 65.
    Normalização Forma normal deBoyce-Codd (FNBC) Solução: Tutorias(#ID,#Tutor) TutorCurso(#Tutor, Curso) 65
  • 66.
  • 67.
    Discutir em Grupo Identifiqueas dependências funcionais na relação abaixo: Matrícula, nome do aluno, sexo e data de nascimento do aluno, código, nome da disciplina e carga horária de disciplina e a data da inscrição do aluno na disciplina.
  • 68.
    Codigo Nome TelefoneEndereço 1 Ary (34) 3821-0000 (34) 9979-0000 (34) 9964-0000 Av. Getúlio Vargas, 1000, apto 201 – Centro – Patos de Minas-MG 2 Tatiana (34) 3822-0000 (34) 9976-0000 Av. Brasil, 966 – Centro – Belo Horizonte-MG 3 Ana (11)3184-000 Rua Minas Gerais, 100 – Bairro Brasil – Recife-PE 4 João (31)3257-000 Praça da Liberdade, 27 – Bairro Esperança – São Paulo-SP
  • 70.
    Anomalias Problema de Inserção •Só é possível inserir um novo fornecedor quando o mesmo solicitar peças; • Só é possível inserir uma nova peça quando a mesma for solicitada por um fornecedor. Problemas de Atualização • Para atualizar o endereço do fornecedor, todos os registros desse fornecedor deverão ser atualizados; • Para atualizar o preço da peça, todos os registros dessa peça deverão ser atualizados. Problema de Exclusão • Caso sejam deletadas todas as solicitações de um fornecedor, seus dados cadastrais também serão apagados.
  • 71.
    Primeira forma normal(1NF) Primeira regra para eliminar as anomalias é: • Não devem existir colunas multivaloradas. O que é uma coluna multivalorada? É uma coluna na qual é possível armazenar- se mais de um valor por registro. Por exemplo, imagine que você tenha na sua tabela de clientes as colunas codigo, nome e telefones, preenchidos assim: Codigo Nome Telefones 1 Paulo 99567-4289, 3605-4900 2 Maria 97223-0444 3 Alan 4 Juliana 2853-0266, 96610-5480, 2410-9941
  • 72.
    Codigo Nome ID_TelefoneTelefones 1 Paulo 1 99567-4289 1 Paulo 2 3605-4900 2 Maria 1 97223-0444 4 Juliana 1 2853-0266 4 Juliana 2 96610-5480 4 Juliana 3 2410-9941 Codigo Nome Telefones 1 Paulo 99567-4289, 3605-4900 2 Maria 97223-0444 3 Alan 4 Juliana 2853-0266, 96610-5480, 2410-9941
  • 73.
    Observe que acoluna de telefones é multivalorada. Inserir, atualizar e excluir telefones nesse esquema é algo complicado de se fazer. Pesquisar por algum número de telefone específico também é algo complicado. A solução para isso é dividir em duas tabelas: Codigo Nome 1 Paulo 2 Maria 3 Alan 4 Juliana Codigo ID_Telefone Telefones 1 1 99567-4289 1 2 3605-4900 2 1 97223-0444 4 1 2853-0266 4 2 96610-5480 4 3 2410-9941 Ao eliminar-se todas as colunas multivaloradas, o banco de dados atinge uma forma estrutural denominada de primeira forma normal, ou simplesmente 1FN.
  • 74.
    Segunda forma normal(2FN) A segunda forma normal é aquela que diz que: • Todas as colunas devem ter dependência funcional com a totalidade de cada chave candidata. Na maioria dos casos por “cada chave candidata“, entenda-se por “com a chave primária“, exceto se houver mais do que uma chave candidata. Além disso, para que uma tabela esteja na segunda forma normal, ela deve estar antes de tudo, na primeira forma normal.
  • 75.
    Uma coluna estáem dependência funcional com a chave primária quando ela é determinada no domínio da aplicação por meio da chave primária. Uma coluna não tem dependência funcional com a chave primária quando ela é definida de forma independente da chave primária ou quando ela é definida a partir de alguma outra coluna que não seja a chave primária. Uma dependência funcional pode ser dita estar na totalidade da chave primária quando todos os campos da chave primária são necessários para estabelecer-se a relação de dependência. No caso de a chave primária ser composta, é possível se ter uma dependência parcial.
  • 76.
    Para dar umexemplo da 2FN, imagine que sua empresa tenha representantes comerciais atuando em clientes e queira representar a relação de quais representantes comerciais atuam em quais clientes. Nessa tabela (vamos chamar de representação), temos as colunas ID_Cliente e ID_Rep como chaves primárias e temos também as colunas Nome_Cliente, Nome_Rep, Endereço_Rep, Endereço_Cliente e Valor_Contrato.
  • 77.
    2FN ID_Cliente Nome_Cliente ID_RepNome_Rep Endereço_Rep Endereço_Cliente Valor_Contrato 12 ABC DEF 21 QWE RTY Rua X, 123 Rua H, 123 1200,00 13 ASD FGH 23 ZXC VBN Rua Z, 5678 Rua K, 5678 2340,00 Representação Observe que as colunas Nome_Rep, Endereço_Rep, Nome_cliente e Endereço_Cliente dependem da chave primária. Mas eles não dependem de toda a chave primária, cada um depende apenas de parte dela. A solução neste caso é ter uma tabela de clientes (com o endereço do cliente), uma tabela de representantes comerciais (com o endereço dele também) e deixar na tabela de atuação as respectivas chaves estrangeiras com o valor do contrato. {ID_Cliente,ID_Rep} -> Nome_Cliente, Nome_Rep, Endereço_Rep, Endereço_Cliente, Valor_Contrato
  • 78.
    Relações na 2FN ID_ClienteID_Rep Valor_Contrato 12 21 1200,00 13 23 2340,00 Representação ID_Cliente Nome_Cliente Endereço_Cliente 12 ABC DEF Rua H, 123 13 ASD FGH Rua K, 5678 Cliente ID_Rep Nome_Rep Endereço_Rep 21 QWE RTY Rua X, 123 23 ZXC VBN Rua Z, 5678 Representante
  • 79.
    Terceira forma normal(3FN) A terceira forma normal é aquela que diz que: • Todas as colunas devem ter dependência funcional com a totalidade de cada chave candidata e nada mais além do que essas chaves candidatas. Novamente, na maioria dos casos por “cada chave candidata“, entenda-se por “com a chave primária“, exceto se houver mais do que uma chave candidata. Se a única chave candidata existente for a chave primária, isso ficaria assim: Todas as colunas devem ter dependência funcional com a totalidade da chave primária e nada mais além da chave primária. Além disso, para uma tabela estar na terceira forma normal, ela deve estar primeiramente na segunda forma normal (e também na primeira). A parte de depender da totalidade de cada chave candidata é abordada na segunda forma normal, então o foco aqui é depender de nada mais que essas chaves.
  • 80.
    Por exemplo. Imaginea tabela de carros com as colunas placa (chave primária), cor, nome_proprietário, endereço_proprietário: placa cor nome_proprietário endereço_proprietário ABX-1234 Azul José Rua X, 123 NNU-5566 Verde Marcos Rua exemplo, 5678 SGH-7210 Preto Maria Avenida teste, 7743 ERT-6902 Vermelho José Rua X, 123 BGH-5431 Preto José Rua X, 123 placa -> endereço_proprietário (placa determina endereço_proprietário de forma transitiva)
  • 81.
    Observe o endereçodo proprietário – ele é uma violação da terceira forma normal. Observe que o endereço do proprietário é definido como resultado de quem é o proprietário, e não como consequência da placa do carro. Se o José mudar de endereço e atualizarmos o endereço de apenas um dos carros dele, o banco de dados ficará inconsistente (há anomalia de alteração). Se a Maria comprar mais um novo carro e adicionarmos com um outro endereço, também ficará inconsistente (anomalia de inserção).
  • 82.
    Se o Marcosvender o carro dele, o seu endereço será esquecido (anomalia de exclusão). A solução novamente, é separar em duas tabelas: placa cor id_proprietário ABX-1234 Azul 1 NNU-5566 Verde 2 SGH-7210 Preto 3 ERT-6902 Vermelho 1 BGH-5431 Preto 1 proprietário nome endereço_proprietário 1 José Rua X, 123 2 Marcos Rua exemplo, 5678 3 Maria Avenida teste, 7743
  • 83.
    Exercício 1 –Colocar na 3FN Pedido ( ID_Cliente,Nome-cliente, ISBN, Data-pedido, Título, Autor(es), Quantidade, Preço, Valor-total) ID_Cliente Nome-cliente ISBN Data_Pedido Título Autor(es) Quantidade Preço Valor-total NN -> 1FN (Agrupamentos e Multivalorados) 1FN -> 2FN (Sem Dependência Funcional Parcial)
  • 84.
    1FN (Tabela Pedidose Tabela Autores) ID_Cliente Nome-cliente ISBN Data_Pedido Título Quantidade Preço Valor-total ID_Autor ISBN Autor Pedido ( ID_Cliente, Nome-cliente, ISBN, Data-pedido, Título, Quantidade, Preço, Valor-total) Autor ( ID_Autor, ISBN, Nome_Autor)
  • 85.
    2FN (Tabela Pedido,Autor, Cliente e Livro) ID_Cliente ISBN Data_Pedido Quantidade Valor-total ISBN ID_Autor Autor Pedido ( ID_Cliente, ISBN, Data-pedido, Quantidade, Valor-total) Autor (ISBN, ID_Autor, Nome_Autor) Livro ( ISBN, Título, Preço) Cliente ( ID_Cliente, Nome_Cliente) ID_Cliente Nome_Cliente ISBN Titulo Preço
  • 86.
    3FN (Tabela Pedido,Autor, Cliente e Livro) ID_Cliente ISBN Data_Pedido Quantidade ISBN ID_Autor Autor Pedido ( ID_Cliente, ISBN, Data-pedido, Quantidade) Autor (ISBN, ID_Autor, Nome_Autor) Livro ( ISBN, Título, Preço) Cliente ( ID_Cliente, Nome_Cliente) ID_Cliente Nome_Cliente ISBN Titulo Preço
  • 87.
    Exercício 2 –Colocar na 3FN N_Pedido Codigo_Produto Nome_Produto Quantidade Valor_Unitario Subtotal 1005 1-934 ABC 5 1500,00 7500,00 1006 1-956 BCD 3 350,00 1050,00 1007 1-923 DEF 1 190,00 190,00 1008 1-908 EFG 6 980,00 5880,00 {N_Pedido, Codigo_Produto} -> Quantidade, Subtotal {Codigo_Produto} -> Nome_Produto, Valor_Unitario
  • 88.
    Exercício 2 –Colocar na 3FN N_Pedido Codigo_Produto Quantidade Subtotal 1005 1-934 5 7500,00 1006 1-956 3 1050,00 1007 1-923 1 190,00 1008 1-908 6 5880,00 {N_Pedido, Codigo_Produto} -> Quantidade, Subtotal {Codigo_Produto} -> Nome_Produto, Valor_Unitario Codigo_Produto Nome_Produto Valor_Unitario 1-934 ABC 1500,00 1-956 BCD 350,00 1-923 DEF 190,00 1-908 EFG 980,00
  • 89.
    Exercício 2 –Colocar na 3FN N_Pedido Codigo_Produto Quantidade 1005 1-934 5 1006 1-956 3 1007 1-923 1 1008 1-908 6 {N_Pedido, Codigo_Produto} -> Quantidade, Subtotal {Codigo_Produto} -> Nome_Produto, Valor_Unitario Codigo_Produto Nome_Produto Valor_Unitario 1-934 ABC 1500,00 1-956 BCD 350,00 1-923 DEF 190,00 1-908 EFG 980,00
  • 90.
    • O Subtotaldepende da multiplicação de Quant por Valor_unit, desta forma a coluna Subtotal depende de outras colunas não-chave. • Para levar esta coluna para a 3FN devemos eliminar a coluna Subtotal.
  • 91.
    Normalizar para a3FN Matricula NomeFuncionario CodCargo NomeCargo DescCargo SalarioCargo 1 Ana Cintra 1 Professor Professor Universitário 7500 2 Carla Mendes 2 Advogado Apoio Legal 6500 3 Angela Ribeiro 3 Secretaria Apoio Administrativo 1550 4 Rodrigo Reno 1 Professor Professor Universitário 7500
  • 92.
    Observamos que nestatabela existe a seguinte dependência: CodCargo => NomeCargo, DescCargo, SalarioCargo. Perceba que CodCargo não é chave primária e os atributos CargoNome, DescCargo e SalarioCargo estão dependendo dele, ou seja, existe uma dependência funcional transitiva.