Projeto BD

Você também pode gostar

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 26

UNIVERSIDADE FEDERAL DE LAVRAS

BANCO DE DADOS Sistema para controle de vendas em uma loja de celulares


Professora: Ana Paula Piovesan Melchiori Equipe: Aline Antunes Dias lvaro Csar Pereira da Silva Giulia Luan Santos de Sousa Marcelo Silva Rufato Nilson Quarentei Prohni
200720327 200720315

200810326
200720323 200720333

Lavras - Novembro 2009

Viso Geral do Sistema: O sistema para controle de vendas em lojas de celular trata do controle de produtos e funcionrios pertencentes a loja e as vendas de cada funcionrio. Permitindo assim a gerao de relatrios precisos das vendas de cada funcionrio ou do grupo de funcionrios da empresa facilitando a obteno de dados no momento das tomadas de decises.

Requisitos funcionais 1. O sistema deve permitir o cadastro, alterao e excluso de funcionrios e suas categorias (gerente, vendedor, etc), com os seguintes atributos para funcionrio: nome, email, data de nascimento, CPF, endereo e telefone e os seguintes atributos para o tipo: nome e descrio. 2. O sistema deve permitir o cadastro, alterao e excluso de operadoras e planos com os seguintes atributos para operadora: nome, descrio, email para contato e os seguintes atributos para os planos: nome e descrio. 3. O sistema deve permitir o cadastro, alterao e excluso de produtos com os seguintes atributos: modelo, marca, preo, quantidade disponvel na loja, foto e descrio. 4. O sistema deve permitir o cadastro, alterao e excluso de fornecedores com os seguintes atributos: nome, CNPJ, endereo e telefone. 5. O sistema deve permitir o cadastro e excluso de vendas de um funcionrio com os seguintes atributos: produto, quantidade do produto, funcionrio responsvel pela venda, data e total vendido. 6. O sistema deve permitir o cadastro, alterao e excluso de clientes com os seguintes atributos: nome, endereo, telefone, email e tipo (pessoa fsica ou jurdica). 7. O sistema deve permitir a incluso, alterao e excluso de metas de vendas por funcionrio ou por produto. 8. O sistema deve permitir a busca de produtos por nome, marca e modelo. 9. O sistema deve permitir a busca de funcionrios por nome e tipo. 10. O sistema deve permitir a busca de clientes por nome e tipo. 11. O sistema deve permitir a gerao de relatrios de vendas individuais ou por grupo a partir da seleo dos funcionrios que deseja-se incluir no relatrio e exibio de grficos com as metas desejadas e os resultados obtidos pelos funcionrios. 12. O sistema deve permitir a gerao de relatrios por produtos, com grficos e tabelas sobre as vendas de cada produto e as metas desejadas para cada um.

Requisitos no-funcionais 1. O sistema deve ser capaz de efetuar as tarefas solicitadas com rapidez e eficincia. 2. O sistema deve se apresentar ao usurio de maneira visualmente bonita e intuitiva. 3. O sistema deve ser compatvel com processadores Pentium 4 2.8GHz ou superior.

Modelo Entidade Relacionamento do Projeto Foi utilizada a ferramenta Br.Modelo para desenho do Modelo Entidade Relacionamento do projeto.

