-- =============================================
-- DOCE & SABOR - Versão MySQL (myCompiler)
-- =============================================
CREATE TABLE pessoas (
cpf CHAR(11) NOT NULL,
nome VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL,
data_nascimento DATE NULL,
senha_hash VARCHAR(255) NOT NULL,
data_cadastro DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ativo TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (cpf),
UNIQUE KEY uk_pessoas_email (email)
);
CREATE TABLE clientes (
cpf CHAR(11) NOT NULL,
observacao TEXT NULL,
data_ultima_compra DATETIME NULL,
PRIMARY KEY (cpf),
CONSTRAINT fk_clientes_pessoas
FOREIGN KEY (cpf) REFERENCES pessoas (cpf)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE administradores (
cpf CHAR(11) NOT NULL,
nivel_acesso ENUM('operador','gerente','super') NOT NULL DEFAULT 'operador',
data_admissao DATE NULL,
PRIMARY KEY (cpf),
CONSTRAINT fk_administradores_pessoas
FOREIGN KEY (cpf) REFERENCES pessoas (cpf)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE telefones (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
pessoa_cpf CHAR(11) NOT NULL,
numero VARCHAR(20) NOT NULL,
tipo ENUM('celular','residencial','comercial','whatsapp','outro') NOT NULL,
principal TINYINT(1) NOT NULL DEFAULT 0,
ativo TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
CONSTRAINT fk_telefones_pessoas
FOREIGN KEY (pessoa_cpf) REFERENCES pessoas (cpf)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE enderecos (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
pessoa_cpf CHAR(11) NOT NULL,
logradouro VARCHAR(150) NOT NULL,
numero VARCHAR(20) NOT NULL,
complemento VARCHAR(80) NULL,
bairro VARCHAR(80) NOT NULL,
cidade VARCHAR(80) NOT NULL,
estado CHAR(2) NOT NULL,
cep CHAR(8) NOT NULL,
ponto_referencia VARCHAR(150) NULL,
principal TINYINT(1) NOT NULL DEFAULT 1,
ativo TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
CONSTRAINT fk_enderecos_pessoas
FOREIGN KEY (pessoa_cpf) REFERENCES pessoas (cpf)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE categorias (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome VARCHAR(80) NOT NULL,
ativo TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
UNIQUE KEY uk_categorias_nome (nome)
);
CREATE TABLE produtos (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
categoria_id INT UNSIGNED NOT NULL,
nome VARCHAR(120) NOT NULL,
descricao TEXT NULL,
preco DECIMAL(10,2) NOT NULL,
quantidade_estoque INT UNSIGNED NOT NULL DEFAULT 0,
estoque_minimo INT UNSIGNED NOT NULL DEFAULT 5,
imagem_url VARCHAR(255) NULL,
ativo TINYINT(1) NOT NULL DEFAULT 1,
data_criacao DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
data_atualizacao DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
CONSTRAINT fk_produtos_categorias
FOREIGN KEY (categoria_id) REFERENCES categorias (id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE pedidos (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
numero_pedido VARCHAR(20) NOT NULL,
cliente_cpf CHAR(11) NOT NULL,
endereco_entrega_id INT UNSIGNED NOT NULL,
status ENUM('pendente','pago','em_preparo','pronto','em_entrega','entregue','cancelado')
NOT NULL DEFAULT 'pendente',
valor_total DECIMAL(10,2) NOT NULL,
observacao TEXT NULL,
data_pedido DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
data_atualizacao DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_pedidos_numero (numero_pedido),
CONSTRAINT fk_pedidos_clientes
FOREIGN KEY (cliente_cpf) REFERENCES clientes (cpf)
ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_pedidos_enderecos
FOREIGN KEY (endereco_entrega_id) REFERENCES enderecos (id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE itens_pedido (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
pedido_id INT UNSIGNED NOT NULL,
produto_id INT UNSIGNED NOT NULL,
quantidade INT UNSIGNED NOT NULL,
preco_unitario DECIMAL(10,2) NOT NULL,
subtotal DECIMAL(10,2) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_itens_pedido (pedido_id, produto_id),
CONSTRAINT fk_itens_pedido_pedidos
FOREIGN KEY (pedido_id) REFERENCES pedidos (id)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_itens_pedido_produtos
FOREIGN KEY (produto_id) REFERENCES produtos (id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE pagamentos (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
pedido_id INT UNSIGNED NOT NULL,
plataforma_externa_id VARCHAR(100) NOT NULL,
status ENUM('pendente','aprovado','recusado','estornado') NOT NULL DEFAULT 'pendente',
valor DECIMAL(10,2) NOT NULL,
metodo VARCHAR(50) NOT NULL,
data_pagamento DATETIME NULL,
dados_retorno JSON NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_pagamentos_pedido (pedido_id),
CONSTRAINT fk_pagamentos_pedidos
FOREIGN KEY (pedido_id) REFERENCES pedidos (id)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE entregas (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
pedido_id INT UNSIGNED NOT NULL,
status_entrega ENUM('aguardando','saiu_para_entrega','entregue','falha')
NOT NULL DEFAULT 'aguardando',
data_prevista DATETIME NULL,
data_saida DATETIME NULL,
data_entrega DATETIME NULL,
administrador_cpf CHAR(11) NULL,
observacao TEXT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_entregas_pedido (pedido_id),
CONSTRAINT fk_entregas_pedidos
FOREIGN KEY (pedido_id) REFERENCES pedidos (id)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_entregas_administradores
FOREIGN KEY (administrador_cpf) REFERENCES administradores (cpf)
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE recibos (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
pedido_id INT UNSIGNED NOT NULL,
numero_recibo VARCHAR(30) NOT NULL,
data_emissao DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
caminho_pdf VARCHAR(255) NULL,
gerado_por_cpf CHAR(11) NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_recibos_pedido (pedido_id),
UNIQUE KEY uk_recibos_numero (numero_recibo),
CONSTRAINT fk_recibos_pedidos
FOREIGN KEY (pedido_id) REFERENCES pedidos (id)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_recibos_administradores
FOREIGN KEY (gerado_por_cpf) REFERENCES administradores (cpf)
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE movimentacoes_estoque (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
produto_id INT UNSIGNED NOT NULL,
tipo ENUM('entrada','saida','ajuste') NOT NULL,
quantidade INT UNSIGNED NOT NULL,
motivo VARCHAR(150) NOT NULL,
administrador_cpf CHAR(11) NULL,
pedido_id INT UNSIGNED NULL,
data DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
CONSTRAINT fk_movimentacoes_produtos
FOREIGN KEY (produto_id) REFERENCES produtos (id)
ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_movimentacoes_administradores
FOREIGN KEY (administrador_cpf) REFERENCES administradores (cpf)
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT fk_movimentacoes_pedidos
FOREIGN KEY (pedido_id) REFERENCES pedidos (id)
ON DELETE SET NULL ON UPDATE CASCADE
);
SHOW TABLES;
To embed this project on your website, copy the following code and paste it into your website's HTML: