Normalização em Banco de Dados Relacionais

robertaifbaiano 35 views 50 slides Feb 29, 2024
Slide 1
Slide 1 of 50
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50

About This Presentation

Normalização em Banco de Dados.


Slide Content

Normalização

Formas Normais
Dado um esquema de relação, precisamos decidir se ele é um bom projeto
ou se precisamos decompô-lo em relações menores. Tal decisão deve ser
conduzida por um entendimento de quais problemas (se houver) surgem a
partir do esquema corrente.
Para fornecer tal condução, diversas formas normais foram propostas. Se
um esquema de relação está em uma dessas formas normais, sabemos
que certos tipos de problemas não podem surgir.

2

Formas Normais
As Formas Normais são uma série de procedimentos aplicados em um
banco de dados para garantir que as suas tabelas estejam bem
estruturadas e não contenham nenhum tipo de anomalia, seja de inclusão,
modificação ou exclusão.

3

Normalização
Foi criado por Codd em 1972
Aplica uma série de testes sobre um esquema de relação para certificar se ele
satisfaz uma certa forma normal
Inicialmente, Codd propôs 3 formas normais: 1FN, 2FN e 3FN



4

Normalização
Posteriormente, Boyce e Codd definiram uma 3FN mais forte – a FNBC (Forma
Normal de Boyce-Codd)
Essas formas se baseiam na análise das dependências funcionais
Duas outras formas – a 4FN e 5FN – foram propostas, baseadas na análise de
dependências multivaloradas e dependências de junção




5

Normalização
Objetivo
Gerar um conjunto de esquemas de relações que permita:
Armazenar informações sem redundância desnecessária, e
Recuperar informações eficientemente.



6

Normalização
Em resumo…
Evita anomalias de atualização e redundâncias no projeto do BD
Permite representar eficientemente os dados do mundo real, tornando o
modelo mais estável e de fácil manutenção




7

Aplicar normalização até qual forma
normal?
Na prática o processo de normalização encerra-se na 3FN ou FNBC


8

1ª Forma Normal (1FN)
Uma tabela está na 1FN quando:
Os domínios de todas as suas colunas são atômicos, ou seja, a tabela não
pode ter atributo composto ou multivalorado.

9

1ª Forma Normal (1FN) - Exemplo

10

Atributo Composto:
Decompor o atributo composto em atributos simples e o colocá-lo:
Na mesma tabela (indicando quando o atributo composto é monovalorado).
Ex:
Paciente (CPF, Nome, Endereco(Logradouro, CEP)) (não está na 1FN)
Paciente (CPF, Nome, Logradouro, CEP) (está na 1FN)

11
Como transformar uma tabela para a 1FN

Atributo Composto:
Em uma tabela relacionada (indicado quando o atributo composto é
multivalorado). EX:
Paciente (CPF, Nome, {Telefone(DDD, Prefixo, Sufixo)}) (não está na 1FN)
Paciente (CPF, Nome) (está na 1FN)
PacienteTelefone (CPF, DDD, Prefixo, Sufixo) (está na 1FN)
CPF referencia Paciente

12
Como transformar uma tabela para a 1FN

Atributo Multivalorado:
Na mesma tabela (indicado quando a quantidade de valores é pequena
e conhecia a priori).

EX:
Paciente (CPF, Nome, {GrausDeLente}) (não está na 1FN)
Paciente (CPF, Nome, GrauLenteE, GrauLenteD) (está na 1FN)

13
Como transformar uma tabela para a 1FN

Atributo Multivalorado:
Em uma tabela relacionada (indicado quando a multivaloração é
desconhecida ou grande). EX:
Paciente (CPF, Nome, {ImagemRX}) (não está na 1FN)
Paciente (CPF, Nome) (está na 1FN)
PacienteRX (CPF, ImagemRX) (está na 1FN)
CPF referencia Paciente



14
Como transformar uma tabela para a 1FN

15

16

Está na 1FN?
17

