Roberto é dono de um mercado no bairro de Vargem Grande, na cidade de Tupã. Ele herdou o negócio de seu pai, Gumercindo Oliveira, ela foi aberta em 1978 na garagem da casa da família, era uma pequena quitanda. Com o passar dos anos o negócio cresceu e Gumercindo foi obrigado a ir para outro ponto maior e ali permaneceu até os dias atuais.
Roberto, que agora é o novo dono do mercado continuou o negócio seguindo da mesma forma que o pai. Ele comprava diretamente com os fornecedores grandes volumes de produtos e armazenava em seu estoque. As vezes ele comprava muitos produtos que ainda havia em estoque causando uma sobrecarga de produtos, ele também tinha muitos produtos estragados, tais como: frutas, legumes, iogurtes, leites, frango etc. Também havia muitos produtos com o prazo de validade vencido.
Os funcionários eram poucos e faziam muitas coisas ao mesmo tempo. O açougueiro também ajudava no estoque, a moça da limpeza ajudava na organização dos produtos das prateleiras, além de ajudar na padaria, quanto o caixa estava vazio o operador ajudava a repor os laticínios e a limpar a loja. O repositor também fazia operação no caixa.
Ao realizar a venda o Roberto, que sabia o nome de quase todos os clientes, anotava em um caderno todos os produtos que vendia e que havia em estoque. Ao fim do dia , Roberto pegava o caderno de fazia os cálculos de o quanto havia vendido, somando o faturamento e realizando a atualização do estoque. Isso é feito todos os dias e toma um tempo considerável para que tudo seja feito.
Roberto fechava a loja as 18h, mas só ia para casa as 22h, após fazer todas as operações necessárias. Mesmo assim o negócio vai bem e Roberto pretende ir para outro ponto e aumentar o volume de negócios e contratar novos funcionários.
Marica, esposa de Roberto, vem conversando com ele há muito tempo para que ele contrate uma empresa para construir um sistema de informática para gerenciar o negócio e reduzir o tempo que ele passa trabalhando e tenha maior organização dos produtos, maior lucratividade e melhorar a gestão. Com a intenção de aumentar o negócio, Roberto está disposto a informatizar sua empresa. Vamos ajudá-lo. Iremos começar construindo o banco de dados
- Estoque;
- Produto;
- Venda;
- Detalhes da Venda;
- Cliente;
- Funcionário;
- Cargos;
- Usuário;
- Pagamento;
- Fornecedor;
- Endereço;
- Contato;
-- Comando para criar um novo banco de dados.
CREATE DATABASE casaoliveira;
-- comando para selecionar o banco de dados criado.
USE casaoliveira;
-- comando para a criação de tabelas.
CREATE TABLE usuario(
idusuario int auto_increment primary key,
nomeusuario varchar(50) not null unique,
senha varchar(255) not null,
criadoem datetime default current_timestamp(),
foto varchar(250) not null
);
CREATE TABLE funcionario(
idfuncionario int auto_increment primary key,
nomefuncionario varchar(50) not null,
cpf varchar(13) not null unique,
idcargo int not null,
expediente varchar(50) not null,
idusuario int not null,
idendereco int not null,
idcontato int not null
);
CREATE TABLE cargo(
idcargo int auto_increment primary key,
titulocargo varchar(30) not null unique,
salario decimal(7,2) not null,
departamento varchar(30) not null unique
);
CREATE TABLE contato(
idcontato int auto_increment primary key,
telefoneresidencial varchar(15),
telefonecelular varchar(15) not null unique,
email varchar(100) not null unique
);
CREATE TABLE endereco(
idendereco int auto_increment primary key,
tipologradouro enum("Rua","Avenida","Travessa","Estrada","Viela","Praça","Alameda"),
logradouro varchar(50) not null,
numero varchar(10) not null,
complemento varchar(30),
bairro varchar(30) not null,
cep varchar(10) not null,
cidade varchar(30) not null,
estado varchar(20) not null
);
CREATE TABLE fornecedor(
idfornecedor int auto_increment primary key,
razaosocial varchar(50) not null unique,
nomefantasia varchar(50) not null,
cnpj varchar(15) not null unique,
idcontato int not null,
idendereco int not null
);
CREATE TABLE produto(
idproduto int auto_increment primary key,
nomeproduto varchar(50) not null unique,
categoria enum("Frios","Limpeza","Laticinios","Cereais","Açougue","Bebidas","Pâes","Hortifruti"),
descricao text not null,
idfornecedor int not null,
preco decimal(6,2) not null
);
CREATE TABLE lote(
idlote int auto_increment primary key,
datafabricacao date not null,
datavalidade date not null,
idproduto int not null
);
CREATE TABLE estoque(
idestoque int auto_increment primary key,
idlote int not null,
quantidade int not null,
dataestoque datetime default current_timestamp()
);
CREATE TABLE cliente(
idcliente int auto_increment primary key,
nomecliente varchar(50) not null,
cpf varchar(13) not null unique,
datanascimento date not null,
idcontato int not null,
idendereco int not null
);
CREATE TABLE venda(
idvenda int auto_increment primary key,
idcliente int not null,
idfuncionario int not null,
datahora datetime default current_timestamp(),
total decimal(7,2) not null
);
CREATE TABLE detalhevenda(
iddetalhevenda int auto_increment primary key,
idvenda int not null,
idproduto int not null,
quantidade int not null,
subtotal decimal(7,2)
);
CREATE TABLE pagamento(
idpagamento int auto_increment primary key,
idvenda int not null,
formapagamento enum("Dinheiro","Crédito","Débito","PIX"),
observacao text not null
);
-- Alterar a tabela funcionário para adicionar uma chave
-- estrangeira e um relacionamento com a tabela de usuario
-- Funcionario
ALTER TABLE funcionario
ADD CONSTRAINT `fk.func_pk.usuario`
FOREIGN KEY funcionario(`idusuario`)
REFERENCES usuario(`idusuario`);
ALTER TABLE funcionario
ADD CONSTRAINT `fk.func_pk.cargo`
FOREIGN KEY funcionario(`idcargo`)
REFERENCES cargo(`idcargo`);
ALTER TABLE funcionario
ADD CONSTRAINT `fk.func_pk.endereco`
FOREIGN KEY funcionario(`idendereco`)
REFERENCES endereco(`idendereco`);
ALTER TABLE funcionario
ADD CONSTRAINT `fk.func_pk.contato`
FOREIGN KEY funcionario(`idcontato`)
REFERENCES contato(`idcontato`);
-- Fornecedor
ALTER TABLE fornecedor
ADD CONSTRAINT `fk.forne_pk.contato`
FOREIGN KEY fornecedor(`idcontato`)
REFERENCES contato(`idcontato`);
ALTER TABLE fornecedor
ADD CONSTRAINT `fk.forne_pk.endereco`
FOREIGN KEY fornecedor(`idendereco`)
REFERENCES endereco(`idendereco`);
-- Produto
ALTER TABLE produto
ADD CONSTRAINT `fk.produto_pk.fornecedor`
FOREIGN KEY produto(`idfornecedor`)
REFERENCES fornecedor(`idfornecedor`);
-- Lote
ALTER TABLE lote
ADD CONSTRAINT `fk.lote_pk.produto`
FOREIGN KEY lote(`idproduto`)
REFERENCES produto(`idproduto`);
-- Estoque
ALTER TABLE estoque
ADD CONSTRAINT `fk.esto_pk.lote`
FOREIGN KEY estoque(`idlote`)
REFERENCES lote(`idlote`);
-- Cliente
ALTER TABLE cliente
ADD CONSTRAINT `fk.cliente_pk.contato`
FOREIGN KEY cliente(`idcontato`)
REFERENCES contato(`idcontato`);
ALTER TABLE cliente
ADD CONSTRAINT `fk.cliente_pk.endereco`
FOREIGN KEY cliente(`idendereco`)
REFERENCES endereco(`idendereco`);
-- Venda
ALTER TABLE venda
ADD CONSTRAINT `fk.venda_pk.cliente`
FOREIGN KEY venda(`idcliente`)
REFERENCES cliente(`idcliente`);
ALTER TABLE venda
ADD CONSTRAINT `fk.venda_pk.funcionario`
FOREIGN KEY venda(`idfuncionario`)
REFERENCES funcionario(`idfuncionario`);
-- Detalhe venda
ALTER TABLE detalhevenda
ADD CONSTRAINT `fk.dv_pk.venda`
FOREIGN KEY detalhevenda(`idvenda`)
REFERENCES venda(`idvenda`);
ALTER TABLE detalhevenda
ADD CONSTRAINT `fk.dv_pk.produto`
FOREIGN KEY detalhevenda(`idproduto`)
REFERENCES produto(`idproduto`);
-- Pagamento
ALTER TABLE pagamento
ADD CONSTRAINT `fk.paga_pk.venda`
FOREIGN KEY pagamento(`idvenda`)
REFERENCES venda(`idvenda`);
-- comando que apaga o banco de dados.
-- drop database casaoliveira;