BDI - Normalização - Exercício
- No tags were found...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DA PARAÍBA
CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET
DISCIPLINA: BANCO DE DADOS I
PROFESSOR: NILTON FREIRE SANTOS
Normalização - Exercício
• Utilizando o Microsoft SQL Server, realize a normalização do banco de dados bd_Vendas que contém a tabela VENDA, descrita abaixo:
VENDA (idpedido, dataped, freteped, idprod, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem, idcliente, nomecli, enderecocli, idcidade,
nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
1FN
• Aplicar 1FN na tabela VENDA e identificar as tabelas aninhadas. Identifica-se que os itens do pedido estão aninhados dentro de VENDA por serem multivalorados
para cada pedido.
VENDA (idpedido, dataped, freteped, (idprod, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem), idcliente, nomecli, enderecocli,
idcidade, nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
• Esses atributos deverão ser retirados da tabela VENDA. Assim, a chave primária da tabela VENDA (sem a tabela aninhada) poderá ser então definida como sendo
formada pelo atributo idpedido.
VENDA (idpedido, dataped, freteped, (idprod, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem), idcliente, nomecli, enderecocli,
idcidade, nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 1
1. [Criar a tabela ITENS]
A tabela ITENS deverá ser criada com os atributos multivalorados que estavam gerando a tabela aninhada. A chave primária tabela PEDIDO deverá ser incluída
na tabela ITENS, como chave estrangeira.
ITENS (idpedido, idprod, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem)
[idpedido] referencia PEDIDO
SELECT idpedido, idproduto, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem
INTO Itens
FROM Venda
SELECT * FROM Itens
2. [Excluir os atributos multivalorados da tabela VENDA]
Para normalizar a tabela VENDA é necessário que a tabela aninhada seja retirada dessa tabela.
VENDA (idpedido, dataped, freteped, idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
ALTER TABLE Venda
DROP COLUMN idproduto, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem
SELECT * FROM Venda
3. [Excluir as linhas repetidas da tabela VENDA]
Devido à redundância de dados na tabela VENDA, decorrente da existência da tabela aninhada, nota-se que existe repetição de linhas na tabela VENDA, sendo
necessário excluí-las.
Essas linhas repetidas serão excluídas e será criada a tabela PEDIDO contendo as linhas resultantes.
SELECT DISTINCT *
INTO Pedido
FROM Venda
SELECT * FROM Pedido
4. [Excluir a tabela VENDA]
DROP TABLE Venda
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 2
5. [Definir a chave primária da tabela PEDIDO]
ALTER TABLE Pedido ADD CONSTRAINT PK_Pedido PRIMARY KEY (idpedido)
6. [Definir a chave estrangeira na tabela ITENS oriunda da tabela PEDIDO]
ALTER TABLE Itens ADD CONSTRAINT FK_Itens_Pedido FOREIGN KEY (idpedido) REFERENCES Pedido
7. [Definir a chave primária da tabela ITENS]
A chave primária da tabela ITENS é formada pela junção da chave estrangeira recebida da tabela PEDIDO com um dos atributos da tabela ITENS, de forma a
garantir a unicidade das linhas dessa tabela.
ALTER TABLE Itens ADD CONSTRAINT PK_Itens PRIMARY KEY (idpedido, idproduto)
8. [Tabelas normalizadas na 1FN]
PEDIDO (idpedido, dataped, freteped, idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
ITENS (idpedido, idproduto, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem)
[idpedido] referencia PEDIDO
SELECT * FROM Pedido
SELECT * FROM Itens
• Aplicar a 2FN na tabela ITENS e eliminar a dependência parcial.
Analisando a tabela ITENS, notamos que os atributos nomeprod, precoprod e quantest dependem do atributo idprod, que é parte da chave primária, o que
configura uma dependência parcial.
Esses atributos deverão ser retirados da tabela ITENS para formar uma nova tabela denominada PRODUTO.
A parte da chave primária da tabela ITENS que está causando a dependência parcial (idproduto) deverá ser incluída como chave primária da tabela PRODUTO.
Na tabela ITENS, o atributo idproduto será chave estrangeira referenciando a tabela PRODUTO.
ITENS (idpedido, idproduto, nomeprod, precoprod, quantest, precovendido, quantvendida, valoritem)
[idpedido] referencia PEDIDO
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 3
Nota-se que, devido à dependência parcial que existe na tabela ITENS, os dados dos atributos em dependência parcial apresentam redundância, que precisa
ser eliminada na criação da tabela PRODUTO.
PRODUTO (idproduto, nomeprod, precoprod, quantest)
ITENS (idpedido, idproduto, precovendido, quantvendida, valoritem )
[idpedido] referencia PEDIDO
[idproduto] referencia PRODUTO
9. [Criar a tabela PRODUTO]
SELECT DISTINCT idproduto, nomeprod, precoprod, quantest
INTO Produto
FROM Itens
SELECT * FROM Produto
10. [Definir a chave primária da tabela PRODUTO]
ALTER TABLE Produto ADD CONSTRAINT PK_Produto PRIMARY KEY (idproduto)
11. [Excluir os atributos com dependência parcial da tabela ITENS]
ALTER TABLE Itens DROP COLUMN nomeprod, precoprod, quantest
SELECT * FROM Itens
12. [Definir a chave estrangeira na tabela ITENS oriunda da tabela PRODUTO]
ALTER TABLE Itens ADD CONSTRAINT FK_Itens_Produto FOREIGN KEY (idproduto) REFERENCES Produto
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 4
13. [Tabelas normalizadas na 2FN]
PEDIDO (idpedido, dataped, freteped, idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
PRODUTO (idproduto, nomeprod, precoprod, quantest)
ITENS (idpedido, idproduto, precovendido, quantvendida, valoritem)
[idpedido] referencia PEDIDO
[idproduto] referencia PRODUTO
SELECT * FROM Pedido
SELECT * FROM Produto
SELECT * FROM Itens
• Aplicar a 3FN na tabela PEDIDO e eliminar a dependência transitiva.
Analisando a tabela PEDIDO, notamos que os atributos nomecli, enderecocli, idcidade, nomecid, ufcid, idpais e nomepais, dependem funcionalmente do
atributo idcliente, que não faz parte da chave primária, o que configura uma dependência transitiva. Da mesma forma, os atributos nomevend, cpfvend e
rgvend dependem funcionalmente do atributo idvendedor, que também não faz parte da chave primária.
Esses atributos deverão ser retirados da tabela PEDIDO para formar duas novas tabelas denominadas CLIENTE e VENDEDOR. Os atributos que estão causando
a dependência transitiva (idcliente e idvendedor) deverão ser incluídos como chave primária das tabelas CLIENTE e VENDEDOR, respectivamente.
Na tabela PEDIDO, os atributos idcliente e idvendedor serão chaves estrangeiras referenciando as tabelas CLIENTE e VENDEDOR, respectivamente.
PEDIDO (idpedido, dataped, freteped, idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais, idvendedor, nomevend, cpfvend, rgvend)
Nota-se que, devido às dependências transitivas que existes na tabela PEDIDO, os dados dos atributos em dependência transitiva apresentam redundância, que
precisa ser eliminada na criação das novas tabelas (CLIENTE e VENDEDOR).
14. [Criar a tabela CLIENTE]
CLIENTE (idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais)
SELECT DISTINCT idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais
INTO Cliente
FROM Pedido
SELECT * FROM Cliente
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 5
15. [Definir a chave primária da tabela CLIENTE]
ALTER TABLE Cliente ADD CONSTRAINT PK_cliente PRIMARY KEY (idcliente)
16. [Criar a tabela VENDEDOR]
VENDEDOR (idvendedor, nomevend, cpfvend, rgvend)
SELECT DISTINCT idvendedor, nomevend, cpfvend, rgvend
INTO Vendedor
FROM Pedido
SELECT * FROM Vendedor
17. [Definir a chave primária da tabela VENDEDOR]
ALTER TABLE Vendedor ADD CONSTRAINT PK_vendedor PRIMARY KEY (idvendedor)
18. [Excluir os atributos com dependência transitiva da tabela PEDIDO]
ALTER TABLE Pedido DROP COLUMN nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais, nomevend, cpfvend, rgvend
SELECT * FROM Pedido
19. [Definir a chave estrangeira na tabela Pedido oriunda da tabela Cliente]
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_Cliente FOREIGN KEY (idcliente) REFERENCES Cliente
20. [Definir a chave estrangeira da tabela Pedido oriunda da tabela Vendedor]
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_Vendedor FOREIGN KEY (idvendedor) REFERENCES Vendedor
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 6
• Analisando a tabela CLIENTE, notamos que os atributos nomecid, ufcid, idpais e nomepais, dependem funcionalmente do atributo idcidade, que não faz parte
da chave primária, o que configura uma dependência transitiva.
Esses atributos deverão ser retirados da tabela CLIENTE para formar uma nova tabela denominada CIDADE. O atributo que está causando a dependência
transitiva (idcidade) deverá ser incluídos como chave primária da nova tabela a ser criada (CIDADE).
Na tabela CLIENTE, o atributo idcidade será chave estrangeira referenciando a tabela CIDADE.
CLIENTE (idcliente, nomecli, enderecocli, idcidade, nomecid, ufcid, idpais, nomepais)
Nota-se que, devido à dependência transitiva que existe na tabela CLIENTE, os dados dos atributos em dependência apresentam redundância, que precisa ser
eliminada na criação de uma nova tabela (CIDADE).
21. [Criar a tabela CIDADE]
CIDADE (idcidade, nomecid, ufcid, idpais, nomepais)
SELECT DISTINCT idcidade, nomecid, ufcid, idpais, nomepais
INTO Cidade
FROM Cliente
SELECT * FROM Cidade
22. [Definir a chave primária da tabela CIDADE]
ALTER TABLE Cidade ADD CONSTRAINT PK_cidade PRIMARY KEY (idcidade)
23. [Excluir os atributos com dependência transitiva da tabela CLIENTE]
ALTER TABLE Cliente DROP COLUMN nomecid, ufcid, idpais, nomepais
SELECT * FROM Cliente
24. [Definir a chave estrangeira na tabela Cliente oriunda da tabela Cidade]
ALTER TABLE Cliente ADD CONSTRAINT FK_Cliente_Cidade FOREIGN KEY (idcidade) REFERENCES Cidade
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 7
• Analisando a tabela CIDADE, notamos que o atributo nomepais, depende funcionalmente do atributo idpais, que não faz parte da chave primária, o que
configura uma dependência transitiva.
Esse atributo deverá ser retirado da tabela CIDADE para formar uma nova tabela denominada PAIS. O atributo que está causando a dependência transitiva
(idpais) deverá ser incluídos como chave primária da nova tabela a ser criada (PAIS).
Na tabela CIDADE, o atributo idpais será chave estrangeira referenciando a tabela PAIS.
CIDADE (idcidade, nomecid, ufcid, idpais, nomepais)
Nota-se que, devido à dependência transitiva que existe na tabela CIDADE, os dados do atributo em dependência apresentam redundância, que precisa ser
eliminada na criação de uma nova tabela (PAIS).
25. [Criar a tabela PAIS]
PAIS (idpais, nomepais)
SELECT DISTINCT idpais, nomepais
INTO Pais
FROM Cidade
SELECT * FROM Pais
26. [Definir a chave primária da tabela PAIS]
ALTER TABLE Pais ADD CONSTRAINT PK_pais PRIMARY KEY (idpais)
27. [Excluir os atributos com dependência transitiva da tabela CIDADE]
ALTER TABLE Cidade DROP COLUMN nomepais
SELECT * FROM Cidade
28. [Definir a chave estrangeira na tabela Cidade oriunda da tabela Pais]
ALTER TABLE Cidade ADD CONSTRAINT FK_Cidade_Pais FOREIGN KEY (idpais) REFERENCES Pais
29. [Excluir o atributo derivado na tabela ITENS]
ALTER TABLE Itens DROP COLUMN valoritem
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 8
30. [Tabelas normalizadas na 3FN]
PAIS (idpais, nomepais)
CIDADE (idcidade, nomecid, ufcif, idpais)
[idpais] referencia PAIS
CLIENTE (idcliente, nomecli, enderecocli, idcidade)
[idcidade] referencia CIDADE
VENDEDOR (idvendedor, nomevend, cpfvend, rgvend)
PRODUTO (idproduto, nomeprod, precoprod, quantest)
PEDIDO (idpedido, dataped, freteped, idcliente, idvendedor)
[idcliente] referencia CLIENTE
[idvendedor] referencia VENDEDOR
ITENS (idpedido, idproduto, precovendido, quantvendida)
[idpedido] referencia PEDIDO
[idproduto] referencia PRODUTO
SELECT * FROM PAIS
SELECT * FROM CIDADE
SELECT * FROM CLIENTE
SELECT * FROM VENDEDOR
SELECT * FROM PRODUTO
SELECT * FROM PEDIDO
SELECT * FROM ITENS
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 9
DIAGRAMA LÓGICO
IFPB - CSTSI - Banco de Dados I - Prof. Nilton Freire Santos - Normalização - Exercício 10