Segunda Forma Normal (2FN)
Uma tabela está na 2FN quando:
1.Está na 1FN,
2.A chave primária é composta e
3.Todas as colunas que não participam da chave primária são dependentes
de todas as colunas que compõem a chave primária.
Isto é, não existe Dependência Funcional Parcial.


18

19

20
Como transformar para a 2FN?
1.Retira-se a(s) coluna(s) com DFP da tabela original
2.A partir dessa(s) coluna(s) retirada(s), cria-se uma ou mais tabelas
compostas pela parte da chave primária e suas colunas dependentes
3.A parte da chave primária que gerou a dependência será a nova chave
primária da tabela criada.

21
Como transformar para a 2FN?
EX:
Consulta(CPF, CRM, NomeP, NomeM, Especialidade, Tipo, Valor) (não 2FN)
Paciente (CPF, NomeP) (está na 2FN)
Medico (CRM, NomeM, Especialidade) (está na 2FN)
Consulta (CPF, CRM, Tipo, Valor) (está na 2FN)
CPF referencia Paciente
CRM referencia Medico

22

23

24
Exemplo
Boletim (NumAluno, CodDisciplina, NumeroProva, Nota, DataProva,
NomeAluno, EndereçoAluno, NomeDisciplina)
Está na 1FN
CodDisciplina → NomeDisciplina
NumAluno → NomeAluno

25
Exemplo
Aluno (NumAluno, NomeAluno, EnderecoAluno)
Disciplina(CodDisciplina, NomeDisciplina)
Boletim(NumAluno, CodDisciplina, NumeroProva, Nota, DataProva)

Agora está na 2FN!

26
3ª Forma Normal (3FN)
Uma tabela está na 3FN quando:
1.Está na 2FN
2.Não contém Dependência Funcional Transitiva, sendo que todas as
colunas que não participam da chave primária devem ser exclusivamente
dependentes desta

27

28
Como transformar para a 3FN?
1.Retira-se a(s) coluna(s) com DF Transitiva da tabela original
2.A partir dessa(s) coluna(s) retirada(s), cria-se uma ou mais tabelas
compostas pela coluna determinante (como chave primária) + suas
colunas dependentes

29
Como transformar para a 3FN?
Verifica-se a 2FN para cada nova tabela.
Ex:
Consulta (CPF, CRM, Tipo, Valor) (não está na 3FN)
Consulta (CPF, CRM, Tipo) (está na 3FN)
Tipo referencia ConsultaTipo
ConsultaTipo (Tipo, Valor) (está na 3FN)

OBS: Além de não conter DFT, as tabelas na 3FN não devem possuir colunas
com valores calculados (derivados). Ex: coluna subtotal.

30

31

32
Forma Normal Boyce-Codd (FNBC)
É um refinamento da 3FN (usada em casos particulares)
Uma relação em FNBC é uma forma mais rigorosa do que a 3FN
Uma relação em FNBC está de acordo com a 3FN, mas o contrário não é
verdade

33
Forma Normal Boyce-Codd (FNBC)
Uma tabela está na FNBC quando:
1.Está na 3FN e
2.Todos os determinantes da tabela são chaves candidatas

34

35
Como transformar para a FNBC
Como transformar uma tabela para a FNBC
1.Decompor a tabela (em duas ou mais), separando da tabela original as
colunas que são determinantes e não são chaves candidatas, e as colunas
dependentes destes determinantes
2.O determinante que não é chave candidata na tabela original deve fazer
parte das chaves primárias das novas tabelas
3.Verifica-se a 3FN para cada nova tabela.

36
Como transformar para a FNBC
Exemplo: Avaliação (Aluno, Disciplina, Professor, Media) (está 3FN, não FNBC)
Supondo que cada aluno tem um único professor por disciplina,
Cada professor só ensina uma única disciplina e
Uma disciplina pode ser ministrada por vários professores

37
Como transformar para a FNBC
Dependências Funcionais:
Aluno, Disciplina → Professor, Media
Aluno, Professor → Disciplina, Media
Professor → Disciplina (Professor é determinante e não é chave candidata)

