Você está na página 1de 18

ANHANGUERA EDUCACIONAL S.A.

FACULDADE ANHANGUERA-FACNET
SISTEMAS DE INFORMAÇÃO

ATPS PROGRAMAÇÃO EM BANCO DE DADOS

PROFESSOR ANDRE COSTA

BRASILIA, 26 DE SETEMBRO DE 2014

EMERSON DE CARVALHO RA 6277274464


WERLEY RA 6823495257
THIAGO MUSTAFÁ RA 1299971312
JONAS NASCIMETNO RA 1299682690
LUCAS FILIPE RA 1299256785

ATPS PROGRAMAÇÃO EM BANCO DE DADOS

Atividade Prática supervisionada


apresentada a disciplina de Programação
em banco de dados para obtenção de nota
do primeiro bimestre de Bacharel em
Sistemas de Informação, da Anhanguera
Educacional LTDA-Unidade Facnet.
Professor: Andre Costa
Conteúdo: Banco de dados

BRASÍLIA, 2014

Relatório 1: Banco de Dados


1.1 Análises dos requisitos da estrutura do BD
ITEM REQUERIMENTO
CONCEITOS BÁSICOS

RF1 Permitir o cadastramento de produtos

RF2 Permitir o cadastro de fornecedores

RF3 Permitir o cadastro de clientes

RF4 Permitir o cadastro de funcionários

RF5 Permitir o cadastro de usuários

RF6 Permitir entradas e saídas de materiais,


cancelamento ou alteração atualizando os saldos do
estoque em tempo real após cada movimentação.

RF7 Permitir que ao processar qualquer tipo de


movimento no Sistema (entrada e saída) o preço
médio unitário do produto no movimento seja
atualizado em tempo real.

RF8 Permitir o lançamento de receitas e despesas

RF9 Permitir o controle de produção

RF10 Relatório de solicitações de compras por período.

RF11 Emitir alertas quando o estoque zerar com qualquer


produto

RF12 Emitir relatório de vendas por período

RF13 Emitir relatório de produtos mais vendidos

RF14 Emitir relatório de despesas e receitas

ITEM REQUERIMENTO
CONCEITOS BÁSICOS

RNF1 Criptografia em senhas

RNF2 Liberar acesso aos menus do sistema de acordo


com a hierarquia do usuário

RNF3 Teclas de atalho para as funções mais utilizadas

RNF4 Fazer backup das informações


RNF5 Restaurar dados perdidos

RNF6 O sistema deverá ser executado em plataforma


Windows, Linux e Mac - OS

RNF7 O sistema deverá estar no ar por 24 horas

RNF8 O sistema deve garantir que os dados estão


protegidos de acessos não autorizados

RNF9 O sistema somente será capaz de rodar em


processadores de 2 núcleos ou superior

1.2 Projeto Conceitual do BD


1.3 Projeto Logico

1.4 Projeto físico


-- MySQL Script generated by MySQL Workbench
-- 11/19/14 19:06:42
-- Model: New Model Version: 1.0
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE,
SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `PadariaBD` DEFAULT CHARACTER SET
utf8 COLLATE utf8_general_ci ;
USE `PadariaDB` ;

