Assists with database schema design and table creation.
Install
mkdir -p .claude/skills/schema-designer && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/3752" && unzip -o skill.zip -d .claude/skills/schema-designer && rm skill.zipInstalls to .claude/skills/schema-designer
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Help design database schemas, create tables, and plan data models. Activates when users ask to create tables, design schemas, or model data relationships.Key capabilities
- →Generate SQL CREATE TABLE statements
- →Model database relationships and entities
- →Normalize database schema designs
- →Provide data type recommendations for SQL dialects
How it works
It guides users through schema design principles and generates DDL statements based on entity requirements and common design patterns.
Inputs & outputs
When to use schema-designer
- →Create SQL tables for new features
- →Design database schema relationships
- →Select appropriate data types for columns
About this skill
Schema Designer
Help users design database schemas, create tables, and model data relationships.
When to Use
Activate when user asks:
- "Create a table for storing orders"
- "Design a schema for a blog"
- "Add a column to track user preferences"
- "How should I model this relationship?"
Workflow
1. Understand Requirements
Ask clarifying questions:
- What data needs to be stored?
- What are the relationships between entities?
- What queries will be common?
- What's the expected data volume?
2. Check Existing Schema
whodb_tables() → See what already exists
whodb_columns(table="related_table") → Understand existing structure
3. Design the Schema
Follow database design principles:
- Normalize to reduce redundancy
- Use appropriate data types
- Define primary keys
- Establish foreign key relationships
- Add indexes for common queries
4. Generate DDL
Provide CREATE TABLE statements with explanations.
Data Type Guidelines
Identifiers
| Use Case | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
| Auto-increment ID | SERIAL / BIGSERIAL | INT AUTO_INCREMENT | INTEGER PRIMARY KEY |
| UUID | UUID | CHAR(36) | TEXT |
Text
| Use Case | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
| Short text (<255) | VARCHAR(n) | VARCHAR(n) | TEXT |
| Long text | TEXT | TEXT | TEXT |
| Fixed length | CHAR(n) | CHAR(n) | TEXT |
Numbers
| Use Case | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
| Integer | INTEGER | INT | INTEGER |
| Big integer | BIGINT | BIGINT | INTEGER |
| Decimal (money) | NUMERIC(10,2) | DECIMAL(10,2) | REAL |
| Float | REAL | FLOAT | REAL |
Dates
| Use Case | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
| Date only | DATE | DATE | TEXT |
| Timestamp | TIMESTAMP | DATETIME | TEXT |
| With timezone | TIMESTAMPTZ | TIMESTAMP | TEXT |
Boolean
| PostgreSQL | MySQL | SQLite |
|---|---|---|
BOOLEAN | TINYINT(1) | INTEGER |
Common Patterns
Users Table
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_users_email ON users(email);
One-to-Many (Orders → Order Items)
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id),
status VARCHAR(20) DEFAULT 'pending',
total NUMERIC(10,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE order_items (
id SERIAL PRIMARY KEY,
order_id INTEGER NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id INTEGER NOT NULL REFERENCES products(id),
quantity INTEGER NOT NULL DEFAULT 1,
unit_price NUMERIC(10,2) NOT NULL
);
CREATE INDEX idx_order_items_order ON order_items(order_id);
Many-to-Many (Users ↔ Roles)
CREATE TABLE roles (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE user_roles (
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
role_id INTEGER NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
PRIMARY KEY (user_id, role_id)
);
Soft Delete Pattern
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
deleted_at TIMESTAMP NULL, -- NULL = not deleted
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Query active posts
SELECT * FROM posts WHERE deleted_at IS NULL;
Audit Trail Pattern
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
table_name VARCHAR(50) NOT NULL,
record_id INTEGER NOT NULL,
action VARCHAR(10) NOT NULL, -- INSERT, UPDATE, DELETE
old_values JSONB,
new_values JSONB,
user_id INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_audit_table_record ON audit_log(table_name, record_id);
Best Practices
- Always define PRIMARY KEY - Every table needs one
- Use foreign keys - Enforce referential integrity
- Add NOT NULL - Unless the column is truly optional
- Create indexes - On foreign keys and frequently queried columns
- Use appropriate types - Don't store numbers as strings
- Add timestamps -
created_atandupdated_atare almost always useful - Name consistently -
user_idnotuserIdorUserID - Avoid reserved words - Don't name columns
order,user,group
Migration Safety
When modifying existing tables:
-- Safe: Adding nullable column
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- Safe: Adding column with default
ALTER TABLE users ADD COLUMN active BOOLEAN DEFAULT true;
-- Caution: Adding NOT NULL (requires default or backfill)
ALTER TABLE users ADD COLUMN status VARCHAR(20) NOT NULL DEFAULT 'active';
-- Caution: Dropping column (data loss)
ALTER TABLE users DROP COLUMN old_column;
-- Caution: Changing type (may fail on existing data)
ALTER TABLE users ALTER COLUMN age TYPE INTEGER;
When not to use it
- →Executing DDL statements directly against production databases
- →Managing database migrations for complex existing systems
Limitations
- →Does not perform live database schema validation
- →Requires manual verification of generated DDL
How it compares
It provides structured design guidance and dialect-specific syntax instead of requiring manual SQL drafting.
Compared to similar skills
schema-designer side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| schema-designer (this skill) | 1 | 7mo | No flags | Intermediate |
| database-design | 6 | 6mo | Review | Intermediate |
| database-schema-designer | 6 | 6mo | No flags | Intermediate |
| managing-database-sharding | 1 | 27d | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by clidey
View all by clidey →You might also like
database-design
davila7
Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.
database-schema-designer
davila7
Design robust, scalable database schemas for SQL and NoSQL databases. Provides normalization guidelines, indexing strategies, migration patterns, constraint design, and performance optimization. Ensures data integrity, query performance, and maintainable data models.
managing-database-sharding
jeremylongshore
Process use when you need to work with database sharding. This skill provides horizontal sharding strategies with comprehensive guidance and automation. Trigger with phrases like "implement sharding", "shard database", or "distribute data".
database-design
Harmitx7
Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.
database-specialist
FelipeArruda
Use this skill when the task centers on database design or behavior: schema modeling, SQL, indexes, constraints, migrations, query tuning, data integrity, transactional logic, or tradeoffs across engines such as SQLite, PostgreSQL, and MySQL.
design
Hainrixz
Greenfield database design — pick the right engine for a new project, compare it against the boring default, and hand back a starter data model with a diagram. Recommendation mode (module M0); never scored, never destructive. Use when the user is starting fresh and asks what database to use, how to