Modelo Relacional TP_FUNCIONARIO(ID, NOME, DESCRICAO); META(ID, DESCRICAO, METRICA, VALOR); CONTATO(ID, EMAIL, TELEFONE, RUA, NUMERO, BAIRRO, CEP, CIDADE, ESTADO); Foi utilizada uma tabela adicional para contato devido ao fato de vrias entidades necessitarem dos mesmos dados de contato, ento essas informaes poderiam ficar centralizadas em uma nica tabela para no se ter a adio de colunas em todas as tabelas de entidades que necessitam dessa informao. FUNCIONARIO(ID, ID_TP_FUNCIONARIO, ID_CONTATO, NOME, DT_NASCIMENTO, CPF); ID_TP_FUNCIONARIO REFERENCIA TP_FUNCIONARIO; Foi utilizada a adio de colunas devido ao fato de no de saber quantos funcionrios uma categoria poderia ter, ento no poderia adicionar colunas na tabela TP_FUNCIONARIO, e como desejava-se o cadastro, alterao e excluso de categorias de funcionrios, necessitava-se de uma tabela de categorias. ID_CONTATO REFERENCIA CONTATO; META_FUNCIONARIO(ID_FUNCIONARIO, ID_META); ID_FUNCIONARIO REFERENCIA FUNCIONARIO; ID_META REFERENCIA META; Foi utilizada uma tabela auxiliar para o relacionamento devido ao fato de ser um relacionamento de cardinalidade nxn e no haveria outra maneira de represent-lo. CLIENTE(ID, NOME, TIPO, ID_CONTATO); ID_CONTATO REFERENCIA CONTATO; OPERADORA(ID, NOME, DESCRICAO, ID_CONTATO); ID_CONTATO REFERENCIA CONTATO; PLANO(ID, NOME, DESCRICAO, ID_OPERADORA); ID_OPERADORA REFERENCIA OPERADORA; Foi utilizada a adio de colunas devido ao fato de no se saber quantos planos uma operadora poderia ter, assim no seria possvel adicionar uma coluna de planos na tabela OPERADORA.

FORNECEDOR(ID, CNPJ, NOME, ID_CONTATO); ID_CONTATO REFERENCIA CONTATO; MARCA(ID, NOME, DESCRICAO, ID_FORNECEDOR); Foi utilizada a adio de colunas devido ao fato de no se saber quantas marcas um fornecedor distribui, assim no seria possvel adicionar uma coluna de marcas na tabela FORNECEDOR. ID_FORNECEDOR REFERENCIA FORNECEDOR; MODELO(ID, NOME, DESCRICAO, ID_MARCA); ID_MARCA REFERENCIA MARCA; Foi utilizada a adio de colunas devido ao fato de no se saber quantos modelos uma marca fabrica, assim no seria possvel adicionar uma coluna de modelos na tabela MARCA. VENDA(ID, DATA, ID_CLIENTE, ID_FUNCIONARIO); ID_CLIENTE REFERENCIA CLIENTE; Foi utilizada a adio de colunas devido ao fato de no se saber de quantas vendas um cliente participa, assim no seria possvel adicionar uma coluna de vendas na tabela CLIENTE. ID_FUNCIONARIO REFERENCIA FUNCIONARIO; Foi utilizada a adio de colunas devido ao fato de no se saber quantas vendas um funcionrio efetua, assim no seria possvel adicionar uma coluna de vendas na tabela FUNCIONARIO. PRODUTO(ID, PRECO, NOME, QUANTIDADE, ID_MODELO); ID_MODELO REFERENCIA MODELO; VENDA_PRODUTO(ID_VENDA, ID_PRODUTO, QTDADE); ID_VENDA REFERENCIA VENDA; ID_PRODUTO REFERENCIA PRODUTO; Foi utilizada uma tabela auxiliar para o relacionamento devido ao fato de ser um relacionamento de cardinalidade nxn e no haveria outra maneira de represent-lo. FOTO(ID, DESCRICAO, CAMINHO, ID_PRODUTO);

ID_PRODUTO REFERENCIA PRODUTO; Foi utilizada a adio de colunas devido ao fato de no se saber quantas fotos um produto possui, assim no seria possvel adicionar uma coluna de fotos na tabela PRODUTO.

Modelo Fsico Foi utilizada a ferramenta phpMyAdmin para criao do banco de dados. --- Banco de Dados: `loja` -CREATE DATABASE IF NOT EXISTS `loja`; -- --------------------------------------------------------

--- Estrutura da tabela `cliente` --

