Criação das Tabelas
Este script SQL é responsável por criar toda a estrutura do banco de dados da lanchonete, incluindo tabelas, colunas, chaves primárias e relacionamentos.
Script de Criação (PostgreSQL)
-- =============================================
-- CRIAÇÃO DAS TABELAS - Lanchonete Sabor do Bairro
-- =============================================
CREATE TABLE IF NOT EXISTS clientes (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
telefone VARCHAR(15) UNIQUE,
email VARCHAR(100) UNIQUE,
endereco VARCHAR(200),
data_cadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS categorias (
id SERIAL PRIMARY KEY,
nome VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS produtos (
id SERIAL PRIMARY KEY,
categoria_id INTEGER NOT NULL REFERENCES categorias(id) ON DELETE RESTRICT,
nome VARCHAR(80) NOT NULL,
descricao TEXT,
preco DECIMAL(10,2) NOT NULL CHECK (preco > 0),
disponivel BOOLEAN DEFAULT TRUE,
imagem_url TEXT
);
CREATE TABLE IF NOT EXISTS pedidos (
id SERIAL PRIMARY KEY,
cliente_id INTEGER REFERENCES clientes(id) ON DELETE SET NULL,
data_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
tipo VARCHAR(20) DEFAULT 'consumo_local' CHECK (tipo IN ('consumo_local', 'retirada')),
status VARCHAR(20) DEFAULT 'pendente' CHECK (status IN ('pendente', 'em_preparo', 'pronto', 'entregue', 'cancelado')),
observacao TEXT,
total DECIMAL(10,2) DEFAULT 0.00 CHECK (total >= 0)
);
CREATE TABLE IF NOT EXISTS itens_pedido (
id SERIAL PRIMARY KEY,
pedido_id INTEGER NOT NULL REFERENCES pedidos(id) ON DELETE CASCADE,
produto_id INTEGER NOT NULL REFERENCES produtos(id) ON DELETE RESTRICT,
quantidade INTEGER NOT NULL DEFAULT 1 CHECK (quantidade > 0),
preco_unitario DECIMAL(10,2) NOT NULL CHECK (preco_unitario > 0),
observacao_item TEXT
);
CREATE TABLE IF NOT EXISTS pagamentos (
id SERIAL PRIMARY KEY,
pedido_id INTEGER NOT NULL UNIQUE REFERENCES pedidos(id) ON DELETE CASCADE,
metodo VARCHAR(20) NOT NULL CHECK (metodo IN ('dinheiro', 'pix', 'cartao_credito', 'cartao_debito')),
valor DECIMAL(10,2) NOT NULL CHECK (valor > 0),
data_pagamento TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'pendente' CHECK (status IN ('pendente', 'pago', 'cancelado'))
);
-- Índices recomendados
CREATE INDEX IF NOT EXISTS idx_pedidos_status ON pedidos(status);
CREATE INDEX IF NOT EXISTS idx_pedidos_cliente ON pedidos(cliente_id);
CREATE INDEX IF NOT EXISTS idx_itens_pedido ON itens_pedido(pedido_id);
COMMENT ON TABLE pedidos IS 'Pedidos da lanchonete';