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
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).
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
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.
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
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
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).
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
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
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
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
• 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.