CREATE TABLE IF NOT EXISTS `cliente` ( `ID` bigint(11) NOT NULL auto_increment, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `FL_TIPO` tinyint(1) NOT NULL COMMENT 'flag para tipo de cliente: 0 para pessoa fsica e 1 para pessoa jurdica', `ID_CONTATO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_CONTATO` (`ID_CONTATO`), KEY `ID_CONTATO_2` (`ID_CONTATO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `cliente` --

-- --------------------------------------------------------

--- Estrutura da tabela `contato` --

CREATE TABLE IF NOT EXISTS `contato` ( `ID` bigint(11) NOT NULL auto_increment, `EMAIL` varchar(255) collate utf8_unicode_ci default NULL, `TELEFONE` bigint(12) NOT NULL, `RUA` varchar(255) collate utf8_unicode_ci NOT NULL, `NUMERO` int(6) NOT NULL, `BAIRRO` varchar(255) collate utf8_unicode_ci NOT NULL, `CEP` bigint(8) NOT NULL, `CIDADE` varchar(255) collate utf8_unicode_ci NOT NULL, `ESTADO` varchar(255) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `contato` --

-- --------------------------------------------------------

--- Estrutura da tabela `fornecedor` --

CREATE TABLE IF NOT EXISTS `fornecedor` ( `ID` bigint(11) NOT NULL auto_increment, `CNPJ` bigint(14) NOT NULL, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `ID_CONTATO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `CNPJ` (`CNPJ`), KEY `ID_CONTATO` (`ID_CONTATO`), KEY `ID_CONTATO_2` (`ID_CONTATO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `fornecedor` --

-- --------------------------------------------------------

--- Estrutura da tabela `foto` --

CREATE TABLE IF NOT EXISTS `foto` ( `ID` bigint(11) NOT NULL auto_increment, `DESCRICAO` text collate utf8_unicode_ci NOT NULL, `CAMINHO` varchar(255) collate utf8_unicode_ci NOT NULL, `ID_PRODUTO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_PRODUTO` (`ID_PRODUTO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `foto` --

-- --------------------------------------------------------

--- Estrutura da tabela `funcionario` --

CREATE TABLE IF NOT EXISTS `funcionario` (

`ID` bigint(11) NOT NULL auto_increment, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DT_NASCIMENTO` date NOT NULL, `CPF` bigint(11) NOT NULL, `ID_TP_FUNCIONARIO` bigint(11) NOT NULL, `ID_CONTATO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `CPF` (`CPF`), KEY `ID_TP_FUNCIONARIO` (`ID_TP_FUNCIONARIO`), KEY `ID_CONTATO` (`ID_CONTATO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `funcionario` --

-- --------------------------------------------------------

--- Estrutura da tabela `marca` --

CREATE TABLE IF NOT EXISTS `marca` ( `ID` bigint(11) NOT NULL auto_increment,

`NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DESCRICAO` text collate utf8_unicode_ci NOT NULL, `ID_FORNECEDOR` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_FORNECEDOR` (`ID_FORNECEDOR`), KEY `ID_FORNECEDOR_2` (`ID_FORNECEDOR`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `marca` --

-- --------------------------------------------------------

--- Estrutura da tabela `meta` --

CREATE TABLE IF NOT EXISTS `meta` ( `ID` bigint(11) NOT NULL auto_increment, `DESCRICAO` text collate utf8_unicode_ci NOT NULL, `METRICA` varchar(255) collate utf8_unicode_ci NOT NULL, `VALOR` double NOT NULL, PRIMARY KEY (`ID`)

) ENGINE=InnoDB AUTO_INCREMENT=1 ;

DEFAULT

CHARSET=utf8

COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `meta` --

-- --------------------------------------------------------

--- Estrutura da tabela `modelo` --

CREATE TABLE IF NOT EXISTS `modelo` ( `ID` bigint(11) NOT NULL auto_increment, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DESCRICAO` text collate utf8_unicode_ci NOT NULL, `ID_MARCA` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_MARCA` (`ID_MARCA`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `modelo` --

-- --------------------------------------------------------

--- Estrutura da tabela `operadora` --

CREATE TABLE IF NOT EXISTS `operadora` ( `ID` bigint(11) NOT NULL auto_increment, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DESCRICAO` varchar(255) collate utf8_unicode_ci NOT NULL, `ID_CONTATO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_CONTATO` (`ID_CONTATO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `operadora` --

-- --------------------------------------------------------

--

-- Estrutura da tabela `plano` --

CREATE TABLE IF NOT EXISTS `plano` ( `ID` bigint(11) NOT NULL auto_increment, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DESCRICAO` varchar(255) collate utf8_unicode_ci NOT NULL, `ID_OPERADORA` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_OPERADORA` (`ID_OPERADORA`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `plano` --

-- --------------------------------------------------------

--- Estrutura da tabela `produto` --

CREATE TABLE IF NOT EXISTS `produto` ( `ID` bigint(11) NOT NULL auto_increment,

`NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DESCRICAO` text collate utf8_unicode_ci NOT NULL, `QTDADE` int(6) NOT NULL, `ID_MODELO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_MODELO` (`ID_MODELO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `produto` --

-- --------------------------------------------------------

--- Estrutura da tabela `rel_meta_funcionario` --

CREATE TABLE IF NOT EXISTS `rel_meta_funcionario` ( `ID_META` bigint(11) NOT NULL, `ID_FUNCIONARIO` bigint(11) NOT NULL, PRIMARY KEY (`ID_META`,`ID_FUNCIONARIO`), KEY `ID_META` (`ID_META`), KEY `ID_FUNCIONARIO` (`ID_FUNCIONARIO`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--- Extraindo dados da tabela `rel_meta_funcionario` --

-- --------------------------------------------------------

--- Estrutura da tabela `rel_venda_produto` --

CREATE TABLE IF NOT EXISTS `rel_venda_produto` ( `ID_VENDA` bigint(11) NOT NULL, `ID_PRODUTO` bigint(11) NOT NULL, `QTDADE` int(6) NOT NULL, PRIMARY KEY (`ID_VENDA`,`ID_PRODUTO`), KEY `ID_VENDA` (`ID_VENDA`), KEY `ID_PRODUTO` (`ID_PRODUTO`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--- Extraindo dados da tabela `rel_venda_produto` --

-- --------------------------------------------------------

--- Estrutura da tabela `tp_funcionario` --

CREATE TABLE IF NOT EXISTS `tp_funcionario` ( `ID` bigint(11) NOT NULL auto_increment, `NOME` varchar(255) collate utf8_unicode_ci NOT NULL, `DESCRICAO` text collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `tp_funcionario` --

-- --------------------------------------------------------

--- Estrutura da tabela `venda` --

CREATE TABLE IF NOT EXISTS `venda` ( `ID` bigint(11) NOT NULL auto_increment, `DATA` date NOT NULL, `ID_CLIENTE` bigint(11) NOT NULL, `ID_FUNCIONARIO` bigint(11) NOT NULL, PRIMARY KEY (`ID`), KEY `ID_CLIENTE` (`ID_CLIENTE`), KEY `ID_FUNCIONARIO` (`ID_FUNCIONARIO`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

--- Extraindo dados da tabela `venda` --

--- Restries para as tabelas dumpadas --

--- Restries para a tabela `cliente` -ALTER TABLE `cliente` ADD CONSTRAINT `cliente_ibfk_1` FOREIGN KEY (`ID_CONTATO`) REFERENCES `contato` (`ID`);

--- Restries para a tabela `fornecedor` -ALTER TABLE `fornecedor` ADD CONSTRAINT `fornecedor_ibfk_1` FOREIGN KEY (`ID_CONTATO`) REFERENCES `contato` (`ID`);

--- Restries para a tabela `foto` -ALTER TABLE `foto` ADD CONSTRAINT `foto_ibfk_1` FOREIGN KEY (`ID_PRODUTO`) REFERENCES `produto` (`ID`);

--- Restries para a tabela `funcionario` -ALTER TABLE `funcionario` ADD CONSTRAINT `funcionario_ibfk_2` FOREIGN KEY (`ID_CONTATO`) REFERENCES `contato` (`ID`), ADD CONSTRAINT `funcionario_ibfk_1` FOREIGN KEY (`ID_TP_FUNCIONARIO`) REFERENCES `tp_funcionario` (`ID`);

--- Restries para a tabela `marca` -ALTER TABLE `marca`

ADD CONSTRAINT `marca_ibfk_1` FOREIGN KEY (`ID_FORNECEDOR`) REFERENCES `fornecedor` (`ID`);

--- Restries para a tabela `modelo` -ALTER TABLE `modelo` ADD CONSTRAINT `modelo_ibfk_1` FOREIGN KEY (`ID_MARCA`) REFERENCES `marca` (`ID`);

--- Restries para a tabela `operadora` -ALTER TABLE `operadora` ADD CONSTRAINT `operadora_ibfk_1` FOREIGN KEY (`ID_CONTATO`) REFERENCES `contato` (`ID`);

--- Restries para a tabela `plano` -ALTER TABLE `plano` ADD CONSTRAINT `plano_ibfk_1` FOREIGN KEY (`ID_OPERADORA`) REFERENCES `operadora` (`ID`);

--- Restries para a tabela `produto` -ALTER TABLE `produto`

ADD CONSTRAINT `produto_ibfk_1` FOREIGN KEY (`ID_MODELO`) REFERENCES `modelo` (`ID`);

--- Restries para a tabela `rel_meta_funcionario` -ALTER TABLE `rel_meta_funcionario` ADD CONSTRAINT `rel_meta_funcionario_ibfk_2` FOREIGN KEY (`ID_FUNCIONARIO`) REFERENCES `funcionario` (`ID`), ADD CONSTRAINT `rel_meta_funcionario_ibfk_1` REFERENCES `meta` (`ID`); FOREIGN KEY (`ID_META`)

--- Restries para a tabela `rel_venda_produto` -ALTER TABLE `rel_venda_produto` ADD CONSTRAINT `rel_venda_produto_ibfk_1` REFERENCES `venda` (`ID`), FOREIGN KEY (`ID_VENDA`)

ADD CONSTRAINT `rel_venda_produto_ibfk_2` FOREIGN KEY (`ID_PRODUTO`) REFERENCES `produto` (`ID`);

--- Restries para a tabela `venda` -ALTER TABLE `venda` ADD CONSTRAINT `venda_ibfk_2` FOREIGN KEY (`ID_FUNCIONARIO`) REFERENCES `funcionario` (`ID`), ADD CONSTRAINT `venda_ibfk_1` FOREIGN KEY (`ID_CLIENTE`) REFERENCES `cliente` (`ID`);

Consultas necessrias ao sistema Busca de funcionrios por nome: SELECT * FROM funcionario WHERE NOME LIKE %nome desejado% ORDER BY NOME ASC; Busca de funcionrios por nome e tipo: SELECT * FROM funcionario WHERE (ID_TP_FUNCIONARIO = id_tp_funcionario desejado AND(NOME LIKE "%nome desejado%")) ORDER BY NOME ASC; Busca de vendas por funcionrio: SELECT venda.*, funcionario.* FROM venda, funcionario WHERE FUNCIONARIO.ID = VENDA.ID_FUNCIONARIO AND FUNCIONARIO.NOME LIKE "%nome do funcionrio desejado%"; Busca de vendas por produto: SELECT rel_venda_produto.*, venda.*, produto.* FROM rel_venda_produto, venda, produto WHERE (rel_venda_produto.ID_VENDA = venda.ID and (rel_venda_produto.ID_PRODUTO = produto.ID)) and (produto.NOME LIKE "%nome do produto desejado%"); Busca do total de vendas por produto: SELECT ID_PRODUTO, SUM(rel_venda_produto.QTDADE) FROM rel_venda_produto GROUP BY rel_venda_produto.ID_PRODUTO; Busca do total de vendas por funcionrio: SELECT ID_FUNCIONARIO, venda.ID_FUNCIONARIO; COUNT(venda.ID) FROM venda GROUP BY

Referncias Bibliogrficas

ELMASRI, Ramez E. & NAVATHE. Shamkant B. Sistemas de Banco de Dados: Fundamentos e Aplicaes. Pearson /Addison Wesley, 4 edio, 2005.

HEUSER, C. A. Projeto de Banco de Dados 4: Srie livros didticos.Porto Alegre : Sagra Luzzato, 1998.

DATE, C. Introduo a Sistemas de Banco de Dados. Campus, 7 ed.

SILBERSCHATZ, A., e KORTH, S. e SUDARSHAN, S. Sistema de Banco de Dados, 3a edio, Makron Books, 1999.

http://dev.mysql.com/doc/refman/5.0/en/index.html. 20:17.

Acessado

em

22/11/2009

Você também pode gostar