Você está na página 1de 5

Disciplina: Sistemas de Apoio a Deciso Atividade 11 Professor Iremar Nunes de Lima.

. Objetivo da atividade: Criar um BD OLAP baseado no modelo OLTP da atividade anterior. Observaes: Esta atividade individual. Cpias entre os grupos tero nota zero. Roteiro: Considere o seguinte Modelo de Dados para um Sistema OLTP:

Recriar o banco de dados acima de acordo com a soluo abaixo. Todos os alunos tero o BD OLTP acima iguais. a) Crie o BD conforme script abaixo.
DROP DATABASE OLTP (S execute este comando se o BD OLTP j existir) CREATE DATABASE OLTP USE OLTP; CREATE TABLE Funcionario( CodFunc int NOT NULL, Nome varchar(50) NOT NULL, Endereco varchar(100) NULL, DataNascimento datetime NULL,

Salario money NULL, PRIMARY KEY (CodFunc)) ; CREATE TABLE Categoria( CodCategoria int NOT NULL, Descricao varchar(50) NOT NULL PRIMARY KEY (CodCategoria)) ; CREATE TABLE Situacao( CodSituacao tinyint NOT NULL, Descricao varchar(50) NOT NULL PRIMARY KEY (CodSituacao)) ; CREATE TABLE Produto( CodProduto int NOT NULL, Nome varchar(50) NOT NULL, QuantidadeEstoque int NOT NULL, PrecoVendaAtual money NULL, CodCategoria int NOT NULL PRIMARY KEY (CodProduto)) ; CREATE TABLE Venda( CodVenda int NOT NULL, ValorTotal money NOT NULL, Data datetime NOT NULL, CodFunc int NOT NULL, CodSituacao tinyint NOT NULL PRIMARY KEY (CodVenda)) ; CREATE TABLE ItensVenda( CodVenda int NOT NULL, CodProduto int NOT NULL, Quantidade int NOT NULL, PrecoPago money NOT NULL, PRIMARY KEY (CodVenda,CodProduto)) ; ALTER TABLE ItensVenda ; ALTER TABLE ItensVenda (CodProduto) ; ADD ADD FOREIGN KEY(CodVenda) REFERENCES Venda (CodVenda) FOREIGN KEY(CodProduto) REFERENCES Produto

ALTER TABLE Venda ADD FOREIGN KEY(CodFunc) REFERENCES Funcionario (CodFunc) ; ALTER TABLE Venda ADD FOREIGN KEY(CodSituacao) REFERENCES Situacao (CodSituacao) ; ALTER TABLE Produto (CodCategoria) ; ADD FOREIGN KEY(CodCategoria) REFERENCES Categoria

b) Execute os scripts SQL para preenchimento das tabelas:


insert into Situacao (CodSituacao,Descricao) values (1,'Aberto');

insert into Situacao (CodSituacao,Descricao) values (2,'Pago'); insert into Situacao (CodSituacao,Descricao) values (3,'Entregue'); insert into Situacao (CodSituacao,Descricao) values (4,'Cancelado'); insert into Categoria insert into Categoria insert into Categoria Filmadoras'); insert into Categoria insert into Categoria insert into Categoria insert into Categoria Domsticas'); insert into Categoria Decorao'); insert into Categoria insert into Categoria insert into Categoria insert into Categoria insert into Categoria insert into Categoria insert into Categoria (CodCategoria,Descricao) values (1,'Informtica'); (CodCategoria,Descricao) values (2,'Telefonia'); (CodCategoria,Descricao) values (3,'Cmeras e (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) values values values values (4,'Eletrnicos'); (5,'Eletrodomsticos'); (6,'Eletroportteis'); (7,'Utilidades

(CodCategoria,Descricao) values (8,'Mveis e (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) (CodCategoria,Descricao) values values values values values values values (9,'Cama Mesa e Banho'); (10,'Games'); (11,'DVDs e Blueray'); (12,'Livros'); (13,'Beleza e Sade'); (14,'Brinquedos'); (15,'Esporte e Lazer');

SET NOCOUNT ON ; declare @i as int ; set @i = 1 ; begin transaction while(@i <= 100) begin insert into Funcionario (CodFunc, Nome, Endereco, DataNascimento, Salario) VALUES (@i, 'Nome ' + convert(varchar(50), @i), 'Endereco ' + convert(varchar(50), @i), getdate() - @i%997, 1000 + @i) set @i += 1 end ; commit transaction;

SET NOCOUNT ON ; declare @i as int ; set @i = 1 ; begin transaction while(@i <= 1000) begin insert into Produto (CodProduto, Nome, QuantidadeEstoque, PrecoVendaAtual, CodCategoria) VALUES (@i, 'Produto ' + convert(varchar(50), @i), @i%97, (@i%3001)+1, (@i %15)+1 ) set @i += 1 end ; commit transaction; SET NOCOUNT ON ; declare @i as int ; set @i = 1 ;

begin transaction while(@i <= 10000) begin insert into Venda (CodVenda, ValorTotal, Data, CodFunc, CodSituacao) VALUES (@i, (@i%9973)+1, getdate() - @i%997 ,(@i%97)+1, (@i%4)+1 ) set @i += 1 end ; commit transaction; SET NOCOUNT ON ; declare @i as int ; set @i = 1 ; begin transaction while(@i <= 100000) begin insert into ItensVenda (CodVenda, CodProduto, Quantidade, PrecoPago) VALUES ( (@i%9973)+7, (@i%997)+3, (@i%3)+1, ((@i%3)+1) * @i%3001 ) set @i += 1 end ; commit transaction;

c) Proponha no Microsoft Visio um modelo estrela completo para um data mart baseado no modelo OLTP acima. Cole aqui o desenho gerado. A tabela FATO deve ser chamada de ITENSVENDA possuindo as seguintes mtricas: ValorTotalItem, QuantidadeTotalItem.

d) Crie no SQL Server um novo database de nome OLAP.


CREATE DATABASE OLAP ;

e) Proponha o cdigo SQL que cria as tabelas do item c no BD OLAP.

USE OLAP; CREATE TABLE ...

f) Proponha o cdigo SQL que cria os ndices na tabela Fato conforme boas prticas discutidas em sala de aula.