typestar

schema_setup.sql en SQL

Una migración completa: eliminar, crear, indexar y sembrar el esquema de una tienda pequeña.

-- Esquema de la tienda, seguro de reejecutar desde cero.
PRAGMA foreign_keys = ON;

DROP VIEW IF EXISTS order_summary;
DROP TABLE IF EXISTS order_items;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS products;
DROP TABLE IF EXISTS customers;

CREATE TABLE customers (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE,
    country TEXT NOT NULL DEFAULT 'US',
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE products (
    sku TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    price REAL NOT NULL CHECK (price >= 0)
);

CREATE TABLE orders (
    id INTEGER PRIMARY KEY,
    customer_id INTEGER NOT NULL REFERENCES customers(id),
    status TEXT NOT NULL DEFAULT 'pending',
    total REAL NOT NULL DEFAULT 0,
    placed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE order_items (
    order_id INTEGER NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
    sku TEXT NOT NULL REFERENCES products(sku),
    quantity INTEGER NOT NULL CHECK (quantity > 0),
    UNIQUE (order_id, sku)
);

CREATE INDEX IF NOT EXISTS idx_orders_customer
    ON orders (customer_id, placed_at DESC);

CREATE VIEW order_summary AS
SELECT
    o.id,
    c.name AS customer,
    o.status,
    o.total,
    COUNT(i.sku) AS lines
FROM orders AS o
JOIN customers AS c
    ON c.id = o.customer_id
LEFT JOIN order_items AS i
    ON i.order_id = o.id
GROUP BY o.id, c.name, o.status, o.total;

INSERT INTO customers (name, email, country)
VALUES
    ('Ada Lovelace', 'ada@example.com', 'GB'),
    ('Grace Hopper', 'grace@example.com', 'US');

INSERT INTO products (sku, name, price)
VALUES
    ('TS-001', 'Keyboard', 89.00),
    ('TS-002', 'Keycap set', 45.50);

Cómo funciona

  1. Las sentencias corren en orden de dependencia: padres antes que hijos.
  2. IF EXISTS e IF NOT EXISTS hacen todo el archivo re-ejecutable.
  3. Una vista al final le da a la aplicación un solo nombre amable que consultar.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
64
Caracteres a escribir
1588
Tokens
336
Ritmo de tres estrellas
85 tpm

Al ritmo de tres estrellas de 85 tokens por minuto, este intento toma unos 237 segundos.

Escribe este fragmento

Paso 1 de 2 en Bis; paso 22 de 23 en Fundamentos del lenguaje.

← Anterior Siguiente →