04.12.2019 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!