-- -----------------------------------------------------
-- Table `mydb`.`Produto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `PadariaBD`.`Produto` (
`idProduto` INT AUTO_INCREMENT NOT NULL,
`codProduto` INT NOT NULL,
`nmProduto` VARCHAR(45) NOT NULL,
`unidade` varchar (15) NOT NULL,
`precoCustoProd` FLOAT NOT NULL,
`precoVendaProd` FLOAT NOT NULL,
PRIMARY KEY (`idProduto`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`Entrada`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `PadariaBD`.`Entrada` (
`idEntrada` INT AUTO_INCREMENT NOT NULL,
`dataOperacao` DATETIME NOT NULL,
`qtdEstoque` INT NOT NULL,
`Produto_idProduto` INT NOT NULL,
PRIMARY KEY (`idEntrada`, `Produto_idProduto`),
INDEX `fk_Entrada_Produto1_idx` (`Produto_idProduto` ASC),
CONSTRAINT `fk_Entrada_Produto1`
FOREIGN KEY (`Produto_idProduto`)
REFERENCES `mydb`.`Produto` (`idProduto`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`Saida`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `PadariaBD`.`Saida` (
`idSaida` INT AUTO_INCREMENT NOT NULL,
`qtdVenda` INT NOT NULL,
`vlrVenda` FLOAT NOT NULL,
`subTotalVenda` FLOAT NOT NULL,
`Produto_idProduto` INT NOT NULL,
PRIMARY KEY (`idSaida`, `Produto_idProduto`),
INDEX `fk_Saida_Produto1_idx` (`Produto_idProduto` ASC),
CONSTRAINT `fk_Saida_Produto1`
FOREIGN KEY (`Produto_idProduto`)
REFERENCES `mydb`.`Produto` (`idProduto`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`Movimentacao`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `PadariaBD`.`Movimentacao` (
`idMovimentacao` INT AUTO_INCREMENT NOT NULL,
`dataHoraMov` DATETIME NOT NULL,
`vlrRecebido` FLOAT NOT NULL,
`Saida_idSaida` INT NOT NULL,
PRIMARY KEY (`idMovimentacao`, `Saida_idSaida`),
INDEX `fk_Movimentacao_Saida1_idx` (`Saida_idSaida` ASC),
CONSTRAINT `fk_Movimentacao_Saida1`
FOREIGN KEY (`Saida_idSaida`)
REFERENCES `mydb`.`Saida` (`idSaida`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`TabLog`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `PadariaBD`.`TabLog` (
`idLog` INT NOT NULL AUTO_INCREMENT,
`descrMsg` VARCHAR(45) NOT NULL,
`dataLog` TIMESTAMP NULL,
`idProduto` int,
PRIMARY KEY (`idLog`),
CONSTRAINT `idProduto`
FOREIGN KEY (idProduto)
REFERENCES `PadariaBD`.`Produto` (idProduto)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Relatório 2 – Estrutura do Banco de Dados

Insert Tabela Produto


insert into
Produto(idProduto,codProduto,nmProduto,unidade,precoCustoProd,precoVendaProd)
values (001,8541,'Farinha de Trigo','kg','2.50','5.25');
insert into
Produto(idProduto,codProduto,nmProduto,unidade,precoCustoProd,precoVendaProd)
values (002,8542,'Queijo Mussarela','kg','15.88','29.00');
insert into
Produto(idProduto,codProduto,nmProduto,unidade,precoCustoProd,precoVendaProd)
values (003,8543,'Presunto Sadia','kg','14.20','25.00');
insert into
Produto(idProduto,codProduto,nmProduto,unidade,precoCustoProd,precoVendaProd)
values (004,8544,'Manteiga Qually','UND','1.50','3.79');
insert into
Produto(idProduto,codProduto,nmProduto,unidade,precoCustoProd,precoVendaProd)
values (005,8545,'Iorgute Morango','BD','1.25','2.80');
Insert Tabela Entrada
insert into Entrada (dataOperacao,qtdEstoque,Produto_idProduto)
values ('2014-05-12',06,002);
insert into Entrada (dataOperacao,qtdEstoque,Produto_idProduto)
values ('2014-11-02',30,001);
insert into Entrada (dataOperacao,qtdEstoque,Produto_idProduto)
values ('2014-11-03',50,005);
insert into Entrada (dataOperacao,qtdEstoque,Produto_idProduto)
values ('2014-11-12',10,003);
insert into Entrada (dataOperacao,qtdEstoque,Produto_idProduto)
values ('2014-05-25',100,004);

Insert Tabela Saída


insert into Saida (idSaida,qtdVenda,vlrVenda,subTotalVenda,Produto_idProduto)
values (123,02,'5.25','10.50',001);
insert into Saida (idSaida,qtdVenda,vlrVenda,subTotalVenda,Produto_idProduto)
values (124,03,'29.00',03 * vlrVenda,002);
insert into Saida (idSaida,qtdVenda,vlrVenda,subTotalVenda,Produto_idProduto)
values (125,01,'25.00',01 * vlrVenda,003);
insert into Saida (idSaida,qtdVenda,vlrVenda,subTotalVenda,Produto_idProduto)
values (126,15,'3.79',15 * vlrVenda,004);
insert into Saida (idSaida,qtdVenda,vlrVenda,subTotalVenda,Produto_idProduto)
values (127,50,'2.80',50 * vlrVenda,005);

Insert tabela Movimentação

insert into Movimentacao (idMovimentacao,dataHoraMov,vlrRecebido,Saida_idSaida)


values (321,'2014-05-12 14:00:00',140,127);
insert into Movimentacao (idMovimentacao,dataHoraMov,vlrRecebido,Saida_idSaida)
values (322,'2014-11-08 21:35:05',56.85,126);
insert into Movimentacao (idMovimentacao,dataHoraMov,vlrRecebido,Saida_idSaida)
values (323,'2014-05-12 09:50:15',10.50,123);
insert into Movimentacao (idMovimentacao,dataHoraMov,vlrRecebido,Saida_idSaida)
values (324,'2014-08-01 12:55:50',87,124);
insert into Movimentacao (idMovimentacao,dataHoraMov,vlrRecebido,Saida_idSaida)
values (325,'2014-08-02 18:05:00',25,125);
Selecione todos os campos da tabela Produtos

Selecione todos os campos da tabela Produto onde o valor da venda está entre 10 e
30 reais.
Mostre o valor da soma de todas as vendas

Mostre o código do produto e o seu respectivo nome que comece com a letra Q
Qual a hora, dia, mês e ano da última movimentação no banco?

Mostre o nome dos produto, código e quantidade em estoque dos produtos com
idSaida entre 125 e 127
Procedure e Trigger

Sempre que um produto estiver com estoque menor que 5, um registro no banco de
dados deverá acusar o código do produto e a mensagem Estoque baixo e Sempre que
um produto estiver com estoque maior que 300, um registro no banco de dados deverá
acusar o código do produto e a mensagem Estoque Alto.
Foi feito uma trigger para fazer a deleção do estoque toda vez que uma venda for
efetuada.
A procedure complementa a trigger inserindo as mensagens na tabLog.
O código abaixo executa este comando:

DELIMITER //

DELIMITER //

create trigger Trg_Aviso after insert


on saida
for each row

begin

update Entrada set qtdEstoque = qtdEstoque - new.qtdVenda


where Produto_idProduto = new.Produto_idProduto;

call inserir(new.Produto_idProduto);

end //

DELIMITER ;

DELIMITER //

CREATE PROCEDURE inserir(produto int)

BEGIN
if(select qtdEstoque from Entrada where Produto_idProduto =
produto)>300 then
insert into tabLog(descrMsg,idProduto,dataLog) values ('Estoque
Alto',Produto,now());
elseif(select qtdEstoque from Entrada where Produto_idProduto = produto)
<= 5 then
insert into tabLog(descrMsg,idProduto,dataLog) values ('Estoque Baixo',
produto);
end if;
END//

DELIMITER ;

Você também pode gostar