Então:
ProfDisciplina (Professor, Disciplina) (está na FNBC)
ProfAluno (Professor, Aluno, Media) (está na FNBC)

38

39

40

Exemplo 1
vendedor (nro_vend, nome_vend, sexo_vend,{ cliente (nro_cli, nome_cli, end_cli ) } )
As seguintes dependências funcionais devem ser garantidas na normalização:
• nro_vend → nome_vend, sexo_vend
• nro_cli → nome_cli, end_cli
Observação adicional:
• um vendedor pode atender diversos clientes, e um cliente pode ser atendido
por diversos vendedores

41

Exemplo 1 - Resposta
Vendedor (nro_vend, nome_vend, sexo_vend,{ cliente (nro_cli, nome_cli, end_cli ) } )
1FN
Cliente(nro_cli, nome_cli, end_cli)
Vendedor(nro_vend, nome_vend, sexo_vend)
2FN OK (não há dependência parcial)
3FN OK (não há dependencia transitiva)
Relação N:N => Clliente_Vendedor(nro_cli, nro_vend)
42

Exemplo 2
43

Exemplo 2 - Resposta
Pedidos(nr_pedido, data_pedido, id_cliente, nome_cliente, {produto(cod_prod,
nome_prod, quant, vl_unit)})
1FN
Produto(cod_prod, nome_prod, quant, vl_unit)
Pedidos(nr_pedido, data_pedido, id_cliente, nome_cliente)

2FN - OK (não há dependência parcial pois a chave primária não é composta)
44

Exemplo 2 - Resposta
1FN
Produto(cod_prod, nome_prod, quant, vl_unit)
Pedidos(nr_pedido, data_pedido, id_cliente, nome_cliente)

2FN - OK (não há dependência parcial pois a chave primária não é composta)

3FN - há dependência transitiva de nome_cliente para id_cliente
Produto(cod_prod, nome_prod, quant, vl_unit)
Pedidos(nr_pedido, data_pedido, id_cliente)
id_cliente referencia Cliente
Cliente(id_cliente, nome_cliente)

45

Exemplo 3
VENDA_CARRO (Num_carro, Data_venda, Num_vendedor, Comissao_porc,
Desconto_tempo)
Suponha que um carro possa ser vendido por vários vendedores e, portanto,
(Num_carro, Num_vendedor) é a chave primária. Dependências adicionais são
Data_venda → Desconto_tempo e Num_vendedor → Comissao_porc
Com base na chave primária dada, essa relação está na 1FN, 2FN ou 3FN?
Normalize-a até a 3FN.
46

Exemplo 3 - Resposta
VENDA_CARRO (Num_carro, Data_venda, Num_vendedor, Comissao_porc,
Desconto_tempo)
1FN OK (os atributos são atômicos)

2FN há dependência parcial de Comissão_porc para NumVendedor
Vendedor(NumVendedor, Comissao_porc)
VendaCarro(NumCarro, Data_Venda, Desconto_tempo)
47

Exemplo 3 - Resposta
1FN OK (os atributos são atômicos)

2FN há dependência parcial de Comissão_porc para NumVendedor
Vendedor(NumVendedor, Comissao_porc)
VendaCarro(NumCarro, Data_Venda, Desconto_tempo)


48

Exemplo 3 - Resposta
3FN há dependência transitiva de Desconto_tempo para Data_Venda
Vendedor(NumVendedor, Comissao_porc)
VendaCarro(NumCarro, Data_Venda)
Data_Venda referencia Desconto
Desconto(Data_Venda, Desconto_tempo)
49

Bibliografia
Elmasri, R. Navathe, S. B., Sistemas de Banco de Dados, 6ª Ed. Pearson
Addison-Wesley, 2011.
C. J. Date. Introdução a sistemas de banco de dados. tradução de Daniel
Vieira. 8ª Ed. Rio de Janeiro: Elsevier, 2003.

50