Logo Passei Direto
Buscar
Material

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

A6 – NORMALIZAÇÃO
MODELAGEM DE DADOS
Cátia Garcia Morais
catia.gm@ufpr.br
http://people.ufpr.br/~catia.gm
[UFPR] Tecnologia em Análise e Desenvolvimento de Sistemas (2011/1)
Roteiro de Aula
•Projeto do Banco de Dados
•Estratégias de Modelagem de Dados
• Processo de Engenharia Reversa
• Tabela Não Normalizada
• Aplicar formais normais (Normalização)
• 1ª Forma Normal
• 2ª Forma Normal
• 3ª Forma Normal
• Mapear de Relações para DER
[MODDAD] A6 – Normalização 2
[MODDAD] A6 – Normalização 3
Projeto do Banco de Dados
• ORIGEM: Modelagem de Dados
• descrição formal da estrutura de um banco de dados
• Projeto do Banco de Dados
• Três níveis de abstração
• Realizar o mapeamento entre os 3 modelos
1) Modelo Conceitual (DER)
Entidade-atributos, relacionamentos-cardinalidade
2) Modelo Lógico (Esquema do BD)
Relações e Restrições de Integridade (PK, FK, dom(A))
3) Modelo Físico (Script do BD)
Tabelas e Restrições
• Fonte para construção do DER: minimundo
• Descrição textual formal dos dados
• Estratégia que parte do conhecimento que as pessoas
possuem sobre o novo sistema sendo modelado
• Porém, os dados podem estar em:
• Sistemas legados em bancos não relacionais
• Banco relacional, mas não documentado
• Ideia: aplicar engenharia reversa
• Estratégia de modelagem em que se parte de descrições
de dados existentes (arquivos e/ou documentos) até
atingir o modelo conceitual (DER)
[MODDAD] A6 – Normalização 4
Estratégias de Modelagem
• Passo 1: parte da representação da descrição
de cada arquivo/documento existente na
forma de um esquema de uma tabela
relacional não normalizada (ÑN)
[MODDAD] A6 – Normalização 5
Processo de Engenharia Reversa
modelo
relacional
esquema de
arquivo/documento
normalização
• Passo 2: aplicar o processo de
normalização a este esquema de
tabela não normalizada
• Eliminar redundâncias e também
desperdício de armazenamento
• Obtenção do modelo ER
[MODDAD] A6 – Normalização 6
Documento Exemplo para Normalização
RELATÓRIO DE ALOCAÇÃO A PROJETO
CÓDIGO DO PROJETO:
LSC001 TIPO: Novo Desenv.
DESCRIÇÃO: Sistema de Estoque
CÓDIGO DO
EMPREGADO
NOME CATEGORIA
FUNCIONAL
SALÁRIO DATA DE INÍCIO
NO PROJETO
TEMPO
ALOCADO AO
PROJETO
2146 João A1 4 1/11/91 24
3145 Sílvio A2 4 2/10/91 24
6126 José B1 9 3/10/92 18
1214 Carlos A2 4 4/10/92 18
8191 Mário A1 4 1/11/92 12
CÓDIGO DO PROJETO:
PAG02 TIPO: Manutenção
DESCRIÇÃO: Sistema de RH
CÓDIGO DO
EMPREGADO
NOME CATEGORIA
FUNCIONAL
SALÁRIO DATA DE INÍCIO
NO PROJETO
TEMPO
ALOCADO AO
PROJETO
8191 Mário A1 4 1/05/93 12
4112 João A2 4 4/01/91 24
6126 José B1 9 1/11/92 12
O processo de
normalização pode ser
executado sobre
qualquer tipo de
representação de
dados: arquivo de
computador, lay-out de
relatório/formulário ou
mesmo de uma tela.
Sistema de
Gerência de
Projetos
[MODDAD] A6 – Normalização 7
Documento Exemplo para Normalização
RELATÓRIO DE ALOCAÇÃO A PROJETO
CÓDIGO DO PROJETO:
LSC001 TIPO: Novo Desenv.
DESCRIÇÃO: Sistema de Estoque
CÓDIGO DO
EMPREGADO
NOME CATEGORIA
FUNCIONAL
SALÁRIO DATA DE INÍCIO
NO PROJETO
TEMPO
ALOCADO AO
PROJETO
2146 João A1 4 1/11/91 24
3145 Sílvio A2 4 2/10/91 24
6126 José B1 9 3/10/92 18
1214 Carlos A2 4 4/10/92 18
8191 Mário A1 4 1/11/92 12
CÓDIGO DO PROJETO:
PAG02 TIPO: Manutenção
DESCRIÇÃO: Sistema de RH
CÓDIGO DO
EMPREGADO
NOME CATEGORIA
FUNCIONAL
SALÁRIO DATA DE INÍCIO
NO PROJETO
TEMPO
ALOCADO AO
PROJETO
8191 Mário A1 4 1/05/93 12
4112 João A2 4 4/01/91 24
6126 José B1 9 1/11/92 12
Descrição:
Para cada projeto, são
informados o código, a
descrição e o tipo de
projeto, bem como os
empregados que atuam
no projeto. Já para cada
empregado do projeto,
são informados o seu
número, nome,
categoria funcional e
salário, bem como a
data em que foi alocado
ao projeto e o tempo
pelo qual foi alocado ao
projeto.
• Transformar a descrição do documento ou
arquivo a ser normalizado em um esquema de
tabela relacional
[MODDAD] A6 – Normalização 8
[P1] Representação na forma de tabela ÑN
CódProj Tipo Descr Emp
CodEmp Nome Cat Sal DataIni TempAl
LSC001 Novo
Desenv.
Sistema
de
Estoque
2146 João A1 4 1/11/91 24
3145 Sílvio A2 4 2/10/91 24
6126 José B1 9 3/10/92 18
1214 Carlos A2 4 4/10/92 18
8191 Mário A1 4 1/11/92 12
PAG02 Manuten
ção
Sistema
de RH
8191 Mário A1 4 1/05/93 12
4112 João A2 4 4/01/91 24
6126 José B1 9 1/11/92 12
tabela não normalizada (ÑN)
• Esta tabela é dita não normalizada (ÑN) pois possui tabela
aninhada, grupo repetido, coluna multivalorada ou ainda
coluna não atômica
[MODDAD] A6 – Normalização 9
Representação na forma de tabela ÑN
CódProj Tipo Descr Emp
CodEmp Nome Cat Sal DataIni TempAl
LSC001 Novo
Desenv.
Sistema
de
Estoque
2146 João A1 4 1/11/91 24
3145 Sílvio A2 4 2/10/91 24
6126 José B1 9 3/10/92 18
1214 Carlos A2 4 4/10/92 18
8191 Mário A1 4 1/11/92 12
PAG02 Manuten
ção
Sistema
de RH
8191 Mário A1 4 1/05/93 12
4112 João A2 4 4/01/91 24
6126 José B1 9 1/11/92 12
tabela
aninhada
• A tabela ÑN pode ser descrita pelo seguinte esquema
de tabela relacional:
• Recordar: projeto de BD passa por três níveis de abstração
1) Modelo Conceitual (DER)
2) Modelo Lógico (Esquema do BD – Relações e Restrições de
Integridade)
3) Modelo Físico (Script do BD – Tabelas e Restrições)
[MODDAD] A6 – Normalização 10
Representação na forma de tabela ÑN
PROJETO (@codProj, descrição, tipo,
(@codEmp, nome, cat, sal, dtIni, tAloc)
)
[MODDAD] A6 – Normalização 11
Outro exemplo: arquivo Alunos
type reg_aluno= record
cod_al: integer;
nome_al: char_60;
ingressos_cursos_al: array [1..10] of record
cod_curso: integer;
semestre_ingresso: integer end;
disciplinas_cursadas_al: array [0..200] of record
cod_disc: integer;
semestres_cursados: array [1..20] of record
semestre_disc: integer;
nota_disc: integer end
end
end;
arq_alunos= file of reg_aluno;
Descrição:
O registro do aluno contém seu código, nome, uma lista de ingressos em cursos e outra
de disciplinas cursadas. Para cada ingresso em curso é registrado o código de curso e o
semestre de ingresso. Para cada disciplina cursada é informado seu código, e os
semestres em que cursou. Para cada semestre é informado o semestre e anota obtida.
• A tabela ÑN pode ser descrita pelo seguinte esquema
de tabela relacional:
[MODDAD] A6 – Normalização 12
Representação na forma de tabela ÑN
ARQ_ALUNOS (@codAlu, nomeAlu,
(@codCur, semIng),
(@codDisc,
(@semDiscCursada, notaDisc)
)
)
[MODDAD] A6 – Normalização 13
Outro Exemplo: Formulário de Pedido
Matrícula Nome Nome CPF End CódigoQtde Nome V.Unit V. Total
12 12 João Maria 123 E1 01/11/2010 123 1 Pr123 1,23 1,23
234 1 Pr234 2,34 2,34
456 3 Pr456 1,56 7,02
34 15 Ana Daniel 345 E2 12/11/2010 567 1 Pr567 5,67 5,67
234 1 Pr234 2,34 2,34
56 19 Pedro Isa 567 E3 21/01/2011 765 1 Pr765 7,65 7,65
ClientePedido Data
Pedido
Funcionário Produtos
[MODDAD] A6 – Normalização 14
Representação na forma de tabela ÑN
Tabela ÑN:
PEDIDO (@numPed, matFunc, nomeFunc, nomeCli,
CPFCli, endCli, dtPed,
(@codProd, qtd, nomeProd, vlrUnit, vlrTot)
)
• Tabelas em BD relacional podem sofrer com
problemas de desempenho, integridade e
facilidade de manutenção
• BD em uma única e grande tabela
• Problemas:
• Redundância, o que pode gerar inconsistência nos valores
dos dados e também desperdício de armazenamento
• Muito tempo gasto em buscas
• Ideia de Solução? Desmembrar em tabelas menores
• Aplicar normalização: analisar interdependências entre
atributos individuais associados a essas tabelas
[MODDAD] A6 – Normalização 15
Normalização
[MODDAD] A6 – Normalização 16
Normalização - Passos
esquema de
arquivo
ou
documento
Representação
como tabela
ÑN esquema não
normalizado
Passagem
a 1FN
esquema
na 1FN
Passagem
a 2FN
esquema
na 2FN
Passagem
a 3FN
Passagem
a 4FN
esquema
na 3FN
esquema relacional
normalizado
1 – tabela
não
normalizada
2 – aplicar
formas
normais...
• Um projeto bom e bem elaborado de um
modelo conceitual resultará em bancos de
dados que já estão normalizados ou que
podem ser facilmente normalizados
(Teorey et all, 2007)
• Projetista experiente poderá produzir diretamente
um modelo normalizado
[MODDAD] A6 – Normalização 17
Normalização - Observação
• A partir do esquema relacional correspondente
(ÑN), inicia-se a normalização
• Baseia-se no conceito de forma normal
• Regra que deve ser obedecida por uma tabela para
que seja considerada “bem projetada”
• Há diversas formas normais, cada vez mais rígidas,
para verificar tabelas relacionais.
• primeira forma normal (1FN),
• segunda forma normal (2FN),
• terceira forma normal (3FN),
• ...
[MODDAD] A6 – Normalização 18
[P2] Normalização
• Para chegar a 1FN
• Construa uma tabela para cada tabela aninhada
1. uma tabela referente a própria tabela que está
sendo normalizada (tabela externa) e
2. uma tabela para cada tabela aninhada
[MODDAD] A6 – Normalização 19
Passagem à primeira forma normal (1FN)
primeira forma normal (1FN)
=
diz-se que uma tabela está na primeira
forma normal, quando ela não contém
tabelas aninhadas
1) criar tabela referente a tabela externa
[MODDAD] A6 – Normalização 20
Passagem à primeira forma normal (1FN)
ÑN:
(@CodProj, Tipo, Descr,
(@CodEmp, Nome, Cat, Sal, DataIni, TempAl))
1FN:
(CodProj, Tipo, Descr)
2) criar uma tabela composta pelas
seguintes colunas:
a) a chave primária de cada uma das tabelas
na qual a tabela em questão está aninhada;
b) as colunas da própria tabela aninhada.
[MODDAD] A6 – Normalização 21
Passagem à primeira forma normal (1FN)
ÑN:
(@CodProj, Tipo, Descr,
(@CodEmp, Nome, Cat, Sal, DataIni, TempAl))
1FN:
(CodProj, Tipo, Descr)
(CodProj, CodEmp, Nome, Cat, Sal, DataIni,TempAl)
c) Definir, na 1FN, as chaves primárias das
tabelas que correspondem a tabelas
aninhadas.
[MODDAD] A6 – Normalização 22
Passagem à primeira forma normal (1FN)
ÑN:
(@CodProj, Tipo, Descr,
(@CodEmp, Nome, Cat, Sal, DataIni, TempAl))
Tabela de nível mais externo:
basta transcrever a chave primária
Tabela de nível mais interno:
Se há repetições distintas, basta acrescentar
a chave primária da tabela aninhada1FN:
(@CodProj, Tipo, Descr)
(@CodProj, @CodEmp, Nome, Cat, Sal, DataIni, TempAl)
• Representação no DER
[MODDAD] A6 – Normalização 23
Tabelas na primeira forma normal (1FN)
1FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj, @CodEmp, Nome, Cat, Sal, DataIni, TempAl)
ÑN:
Proj (@CodProj, Tipo, Descr,
(@CodEmp, Nome, Cat, Sal, DataIni, TempAl)
)
PROJETO PROJEMPpossui1 N
[MODDAD] A6 – Normalização 24
Tabelas (com dados) na 1FN
CódProj Tipo Descr
LSC001 Novo Desenv. Sistema de Estoque
PAG02 Manutenção Sistema de RH
CódProj CodEmp Nome Cat Sal DataIni TempAl
LSC001 2146 João A1 4 1/11/91 24
LSC001 3145 Sílvio A2 4 2/10/91 24
LSC001 6126 José B1 9 3/10/92 18
LSC001 1214 Carlos A2 4 4/10/92 18
LSC001 8191 Mário A1 4 1/11/92 12
PAG02 8191 Mário A1 4 1/05/93 12
PAG02 4112 João A2 4 4/01/91 24
PAG02 6126 José B1 9 1/11/92 12
Proj:
ProjEmp:
• Outro exemplo: arquivo Alunos
[MODDAD] A6 – Normalização 25
Tabelas na primeira forma normal (1FN)
ÑN:
Arq-Alunos (@Cod-Al, Nome-Al,
(@Cod-Curso, Sem-Ingresso)
(@Cod-Disc,
(@Sem-Disc-Cursada, Nota-Disc)))
1FN:
Aluno (@Cod-Al, Nome-Al)
AlunoCurso (@Cod-Al, @Cod-Curso, Sem Ingresso)
AlunoDisc (@Cod-Al, @Cod-Disc)
AlunoDiscSem (@Cod-Al, @Cod-Disc, @Sem-Disc-Cursada, Nota-Disc)
[MODDAD] A6 – Normalização 26
1FN:
PEDIDO (@numPed, matFunc, nomeFunc, nomeCli, CPFCli, endCli, dtPed)
ITEM_PEDIDO(@numPed, @codProd, qtde, nomeProd, vlrUnitProd, vlrTotal)
Matrícula Nome Nome CPF End CódigoQtde Nome V.Unit V. Total
12 12 João Maria 123 E1 01/11/2010 123 1 Pr123 1,23 1,23
234 1 Pr234 2,34 2,34
456 3 Pr456 1,56 7,02
34 15 Ana Daniel 345 E2 12/11/2010 567 1 Pr567 5,67 5,67
234 1 Pr234 2,34 2,34
56 19 Pedro Isa 567 E3 21/01/2011 765 1 Pr765 7,65 7,65
ClientePedido Data
Pedido
Funcionário Produtos
ÑN:
PEDIDO (@numPed, matFunc, nomeFunc, nomeCli, CPFCli, endCli, dtPed,
(@codProd, qtde, nomeProd, vlrUnitProd, vlrTot) )
PEDIDO ITEM-PEDIDOpossui1 N
• Para entender 2FN e 3FN é necessário compreender o
conceito de dependência funcional
• Um atributo ou conjunto de atributos A é dependente
funcional de outro atributo B da mesma tabela, se a cada
valor de B existir, nas linhas da tabela em que aparece, um
único valor de A. Assim, A depende funcionalmente de B
[MODDAD] A6 – Normalização 27
Outras Formas Normais
… Código … Salário …
... E1 ... 10 ...
... E3 ... 10 ...
... E1 ... 10 ...
... E2 ... 5 ...
... E3 ... 10 ...
... E2 ... 5 ...
... E1 ... 10 ...
Salário depende
funcionalmente do
código do
empregado.
Código Salário
AB
• Na ocorrência de chave primária concatenada
(mais de um atributo), a Dependência
Funcional pode ser:
• Total: a cada valor completo da chave está
associado um valor de atributo
• Parcial: quando o valor do atributo depende de
parte da chave
• Observar cada entidade/tabela com chave
primária concatenada e analisar se existe
algum atributo (ou conjunto de atributos) com
dependência parcial
[MODDAD] A6 – Normalização 28
Outras Formas Normais
• Exemplo:
• Dados referentes a empregados (Nome, Cat e Sal) são
redundantes para os empregados que trabalham em
mais de um projeto
[MODDAD] A6 – Normalização 29
Outras Formas Normais
CódProj CodEmp Nome Cat Sal DataIni TempAl
LSC001 2146 João A1 4 1/11/91 24
LSC001 3145 Sílvio A2 4 2/10/91 24
LSC001 6126 José B1 9 3/10/92 18
LSC001 1214 Carlos A2 4 4/10/92 18
LSC001 8191 Mário A1 4 1/11/92 12
PAG02 8191 Mário A1 4 1/05/93 12
PAG02 4112 João A2 4 4/01/91 24
PAG02 6126 José B1 9 1/11/92 12
ProjEmp:
ProjEmp (@CodProj, @CodEmp, Nome, Cat, Sal,
DataIni, TempAl)
• Assim:
[MODDAD] A6 – Normalização 30
Segunda Forma Normal (2FN)
segunda forma normal (2FN)
=
uma tabela encontra-se na segunda forma
normal, quando, além de estar na 1FN,
não contém dependências parciais
dependência parcial
=
uma dependência (funcional) parcial ocorre quando uma coluna
depende apenas de parte de uma chave primária composta
dependência parcial
=
uma dependência (funcional) parcial ocorre quando uma coluna
depende apenas de parte de uma chave primária composta
1FN:
ProjEmp (@CodProj,@CodEmp, Nome, Cat, Sal, DataIni, TempAl)
• 1) Copiar para a 2FN cada tabela que tenha
chave primária simples
• OBSERVAÇÃO: Toda tabela na 1FN que possui apenas
uma coluna como chave primária já está na 2FN
[MODDAD] A6 – Normalização 31
Passagem da 1FN à 2FN
1FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj, @CodEmp, Nome, Cat, Sal, DataIni, TempAl)
2FN:
Proj (@CodProj, Tipo, Descr)
• 2) Para cada tabela com chave primária composta e
com pelo menos uma coluna não chave
• Para cada coluna não chave, fazer a pergunta: “a coluna
depende de toda a chave ou de apenas parte dela?”
• Se sim, as colunas permanecem na tabela original
• Se não, criar outra tabela na 2FN com parte da chave e as colunas da
qual dependem
[MODDAD] A6 – Normalização 32
Passagem da 1FN à 2FN
1FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj, @CodEmp, Nome, Cat, Sal, DataIni, TempAl)
2FN:
ProjEmp (@CodProj, @CodEmp, DataIni, TempAl)
Emp (@CodEmp, Nome, Cat, Sal)
• Representação no DER
[MODDAD] A6 – Normalização
33
Tabelas na segunda forma normal (2FN)
2FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj,@CodEmp, DataIni, TempAl)
Emp (@CodEmp, Nome, Cat, Sal)
1FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj, @CodEmp, Nome, Cat, Sal, DataIni, TempAl)
PROJETO PROJEMPpossui1 N alocado 1N EMPREGADO
[MODDAD] A6 – Normalização 34
Tabelas (com dados) na 2FN
CódProj Tipo Descr
LSC001 Novo Desenv. Sistema de Estoque
PAG02 Manutenção Sistema de RH
Proj:
CodEmp Nome Cat Sal
2146 João A1 4
3145 Sílvio A2 4
1214 Carlos A2 4
8191 Mário A1 4
4112 João A2 4
6126 José B1 9
Emp:
CódProj CodEmp DataIni TempAl
LSC001 2146 1/11/91 24
LSC001 3145 2/10/91 24
LSC001 6126 3/10/92 18
LSC001 1214 4/10/92 18
LSC001 8191 1/11/92 12
PAG02 8191 1/05/93 12
PAG02 4112 4/01/91 24
PAG02 6126 1/11/92 12
ProjEmp:
[MODDAD] A6 – Normalização 35
Outro Exemplo na 2FN
1FN
PEDIDO (@numPed, matFunc, nomeFunc, nomeCli, CPFCli,
endCli, dtPed)
ITEM-PEDIDO(@numPed, @codProd, descProd, quant,
vlrUnitProd, vlrTotProd)
2FN
PEDIDO (@numPed, matFunc, nomeFunc, nomeCli, CPFCli,
endCli, dtPed)
ITEM-PEDIDO(@numPed, @codProd, quant, vlrTotProd)
PRODUTO(@codProd, descProd, vlrUnitProd)
PEDIDO ITEM-PEDIDOpossui1 N PRODUTOéUm 1N
• Exemplo: Se salário (coluna Sal) é determinado pela
categoria funcional (coluna Cat). Salário que é pago a uma
categoria funcional é armazenado tantas vezes quantos empregados
possui a categoria funcional
[MODDAD] A6 – Normalização 36
Terceira Forma Normal (3FN)
terceira forma normal (3FN)
=
uma tabela encontra-se na terceira forma
normal, quando, além de estar na 2FN, não
contém dependências transitivas
dependência transitiva
=
uma dependência (funcional) transitiva ocorre quando uma
coluna, além de depender da chave primária, depende de
outra(s) coluna(s) da tabela
dependência transitiva
=
uma dependência (funcional) transitiva ocorre quando uma
coluna, além de depender da chave primária, depende de
outra(s) coluna(s) da tabela
2FN:
Emp (@CodEmp, Nome, Cat, Sal)
• Dividir em tabelas de forma a eliminar as
dependências transitivas
• 1) Colunas que dependem da chave primária
permanecem na tabela original
• 2) Colunas que dependem de coluna não chave vão
para outra tabela
[MODDAD] A6 – Normalização 37
Passagem da 2FN à 3FN
2FN:
Emp (@CodEmp, Nome, Cat, Sal)
3FN:
Emp (@CodEmp, Nome, Cat)
Cat (@Cat, Sal)
[MODDAD] A6 – Normalização 38
Tabelas na terceira forma normal (3FN)
3FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj, @CodEmp, DataIni, TempAl)
Emp (@CodEmp, Nome, Cat)
Cat (@Cat, Sal)
2FN:
Proj (@CodProj, Tipo, Descr)
ProjEmp (@CodProj,@CodEmp, DataIni, TempAl)
Emp (@CodEmp, Nome, Cat, Sal)
[MODDAD] A6 – Normalização 39
Outro Exemplo na 3FN
2FN
PEDIDO (@numPed, matFunc, nomeFunc, nomeCli, CPFCli,
endCli, dtPed)
ITEM-PEDIDO(@numPed, @codProd, quantProd, vlrTotProd)
PRODUTO(@codProd, descProd, vlrUnitProd)
3FN
PEDIDO (@numPed, dtPed, CPFcli, matFunc)
CLIENTE(@CPFcli, nomeCliente, endCli)
FUNCIONÁRIO(@matFunc, nomeFunc)
ITEM-PEDIDO(@numPed, @codProd, quantProd, vlrTotProd)
PRODUTO(@codProd, descProd, vlrUnitProd)
[MODDAD] A6 – Normalização 40
Representação no DER
• 6ª Lista de Exercícios
[MODDAD] A6 – Normalização 41
Exercícios

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?