Você está na página 1de 4

UNIVERSIDADE DE SÃO PAULO

INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO


DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO
SCC0141 - Bancos de Dados e Suas Aplicações
Prof. José Fernando Rodrigues Júnior – 2º semestre de 2011

Lista de Exercícios 10 – Dependências Funcionais e Normalização

 Entrega até dia 26/10 ao término da aula.

1) Cite e explique as anomalias (inserção, remoção, alteração, geração de tuplas ilegítimas) que podem
ocorrer nas relações abaixo. Exemplifique.

a) Empregado_Projeto = {NFuncional, NomeEmpregado, NroProjeto, NomeProjeto,


NroHoras, LocalizacaoProjeto}
A tabela vincula empregados a projetos por meio de pares NFuncional-NroProjeto. DFs:
NFuncional  NomeEmpregado
NroProjeto  NomeProjeto, LocalizacaoProjeto
NFuncional, NroProjeto  NroHoras

Inserção/atualização:
 pode-se inserir/atualizar o nome de um empregado de maneira que ele possua diferentes nomes para um mesmo
NFuncional;
 pode-se inserir/atualizar nome e localização de projeto em diversas versões, não sendo possível saber ao certo qual é o
nome e a localização corretos.
Remoção:
 pode-se excluir o nome de um empregado caso ele não esteja vinculado a mais nenhum projeto;
 pode-se excluir o nome e a localização de um projeto, caso este possua um único empregado vinculado, e este seja
removido.

b) Aluno = {Nusp, idade, curso}


Matrícula = {NomeAluno, disciplina, curso}
Estas duas tabelas informam sobre os alunos, seus cursos e suas disciplinas sendo cursadas. Dado um número USP, para que se saiba
quais são as disciplinas cursadas, é necessária uma junção.

O único atributo em comum é curso, o qual não é chave em nenhuma das relações. A junção natural sobre curso irá criar dados
inválidos, por exemplo, suponha o aluno Fábio com nrousp 1, e a aluna Ana com número USP 2:
Nusp, idade, curso NomeAluno, disciplina, curso
1 21 10 Fábio SCE400 10
2 22 10 Ana SMA300 10

A junção irá produzir:


Nusp, idade, curso, NomeAluno, disciplina, curso
1 21 10 Fábio SCE400 10
1 21 10 Ana SMA300 10
2 22 10 Fábio SCE400 10
2 22 10 Ana SMA300 10

Isto é, todos os alunos de um dado curso, cursam todas as disciplinas cursadas por qualquer aluno do curso.

Para evitar a presença de tuplas ilegítimas, uma das duas condições deve valer:
Aluno ∩ Matrícula  Aluno - Matrícula – curso  Nusp, idade  falso
OU
Aluno ∩ Matrícula  Matrícula - Aluno – curso  NomeAluno, disciplina  falso
Em outras palavras, para que não ocorram tuplas ilegítimas é necessário que a intersecção entre duas relações R1 e R2, determine
uma chave ou para R1 ou para R2.

2) Considere as seguintes relações e suas dependências funcionais.

 Peça = {codigo, fornecedor, endereçoFornecedor, qtdEstoque, peso, valor}

código, fornecedor  valor;


fornecedor  endereçoFornecedor;
código  peso, qtdEstoque;

 Livro = {ISBN, autor, instituicaoAutor, titulo, editora, tipo, preço}

ISBN  autor, titulo, editora, tipo


autor  instituiçãoAutor
tipo  preço
autor, titulo  ISBN, editora

Para cada relação indique se as formas normais 1NF, 2NF e 3NF são atendidas. Normalize as relações
para atender a cada uma destas formas.

Relação Peça:
Peça = {codigo, fornecedor, endereçoFornecedor, qtdEstoque, peso, valor}

Violações: 1 FN, pois a endereçoFornecedor não é atômico


2 FN, pois há uma dependência parcial entre a superchave e endereçoFornecedor e
entre a superchave e qtdEstoque, peso

Normalização:
 Fornecedor = {fornecedor, rua, numero, complemento, cidade, estado, CEP}
 Peca = {código, fornecedor, valor}
 PecaEmEstoque = {código, qtdEstoque, peso}

Livro:
Livro = {ISBN, autor, instituicaoAutor, titulo, editora, tipo, preço}

Violações: 2 FN, pois há uma dependência parcial entre a superchave {autor, titulo} e instituicaoAutor
3 FN, pois há uma dependência transitiva entre a chave ISBN e preço
Normalização:
Autor = {autor, instituicaoAutor}
Tipo = {tipo, preço}
Livro = {ISBN, autor, titulo, editora, tipo}

Obs.: a primeira vista, tipo depende transitivamente da superchave {autor, titulo}, pois:
{autor, titulo} ISBN e ISBN  tipo  {autor, titulo}  tipo
No entanto, como {autor, titulo} ISBN AND ISBN  {autor, titulo} então, se ISBN  x  {autor, titulo} x, para qualquer x.
Portanto, a DF {autor, titulo}  tipo também é não transitiva, e não viola a 3 FN
3) Dados os formulários abaixo:

Livros & Cia. Ped. Num: _____

Nome cliente: _____________________________


End. :____________________________________
End. Entrega: _____________________________
Livros e Cia. Ficha de livro
Livros solicitados
Cód. Quant. Preço unit. Total Código: _______
Título: ___________________________
Autores: ____________________________
Preço R$: ___________
....

Tot. Ped: R$

Vendedor: ________________________________

a) A partir dos formulários defina uma relação denominada Pedido e outra denominada Livro.

Pedido = {PedNum, PedNomeCli, PedEndCli, PedEndEntrega, PedCodLiv, PedQuantLiv, PedPrecoUnitLiv, PedTotalLiv, PedTotal,
PedVend}

Livro ={LivroCod, LivroTitulo, LivroAutores, LivroPreco}

b) Defina as dependências funcionais para os dados das relações criadas.

PedNum  PedNomeCli, PedEndCli, PedEndEntrega, PedTotal, PedVend

PedNomeCli  PedEndCli

PedCodLiv  PedPrecoUnitLiv

PedidoNum, PedCodLiv  PedQuantLiv, PedTotalLiv

LivroCod  LivroTitulo, LivroAutores, LivroPreco

c) A partir das DFs definidas no item b, normalize os esquemas até a 3FN, apresentando todo o
desenvolvimento.
Violação da 1 FN:
 nos atributos compostos PedEndCli, PedEndEntrega e LivroAutores

Violação da 2 FN:
 dependência parcial entre {PedidoNum, PedCodLiv} por PedCodLiv  PedPrecoUnitLiv

 dependência parcial entre {PedidoNum, PedCodLiv} por PedidoNum  PedNomeCli, PedEndCli, PedEndEntrega, PedTotal,
PedVend

Violação da 3 FN:
 dependência transitiva dada por PedidoNum, PedCodLiv  PedNomeCli e PedNomeCli  PedEndCli

Normalização
 Livro = {LivroCod, LivroTitulo, LivroPreco}
 Autor = {AutorCod, NomeAutor}
 Autoria = {LivroCod, AutorCod}
 Cliente = {PedNomeCli, Rua, Numero, Complemento, Cidade, Estado, CEP}
 Pedido = {PedidoNum, PedidoVend, PedNomeCli, EntregaRua, EntregaNumero, EntregaComplemento, EntregaCidade,
EntregaEstado, EntregaCEP, PedTotal}
 LivroPedido = {PedidoNum, CodLiv, PedQuantLiv, PedTotalLiv}

Você também pode gostar