Etapa1 - Computação UFCG - Universidade Federal de

Propaganda
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
CURSO DE CIÊNCIA DA COMPUTAÇÃO
Disciplina: BANCO DE DADOS II - 2007.2 Prof.: MARCUS SAMPAIO
Projeto: Um BD Multidimensional de Análise de Vendas
Parte 1
Equipe:
André Luiz F. Alves
Eugênia de Sousa Cavalcante
Jaluska R. de Almeida
Campina Grande, 21/dezembro/2007
1.
Definição do problema
Um gerente de vendas de uma organização de comércio varejista deseja analisar as
vendas da organização por meio de alguns ou todos os critérios de agregação seguintes:
Tempo (dia), Loja e Produto. A figura ilustra o esquema tri-dimensional.
2.
Diagrama UML de classes
3.
Classes ODL/ODMG
interface Metodos_Produto{
float getValor()
/* retorna o valor do produto*/
}
class Produto : Metodos_Produto (extent Produtos key codigo){
attribute Integer codigo;
attribute String nome;
attribute String descricao;
attribute String tipoProduto;
attribute enumeration Tipo{limpeza, bebidas, alimentaçao, outros} categoria;
attribute String fabricante;
attribute float preco;
relationship Set<LinhaVenda> esta_contido inverse LinhaVenda:: contem;
}
interface Metodos_Loja{
float faturamento_periodo(int mes, int ano)
/* retorna a soma das vendas no perido mes/ano */
float vendas_realizadas()
/* retorna soma das vendas realizadas por esta loja */
}
interface Endereço (extent Endereços){
attribute String rua;
attribute Integer número;
attribute String bairro;
attribute String cidade;
attribute String estado;
attribute Integer cep;
}
class Loja : Metodos_Loja : Endereço (extent Lojas key cnpj){
attribute String cnpj;
attribute String nome;
relationship Set<Venda> realiza inverse Venda::é_realizada_por;
}
interface Metodos_Venda{
float valorTotal()
/* calcula total da venda*/
}
class Venda : Metodos_Venda (extent Vendas key id){
attribute integer id;
attribute Date data;
attribute List<struct LinhaVenda{Integer quantidade, int total}> linhasVenda;
relationship List<Produto> é_composto_por inverse Produto::compõe;
relationship Loja é_realizada_por inverse Loja::realiza;
}
Consultas OQL/ODMG
1. Qual a venda do produto X, no mês Y, do ano Z?
SELECT SUM( p.valorTotal)
FROM Vendas v, v.é_composta_por p
WHERE p.nome = 'X' AND v.data.year='Z' AND V.data.year='Y'
2. Qual o faturamento anual de produtos de limpeza, do ano X ao ano Y?
SELECT ano, valorVendas : SUM(SELECT p.v.valorTotal()
FROM PARTITION p)
FROM Vendas v, v.é_composta_por p
WHERE p.categoria = limpeza AND v.data.year>='X' AND v.data.year<='Y'
GROUP BY ano: v.data.year
3. Compare as vendas de cerveja do mês de junho (São João) de um ano X, em
Campina Grande, com os meses de maio e julho do ano X.
SELECT mes, vendasProduto : SUM(SELECT p.v FROM PARTITION p)
FROM Vendas v, v.é_realizada_por loja, v.é_composta p
WHERE loja.endereço.cidade = ‘Campina Grande’ AND p.tipoProduto = ‘cerveja’
AND v.data.year=X AND v.data.month>=5 AND v.data.month<=7
GROUP BY mes: v.data.month
4. Dada uma semana de um certo mês de um certo ano, compare as vendas de produtos
de limpeza, durante a semana e no fim da semana.
SELECT SUM(SELECT v.valorTotal()
WHERE v.data.weekDay = 1
OR v.data.weekDay = 7),
SUM(SELECT v.valorTotal()
WHERE NOT (v.data.weekDay = 1
OR v.data.weekDay = 7))
FROM Vendas v, v.é_composta_por p
WHERE p.categoria = ‘limpeza’ AND
v.data BETWEEN (‘dia/mês/ano’ AND ‘dia+7/mês/ano’)
5. Como o faturamento no ano X de um produto P se distribui pelos meses do ano X?
SELECT mes, SUM(SELECT p.venda.valorTotal()
FROM PARTITION p)
FROM Vendas venda, venda.é_composta_por p
WHERE venda.data.year = X AND p.nome = 'P'
GROUP BY mes: venda.data.month
6. Qual(is) a(s) cidades(s) campeã(s) de venda no último trimestre de um certo ano X?
SELECT f.cidade
FROM (SELECT loja.endereco.cidade AS cidade,
SUM(loja.vendas_realizadas()) AS vendas_trimestre
FROM Lojas loja, loja.realiza v
WHERE v.data.year = X AND v.data.month>=10
GROUP BY loja.endereco.cidade) f
WHERE f.vendas_trimestre = MAX(f.vendas_trimestre)
Download