From godmode
Designs relational and NoSQL schemas with ER modeling, normalization, denormalization, migrations, and validation using Zod or Protobuf. For data modeling tasks.
How this skill is triggered — by the user, by Claude, or both
Slash command
/godmode:schemaThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- `/godmode:schema`, "data model", "design the schema"
/godmode:schema, "data model", "design the schema"DOMAIN ANALYSIS:
Application: <purpose>
Entities: <core business objects>
Access patterns: <primary read/write ops>
Scale: <volume per entity>
Consistency: <strong | eventual | mixed>
Database: <PostgreSQL | MySQL | MongoDB | etc>
Key questions:
1. What are the core entities? (nouns)
2. How do they relate? (1:1, 1:N, M:N)
3. Most frequent queries? (reads drive schema)
4. Write-to-read ratio? (heavy writes vs reads)
5. Expected volume? (thousands vs billions)
6. Consistency guarantees? (financial vs analytics)
7. Will schema evolve frequently?
8. Multi-tenancy requirements?
ENTITY CATALOG:
| Entity | Key Attributes | Volume |
|----------|----------------------------|--------|
| User | id, email, name, role | 100K |
| Project | id, name, org_id | 500K |
| Task | id, title, status, user_id | 5M |
| Comment | id, body, author_id | 20M |
Organization 1:N -> Project 1:N -> Task 1:N -> Comment
Task N:1 -> User (assignee), Task M:N -> Tag
1NF: Atomic values, no repeating groups
2NF: No partial dependencies on composite key
3NF: No transitive dependencies
BCNF: Every determinant is a candidate key
Start at 3NF. Denormalize only when EXPLAIN proves joins are the bottleneck.
IF read frequency >> write frequency: denormalize
IF join is bottleneck in EXPLAIN: materialized view
IF data is point-in-time: snapshot at creation
IF aggregation is expensive AND frequent:
counter cache (e.g., comment_count on Task)
CREATE TABLE organizations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
plan VARCHAR(50) NOT NULL DEFAULT 'free'
CHECK (plan IN ('free','pro','enterprise')),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_org_plan ON organizations(plan);
EMBED vs REFERENCE:
IF data always read together (1:few): EMBED
IF child rarely changes independently: EMBED
IF data shared across many documents: REFERENCE
IF child changes frequently: REFERENCE
IF array could grow unbounded: REFERENCE (always)
# Create migration
npx prisma migrate dev --name add_user_role
# Or with Flyway
flyway migrate -url=jdbc:postgresql://localhost/mydb
Safe changes (no downtime): add nullable column, add column with default, add table, add index CONCURRENTLY, widen column type.
Phase 1 EXPAND: Add new column, dual-write, backfill
Phase 2 MIGRATE: Read/write only new column
Phase 3 CONTRACT: Drop old column
Timeline: days to weeks between phases
import { z } from 'zod';
export const userSchema = z.object({
id: z.string().uuid(),
email: z.string().email().max(255),
name: z.string().min(1).max(255),
role: z.enum(['owner','admin','member','viewer']),
});
export type User = z.infer<typeof userSchema>;
IF many small tenants: shared schema + tenant_id
(row-level security, low complexity)
IF moderate isolation: schema per tenant (SET search_path)
IF enterprise compliance: database per tenant
(full isolation, high complexity)
SCHEMA DESIGN: {description}
Database: {engine} | Model: {type}
Entities: {N} | Relationships: {N} | Indexes: {N}
Evolution: {expand-contract|versioned|additive}
Commit: "schema: design <desc> data model"
ls prisma/ migrations/ db/migrate/ alembic/ 2>/dev/null
grep -r "CREATE TABLE\|CREATE INDEX" \
--include="*.sql" -l 2>/dev/null | head -5
grep -r "z.object\|Joi.object\|yup.object" \
--include="*.ts" -l 2>/dev/null | head -5
Log to .godmode/schema-results.tsv:
timestamp\tdatabase\tmodel_type\tentities\tindexes\tverdict
KEEP if: migration applies AND rollback works
AND EXPLAIN shows index usage
DISCARD if: migration locks table >5s
OR rollback fails OR seq scan on indexed column
STOP when:
- All entities have verified up+down migrations
- All FK columns have indexes
- Validation schema matches DB schema
- User requests stop
npx claudepluginhub arbazkhan971/godmodeDesigns normalized relational database schemas for PostgreSQL and MySQL from requirements, generating DDL, constraints, indexes, relationships, and migrations.
Designs normalized relational schemas before writing DDL or ORM code. Covers entity listing, primary keys, relationships, and normalization to 3NF.
Designs and documents database schemas with entity relationships, table definitions, constraints, indexes, and access patterns. Useful when modeling entities or planning data models.