Diseñar bases de datos y escribir SQL con Cerewro: schema, queries y optimización

Describe tu modelo de datos en lenguaje natural y Cerewro crea el schema SQL completo, relaciones, índices y las queries más complejas (JOINs, CTEs, ventanas). También optimiza queries lentas con EXPLAIN ANALYZE.

Diseñar bases de datos y escribir SQL con Cerewro

Describe tu modelo de datos en lenguaje natural y Cerewro crea el schema SQL completo con relaciones, índices y constraints. También escribe las queries más complejas (JOINs, CTEs, ventanas) y optimiza queries lentas con EXPLAIN ANALYZE.

Diseñar schema desde descripción

Cerewro Chat — Crear schema
Diseña el schema SQL para un sistema de e-commerce con: usuarios, productos con categorías y variantes, carritos, pedidos con líneas de pedido, pagos y reseñas. MySQL 8, con índices y claves foráneas.
Schema generado por Cerewro
CREATE TABLE users (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  email       VARCHAR(255) UNIQUE NOT NULL,
  password    VARCHAR(255) NOT NULL,
  name        VARCHAR(100),
  created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_email (email)
);

CREATE TABLE categories (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  name        VARCHAR(100) NOT NULL,
  parent_id   INT,
  FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL
);

CREATE TABLE products (
  id           INT AUTO_INCREMENT PRIMARY KEY,
  category_id  INT NOT NULL,
  name         VARCHAR(255) NOT NULL,
  price        DECIMAL(10,2) NOT NULL,
  stock        INT DEFAULT 0,
  created_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (category_id) REFERENCES categories(id),
  INDEX idx_category (category_id),
  INDEX idx_price (price)
);

CREATE TABLE orders (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  user_id     INT NOT NULL,
  status      ENUM('pending','paid','shipped','delivered','cancelled') DEFAULT 'pending',
  total       DECIMAL(10,2) NOT NULL,
  created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES users(id),
  INDEX idx_user_status (user_id, status)
);

Queries complejas con Cerewro

Query con CTE y ventana
Escribe una query MySQL que muestre los 10 mejores clientes por ventas del último año, con su nombre, total gastado, número de pedidos y ranking.
SQL generado
WITH customer_stats AS (
  SELECT
    u.id,
    u.name,
    u.email,
    COUNT(o.id)       AS num_pedidos,
    SUM(o.total)      AS total_gastado
  FROM users u
  JOIN orders o ON o.user_id = u.id
  WHERE o.status = 'delivered'
    AND o.created_at >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
  GROUP BY u.id, u.name, u.email
)
SELECT
  RANK() OVER (ORDER BY total_gastado DESC) AS ranking,
  name,
  email,
  num_pedidos,
  ROUND(total_gastado, 2) AS total_gastado
FROM customer_stats
ORDER BY total_gastado DESC
LIMIT 10;

Optimizar queries lentas

Analizar y optimizar con Cerewro
Esta query tarda 8 segundos en producción (MySQL). Analiza el plan de ejecución con EXPLAIN, identifica el problema y propón los índices o reescritura necesarios:

SELECT * FROM orders o
JOIN users u ON u.id = o.user_id
JOIN order_items oi ON oi.order_id = o.id
WHERE u.country = 'ES' AND o.created_at > '2024-01-01'
ORDER BY o.total DESC
Migraciones automáticas: Pide a Cerewro: "Genera los scripts de migración para añadir la tabla reviews al schema existente, con rollback incluido". Recibirás los archivos UP y DOWN compatibles con tu ORM (Knex, Sequelize, TypeORM, etc.).