Skip to main content

database-schema-generator

Generate PostgreSQL/Supabase database schemas from natural language descriptions. Use when creating new databases, adding tables to existing projects, or designing data models. Includes RLS policies, TypeScript types, and migration files.

跳到安装

来源信息

仓库
abcnuts/manus-skills
最近来源活动
2026年2月12日 04:11
检测到的 SKILL.md 语言
英语
星标
69
分支
46

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
6 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
database-schema-generator
description
Generate PostgreSQL/Supabase database schemas from natural language descriptions. Use when creating new databases, adding tables to existing projects, or designing data models. Includes RLS policies, TypeScript types, and migration files.
license
MIT
# Database Schema Generator Generate production-ready PostgreSQL/Supabase database schemas from natural language descriptions using AI. ## Overview This skill transforms natural language descriptions into complete, production-ready database schemas with: - **PostgreSQL/Supabase SQL** - Clean, executable SQL - **Row Level Security (RLS)** - Security policies by default - **TypeScript Types** - Auto-generated from schema - **Migration Files** - Version-controlled schema changes - **Best Practices** - UUIDs, timestamps, indexes, constraints - **Validation** - Syntax and structure checking - **Direct Application** - Apply to Supabase via MCP ## When to Use This Skill - Creating a new database for a project - Adding tables to an existing database - Designing data models from requirements - Learning database design patterns - Generating TypeScript types from database schema - Creating migration files for version control ## Quick Start ### Generate a Schema ```bash python3 scripts/generate_schema.py "A blog with users, posts, and comments" ``` ### Generate with TypeScript Types ```bash python3 scripts/generate_schema.py "E-commerce with products and orders" --output-format types ``` ### Apply to Supabase ```bash # Generate schema python3 scripts/generate_schema.py "Task management app" --output-file schema.sql # Validate python3 scripts/validate_schema.py schema.sql # Apply to Supabase python3 scripts/apply_schema.py schema.sql --project-id YOUR_PROJECT_ID ``` ## Workflow ### Step 1: Describe Your Database Write a natural language description of what you need: **Simple**: ``` "A blog with users, posts, and comments" ``` **Detailed**: ``` "A task management app with: - Users with roles (admin, member) - Projects that users can join - Tasks within projects with assignees - Comments on tasks - File attachments on tasks" ``` **Domain-Specific**: ``` "An e-commerce platform with: - Products with variants (size, color) - Shopping cart - Orders with line items - Payment tracking - Inventory management" ``` ### Step 2: Generate Schema Run the generator: ```bash python3 scripts/generate_schema.py "<your description>" --output-file schema.sql ``` **Options**: - `--output-format sql` - Raw SQL (default) - `--output-format supabase` - Supabase SQL Editor format - `--output-format migration` - Migration file format - `--output-format types` - TypeScript types only - `--include-rls` - Include RLS policies (default: true) - `--no-rls` - Exclude RLS policies - `--include-seed` - Include seed data - `--output-file <path>` - Save to file ### Step 3: Validate Schema Check for errors and best practices: ```bash python3 scripts/validate_schema.py schema.sql ``` The validator checks: - ✅ SQL syntax - ✅ Balanced parentheses - ✅ Common patterns (timestamps, UUIDs, indexes) - ✅ Best practices (RLS, foreign keys) - ✅ Table and index structure ### Step 4: Apply to Supabase Apply the schema to your Supabase database: ```bash python3 scripts/apply_schema.py schema.sql --project-id YOUR_PROJECT_ID ``` **Options**: - `--dry-run` - Show what would be executed without running - `--confirm` - Skip confirmation prompt ### Step 5: Generate TypeScript Types Generate TypeScript types for your frontend: ```bash python3 scripts/generate_schema.py "<description>" --output-format types --output-file types.ts ``` ## Examples ### Example 1: Simple Blog **Description**: ``` "A blog with users, posts, and comments" ``` **Generated Schema** (excerpt): ```sql CREATE TABLE users ( id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE, email TEXT UNIQUE NOT NULL, full_name TEXT, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE posts ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID REFERENCES users(id) ON DELETE CASCADE, title TEXT NOT NULL, content TEXT, status TEXT DEFAULT 'draft' CHECK (status IN ('draft', 'published')), created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE comments ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), post_id UUID REFERENCES posts(id) ON DELETE CASCADE, user_id UUID REFERENCES users(id) ON DELETE CASCADE, content TEXT NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW() ); -- Indexes CREATE INDEX idx_posts_user_id ON posts(user_id); CREATE INDEX idx_comments_post_id ON comments(post_id); -- RLS Policies ALTER TABLE posts ENABLE ROW LEVEL SECURITY; CREATE POLICY "Users can view published posts" ON posts FOR SELECT USING (status = 'published'); ``` ### Example 2: E-Commerce **Description**: ``` "E-commerce with products, orders, and customers" ``` **Command**: ```bash python3 scripts/generate_schema.py "E-commerce with products, orders, and customers" \ --include-seed \ --output-file ecommerce_schema.sql ``` ### Example 3: SaaS Application **Description**: ``` "A SaaS app with: - Organizations (workspaces) - Users belong to organizations with roles - Projects within organizations - Tasks within projects - Billing and subscriptions per organization" ``` **Command**: ```bash python3 scripts/generate_schema.py "A SaaS app with organizations, users with roles, projects, tasks, and billing" \ --output-format migration \ --output-file migrations/001_initial_schema.sql ``` ## Output Formats ### SQL (Default) Clean, executable PostgreSQL SQL: ```sql CREATE TABLE users (...); CREATE INDEX idx_users_email ON users(email); ALTER TABLE users ENABLE ROW LEVEL SECURITY; ``` ### Supabase Includes Supabase-specific header and extensions: ```sql -- Supabase SQL Editor -- Paste this into the Supabase SQL Editor and run CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE users (...); ``` ### Migration Version-controlled migration file format: ```sql -- Migration: E-commerce schema -- Created: 2026-02-08 14:30:00 CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE users (...); ``` ### TypeScript Types Type-safe TypeScript interfaces: ```typescript export interface User { id: string; email: string; full_name: string | null; created_at: Date; updated_at: Date; } export interface Post { id: string; user_id: string; title: string; content: string | null; status: 'draft' | 'published'; created_at: Date; updated_at: Date; } ``` ## Templates ### Base Schema Template Use `templates/base_schema.sql` for common patterns: - Users table with Supabase Auth integration - Timestamps with auto-update triggers - Soft delete support - RLS policy examples - Index patterns - Foreign key patterns Copy patterns from the template into your own schemas. ## Best Practices The generator follows these best practices automatically: ### 1. Use UUIDs for Primary Keys ```sql id UUID PRIMARY KEY DEFAULT gen_random_uuid() ``` **Why**: Security, no collisions, client-side generation ### 2. Include Timestamps ```sql created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ``` **Why**: Audit trail, debugging, sorting ### 3. Add Indexes on Foreign Keys ```sql CREATE INDEX idx_posts_user_id ON posts(user_id); ``` **Why**: Join performance ### 4. Use Check Constraints for Enums ```sql status TEXT CHECK (status IN ('draft', 'published', 'archived')) ``` **Why**: Data validation at database level ### 5. Enable Row Level Security ```sql ALTER TABLE posts ENABLE ROW LEVEL SECURITY; ``` **Why**: Security by default (Supabase requirement) ### 6. Use Soft Deletes ```sql deleted_at TIMESTAMPTZ ``` **Why**: Data recovery, audit trail ### 7. Add Foreign Key Constraints ```sql user_id UUID REFERENCES users(id) ON DELETE CASCADE ``` **Why**: Data integrity, automatic cleanup ## Common Patterns ### User-Owned Resources ```sql CREATE TABLE posts ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID REFERENCES users(id) ON DELETE CASCADE, ... ); -- RLS: Users can only access their own posts CREATE POLICY "Users can view own posts" ON posts FOR SELECT USING (auth.uid() = user_id); ``` ### Many-to-Many Relationships ```sql CREATE TABLE post_tags ( post_id UUID REFERENCES posts(id) ON DELETE CASCADE, tag_id UUID REFERENCES tags(id) ON DELETE CASCADE, PRIMARY KEY (post_id, tag_id) ); ``` ### Hierarchical Data (Nested Comments) ```sql CREATE TABLE comments ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), parent_id UUID REFERENCES comments(id) ON DELETE CASCADE, ... ); ``` ### Status Tracking ```sql status TEXT DEFAULT 'pending' CHECK (status IN ('pending', 'processing', 'completed', 'failed')) ``` ## Validation The validator checks for: ### Errors (Must Fix) - Empty SQL file - Unbalanced parentheses - Invalid syntax ### Warnings (Should Fix) - Missing semicolons - No CREATE TABLE statements ### Recommendations (Consider) - Add timestamps (created_at, updated_at) - Use UUIDs for primary keys - Add indexes for performance - Add foreign key constraints - Enable Row Level Security ## Applying to Supabase ### Via SQL Editor (Manual) 1. Generate schema: ```bash python3 scripts/generate_schema.py "..." --output-format supabase ``` 2. Copy output 3. Paste into Supabase SQL Editor 4. Run ### Via MCP (Automated) 1. Generate schema: ```bash python3 scripts/generate_schema.py "..." --output-file schema.sql ``` 2. Apply to Supabase: ```bash python3 scripts/apply_schema.py schema.sql --project-id YOUR_PROJECT_ID ``` 3. Verify in Supabase dashboard ## Troubleshooting ### Issue: "Invalid SQL syntax" **Solution**: Run validator to identify specific errors: ```bash python3 scripts/validate_schema.py schema.sql ``` ### Issue: "MCP command failed" **Solution**: Check Supabase project ID and MCP configuration: ```bash manus-mcp-cli tool list --server supabase ``` ### Issue: "RLS policies not working" **Solution**: Verify RLS is enabled: ```sql ALTER TABLE your_table ENABLE ROW LEVEL SECURITY; ``` ### Issue: "Foreign key constraint violation" **Solution**: Ensure parent records exist before inserting child records, or use `ON DELETE CASCADE`. ## Advanced Usage ### Custom Prompts For more control, modify the `SYSTEM_PROMPT` in `scripts/generate_schema.py`: ```python SYSTEM_PROMPT = """You are an expert database architect... Additional requirements: - Use JSONB for flexible data - Add full-text search indexes - Include audit triggers """ ``` ### Combining with Existing Schemas Generate new tables and merge with existing schema: ```bash # Generate new tables python3 scripts/generate_schema.py "Add notifications table" --output-file new_tables.sql # Review and merge manually cat existing_schema.sql new_tables.sql > combined_schema.sql ``` ### Migration Workflow 1. Generate initial schema: ```bash python3 scripts/generate_schema.py "..." --output-format migration --output-file migrations/001_initial.sql ``` 2. Apply to database: ```bash python3 scripts/apply_schema.py migrations/001_initial.sql --project-id YOUR_PROJECT_ID ``` 3. For changes, generate new migration: ```bash python3 scripts/generate_schema.py "Add notifications" --output-format migration --output-file migrations/002_add_notifications.sql ``` ## Reference Files - `references/schema_patterns.md` - Common database patterns and best practices - `templates/base_schema.sql` - Reusable schema patterns ## Success Criteria ✅ Schema generates without errors ✅ Validation passes ✅ Schema applies to Supabase successfully ✅ RLS policies work as expected ✅ TypeScript types match database schema ✅ Indexes improve query performance ## Time Savings - **Manual schema design**: 1-2 hours - **With this skill**: 5-10 minutes - **Savings**: ~1.5 hours per database ## Next Steps After generating your schema: 1. ✅ Apply to Supabase 2. ✅ Generate TypeScript types 3. ✅ Test RLS policies 4. ✅ Add seed data (if needed) 5. ✅ Build API endpoints (use api-endpoint-builder skill) 6. ✅ Write tests (use testing-framework skill)
在 GitHub 查看