Simulador

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';