db-schema

Generate database schemas, migrations, and ERD diagrams from plain English descriptions — supports PostgreSQL, MySQL, SQLite, and MongoDB with proper indexes and constraints.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "db-schema" with this command: npx skills add matrixtrickery/db-schema-gen

DB Schema

Describe your data model in English. Get production-ready schema, migrations, and diagrams.

What It Does

Takes a plain English description of your data and generates:

  • SQL schema (CREATE TABLE statements with constraints)
  • Migration files (for Prisma, Drizzle, Knex, Alembic, etc.)
  • Entity-Relationship diagram (Mermaid or ASCII)
  • Indexes (auto-detected from common query patterns)
  • Seed data (realistic sample data for development)

Usage

From description:

db-schema "Users have many posts. Posts have many comments. Users can like posts."

With options:

db-schema "E-commerce with products, orders, customers" --dialect postgres --orm prisma

Options:

  • --dialectpostgres (default), mysql, sqlite, mongodb
  • --ormraw (default), prisma, drizzle, knex, sqlalchemy, typeorm
  • --formatsql (default), json, markdown
  • --diagram — include ERD diagram: mermaid (default), ascii, none
  • --seed — generate seed data (default: false)
  • --seed-count — rows per table for seed data (default: 10)

Generation Rules

Schema Design:

  1. Every table gets a primary keyid (BIGSERIAL for PG, AUTO_INCREMENT for MySQL, INTEGER AUTOINCREMENT for SQLite)
  2. Timestamps by defaultcreated_at and updated_at on every table
  3. Foreign keys with proper namingtable_id references table(id)
  4. ON DELETE behavior — CASCADE for owned relationships, SET NULL for optional
  5. Proper types — use appropriate types (TEXT not VARCHAR(255) for PG, TIMESTAMPTZ not TIMESTAMP)

Relationship Detection:

EnglishRelationshipImplementation
"has many"One-to-ManyFK on the "many" side
"belongs to"Many-to-OneFK on current table
"has one"One-to-OneFK with UNIQUE constraint
"many to many"Many-to-ManyJunction table
"can like/follow/tag"Many-to-ManyJunction table with metadata

Auto-Indexing:

PatternIndex Type
Foreign keysB-tree index
Email, usernameUNIQUE index
Created/updated datesB-tree index
Status/type/role columnsB-tree index
Full-text search fieldsGIN index (PG) / FULLTEXT (MySQL)
Slug/path columnsUNIQUE index
Composite lookupsComposite index

Type Mapping:

ConceptPostgreSQLMySQLSQLite
IDBIGSERIALBIGINT AUTO_INCREMENTINTEGER
Short textVARCHAR(N)VARCHAR(N)TEXT
Long textTEXTTEXTTEXT
MoneyNUMERIC(12,2)DECIMAL(12,2)REAL
BooleanBOOLEANTINYINT(1)INTEGER
TimestampTIMESTAMPTZDATETIMETEXT
JSONJSONBJSONTEXT
UUIDUUIDCHAR(36)TEXT
EnumCustom TYPEENUM(...)TEXT CHECK

Output (SQL):

-- Generated by db-schema
-- Description: E-commerce with products, orders, customers

CREATE TABLE customers (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    name VARCHAR(255) NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    price NUMERIC(12,2) NOT NULL CHECK (price >= 0),
    stock INTEGER NOT NULL DEFAULT 0,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    customer_id BIGINT NOT NULL REFERENCES customers(id) ON DELETE CASCADE,
    status VARCHAR(50) NOT NULL DEFAULT 'pending',
    total NUMERIC(12,2) NOT NULL DEFAULT 0,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE order_items (
    id BIGSERIAL PRIMARY KEY,
    order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
    product_id BIGINT NOT NULL REFERENCES products(id) ON DELETE RESTRICT,
    quantity INTEGER NOT NULL CHECK (quantity > 0),
    unit_price NUMERIC(12,2) NOT NULL
);

CREATE INDEX idx_orders_customer_id ON orders(customer_id);
CREATE INDEX idx_orders_status ON orders(status);
CREATE INDEX idx_order_items_order_id ON order_items(order_id);
CREATE INDEX idx_order_items_product_id ON order_items(product_id);

ERD Output (Mermaid):

erDiagram
    CUSTOMERS ||--o{ ORDERS : places
    ORDERS ||--|{ ORDER_ITEMS : contains
    PRODUCTS ||--o{ ORDER_ITEMS : "included in"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Cclaw

Open-source comedy AI + video editing + poster generation. Create standup/sketch/manzai/scripts, edit videos via FFmpeg, and generate comedy posters via canv...

Registry SourceRecently Updated
General

Dlazy Seedance 1.5 Pro

Convert images into dynamic dance videos using Doubao Seedance 1.5 Pro.

Registry SourceRecently Updated
General

Pod Template Pack

Use when user needs ready-to-use POD (Print on Demand) design keywords, title templates, and listing copy. Use when creating POD product listings for TikTok,...

Registry SourceRecently Updated
General

Dlazy Mj.Imagine

Generate artistic images using Midjourney (MJ) model. Supports text-to-image.

Registry SourceRecently Updated