Banco de Dados
Introdução a BD
Prof. Marcelo Iury de Sousa Oliveira
marceloiury@gmail.com
http://sites.google.com/site/marceloiury
Banco de Dados
Aula 4 – Normalização
Normalização
Normalização
Normalização
aluno(matricula, nome, cod_disciplina, nome_disciplina, nota)
Matricula | Nome | Cod_disciplina | Nome_disciplina | nota |
00012233 | Val Donato | D01 | Banco de Dados I | 8,5 |
00223345 | Seu Pereira | D02 | Banco de Dados II | 9,0 |
00012233 | Val Donato | D03 | Sistemas Distribuídos | 8,0 |
00223888 | Chico Cesar | D02 | Banco de Dados II | 9,0 |
Normalização
Normalização
Matricula | Nome | Cod_disciplina | Nome_disciplina | nota |
00012233 | Val Donato | D01 | Banco de Dados I | 8,5 |
00223345 | Seu Pereira | D02 | Banco de Dados II | 9,0 |
00012233 | Val Donato | D03 | Sistemas Distribuídos | 8,0 |
00223888 | Chico Cesar | D02 | Banco de Dados II | 9,0 |
Matricula | Nome |
00012233 | Val Donato |
00223345 | Seu Pereira |
00223888 | Chico Cesar |
Matricula | Cod_disciplina | nota |
00012233 | D01 | 8,5 |
00223345 | D02 | 9,0 |
00012233 | D03 | 8,0 |
00223888 | D02 | 9,0 |
Cod_disciplina | Nome_disciplina |
D01 | Banco de Dados I |
D02 | Banco de Dados II |
D03 | Sistemas Distribuídos |
Normalização
Normalização
Normalização
Formas normais
Formas Normais
5ª Forma Normal |
4ª Forma Normal |
Boyce-Codd Forma Normal |
3ª Forma Normal |
2ª Forma Normal |
1ª Forma Normal |
}
}
}
Trivial. Mamão com açúcar!
Você Consegue, Joseth Klimber
Corrigindo coisas esquisitas
Dependência funcional
Dependência Funcional
Dependência Funcional
Em uma tabela relacional, diz-se que uma coluna C2 depende funcionalmente de uma coluna C1 (ou que a coluna C1 determina a coluna C2) quando, em todas as linhas da tabela, para cada valor de C1 que aparece na tabela, aparecer o mesmo valor de C2.
Dependência Funcional
Dependência funcional
aluno(matricula, nome, cod_disciplina, nome_disciplina, nota)
matricula → nome
cod_disciplina → nome_disciplina
matricula, cod_disciplina → nota
Matricula | Nome | Cod_disciplina | Nome_disciplina | nota |
00012233 | Val Donato | D01 | Banco de Dados I | 8,5 |
00223345 | Seu Pereira | D02 | Banco de Dados II | 9,0 |
00012233 | Val Donato | D03 | Sistemas Distribuídos | 8,0 |
Dependência Funcional
Dependência funcional
DF = { cod_disciplina, horario → mat_professor
mat_professor → nome_professor
cod_disciplina → nome_disciplina
}
Cod_disciplina | Horario | Nome_disciplina | Mat_professor | Nome_professor |
D01 | TQAB | Banco de Dados I | 00122 | Bernadette Farias |
D02 | TQCD | Influência Digital | 00023 | Felipe Neto |
D03 | TQAB | Treino e Prática do Futebol | 00021 | Jorge Jesus |
Dependência Funcional
Primeira Forma Normal
Diz-se que uma relação está na primeira forma normal quando ela não contém tabelas aninhadas (atributos multivalorados e atributos compostos)
Primeira Forma Normal
Primeira Forma Normal
Cod_disciplina | Nome_disciplina | Mat_professor | Horarios |
D01 | Banco de Dados I | 00122 | {TQABM, TQCDN} |
D02 | Influência Digital | 00023 | SQAB |
D03 | Treino e Prática do Futebol | 00021 | {TQCDM, TQCDT} |
Primeira Forma Normal
Primeira Forma Normal
Primeira Forma Normal
Segunda Forma Normal
Uma relação está na Segunda Forma Normal (2FN) se ela está na 1NF e todo atributo não-
chave é plenamente dependente da chave primária
Segunda Forma Normal
Segunda Forma Normal
Dependência Parcial
Uma dependência (funcional) X 🡪 Y é considerada uma dependência
parcial se (X – {A}) 🡪 Y
Segunda Forma Normal
Segunda Forma Normal
oferta(cod_disciplina, horario, nome_disciplina,
mat_professor,nome_professor)
F = { cod_disciplina, horario → mat_professor
cod_disciplina → nome_disciplina
mat_professor → nome_professor}
Cod_disciplina | Horario | Nome_disciplina | Mat_professor | Nome_professor |
D01 | TQAB | Banco de Dados I | 00122 | Bernadette Farias |
D02 | TQCD | Influência Digital | 00023 | Felipe Neto |
D03 | TQAB | Treino e Prática do Futebol | 00021 | Jorge Jesus |
D01 | SQAB | Banco de Dados I | 00432 | Marcelo Iury |
Os atributos que não fazem parte da chave primária não podem ter dependências parciais com a chave primária!
Segunda Forma Normal
Segunda Forma Normal
oferta(cod_disciplina, horario,
mat_professor, nome_professor)
disciplina (cod_disciplina, nome_disciplina)
Segunda Forma Normal
Terceira Forma Normal
Uma relação encontra-se na 3FN quando, além de estar na 2FN, não contém dependências transitivas.
Terceira Forma Normal
Terceira Forma Normal
Dependência Transitiva
Uma dependência funcional transitiva ocorre quando uma coluna não chave primária depende funcionalmente de outra coluna ou combinação de colunas não chave primária.
Terceira Forma Normal
Terceira Forma Normal
oferta(cod_disciplina, horario,mat_professor,nome_professor)
F = { cod_disciplina, horario → mat_professor
mat_professor → nome_professor}
Cod_disciplina | Horario | Nome_disciplina | Mat_professor | Nome_professor |
D01 | TQAB | Banco de Dados I | 00122 | Bernadette Farias |
D02 | TQCD | Influência Digital | 00023 | Felipe Neto |
D03 | TQAB | Treino e Prática do Futebol | 00021 | Jorge Jesus |
D01 | SQAB | Banco de Dados I | 00432 | Marcelo Iury |
D04 | TQCD | Banco de Dados II | 00122 | Bernadette Farias |
Terceira Forma Normal
Terceira Forma Normal
Terceira Forma Normal
Terceira Forma Normal
oferta(cod_disciplina, horario,mat_professor)
F={cod_disciplina, horario → mat_professor}
disciplina (cod_disciplina, nome_disciplina)
G={cod_disciplina → nome_disciplina}
professor (mat_professor, nome_professor)
H={mat_professor → nome_professor}
Terceira Forma Normal
Uma relação está em BCNF se está na 3FN e nenhum atributo possua dependência transitiva com relação à chave primária.
Forma Normal Boyce/Codd (BCNF)
Forma Normal Boyce-Codd (BCNF)
ensina(aluno, disciplina, professor)
DF1 : {aluno, disciplina} 🡪 professor
DF2 : professor 🡪 disciplina
Não viola 3FN, mas viola BCNF porque disciplina é um atributo que faz parte da chave
aluno | disciplina | professor |
Ana | Banco de Dados I | Bernadette |
Paulo | Banco de Dados I | Marcelo Iury |
Pedro | Redes | Jorge Jesus |
Ana | Grafos | Felipe Neto |
Forma Normal Boyce/Codd (BCNF)
Forma Normal Boyce-Codd (BCNF)
aluno | disciplina |
Ana | Banco de Dados I |
Paulo | Banco de Dados I |
Pedro | Redes |
Ana | Grafos |
aluno | professor |
Ana | Bernadette |
Paulo | Marcelo Iury |
Pedro | Jorge Jesus |
Ana | Felipe Neto |
tupla ilegítima (Ana, Bernadette, Grafos)
É preciso verificar se a decomposição é sem perdas, ou seja, não gera tuplas ilegítimas!
Forma Normal Boyce/Codd (BCNF)
Forma Normal Boyce-Codd (BCNF)
aluno | disciplina | professor |
Ana | Banco de Dados I | Bernadette |
Paulo | Banco de Dados I | Marcelo Iury |
Pedro | Treino e Prática do Futebol | Jorge Jesus |
Maria | Influência Digital | Felipe Neto |
Julia | Banco de Dados I | Bernadette |
professor | disciplina |
Bernadette | Banco de Dados I |
Marcelo Iury | Banco de Dados I |
Jorge Jesus | Treino e Prática do Futebol |
Felipe Neto | Influência Digital |
aluno | professor |
Ana | Bernadette |
Paulo | Marcelo Iury |
Pedro | Jorge Jesus |
Maria | Felipe Neto |
Esta decomposição não gera tuplas ilegítimas!
Forma Normal Boyce/Codd (BCNF)
Normalização
Avançar ou não avançar na normalização? That’s the question!
Todo valor na Relação deve ser atômico
ou seja, a Relação não contém nenhum grupo de repetição/dependência multivalorada
Quarta Forma Normal
Normalização (4FN)
Quarta Forma Normal
Normalização (4FN)
Quarta Forma Normal
Normalização (4FN)
Quarta Forma Normal
Normalização (5FN)
Quinta Forma Normal
Quinta Forma Normal
Normalização (5FN)
teremos:
podem ser decompostas,
estando assim na 5NF.
Para recompor a mesma
informação serão necessários
as três relações.
Quinta Forma Normal
Normalização (4FN e 5FN)
Quarta e Quinta Forma Normal
Exemplos tendem a ser inventados
Exercício
Coloque os seguintes esquemas relacionais na 3a. Forma Normal.
a) horário_vôo (cod_companhia, num_vôo, horário, cod_aeroporto, nome_aeroporto, cidade_aeroporto, status)
num_vôo, cod_companhia → horário, status, cod_aeroporto
cod_aeroporto → nome_aeroporto, cidade_aeroporto
b) venda_produto (cod_produto, valor_produto, nm_produto, cod_vendedor, qtd_vendida, valor_produto, valor_total, cod_venda, nm_vendedor)
cod_produto → nm_produto, valor_produto
cod_venda → qtd_vendida, valor_total, cod_produto, cod_vendedor
cod_vendedor → nm_vendedor
Exercício