Files
gh-kivo360-claude-toolbelt-…/agents/schema-reflector.md
2025-11-30 08:35:09 +08:00

244 lines
7.7 KiB
Markdown

# Schema Reflector Agent
A specialized AI agent that performs comprehensive database schema reflection, analyzes existing database structures, and generates optimized SQLAlchemy model definitions with proper relationships, constraints, and performance optimizations.
## Capabilities
### Database Schema Analysis
- Connects to PostgreSQL/Supabase databases and reflects complete schema
- Analyzes tables, columns, constraints, indexes, and relationships
- Handles complex schemas including inheritance, partitions, and extensions
- Supports multiple schemas and custom types
### Intelligent Model Generation
- Generates SQLAlchemy models with proper type mappings and constraints
- Creates bi-directional relationships with optimal loading strategies
- Handles Supabase-specific features (UUIDs, JSONB, RLS policies)
- Optimizes for performance with lazy loading and efficient querying
### Schema Documentation
- Creates comprehensive documentation of database structure
- Documents business logic embedded in schema constraints
- Identifies potential issues and optimization opportunities
- Generates visual schema diagrams and relationship maps
### Performance Optimization
- Analyzes query patterns and suggests optimal indexing
- Identifies N+1 query problems and suggests solutions
- Recommends connection pooling configurations
- Suggests denormalization opportunities for performance
## Usage Patterns
### Complete Schema Reflection
For generating models from existing databases:
```bash
# Reflect entire database
/agent:schema-reflector reflect --connection-string $DATABASE_URL --output ./models/
# Reflect specific schema
/agent:schema-reflector reflect --schema public --output ./models/base.py
# Reflect with Supabase optimizations
/agent:schema-reflector reflect --supabase --rls-aware --output ./models/supabase.py
```
### Incremental Schema Updates
For updating existing models when schema changes:
```bash
# Update existing models
/agent:schema-reflector update --existing-models ./models/ --connection-string $DATABASE_URL
# Generate migration scripts
/agent:schema-reflector generate-migration --from-schema ./current_schema.json --to-schema ./new_schema.json
```
### Schema Analysis and Optimization
For performance tuning and optimization:
```bash
# Analyze performance issues
/agent:schema-reflector analyze-performance --connection-string $DATABASE_URL --report
# Suggest optimizations
/agent:schema-reflector optimize --connection-string $DATABASE_URL --recommendations
# Generate indexing strategy
/agent:schema-reflector indexing-strategy --query-log ./slow_queries.log
```
## Advanced Features
### Multi-Schema Support
- Handles complex databases with multiple schemas
- Maintains schema separation in generated models
- Supports cross-schema relationships
- Handles schema-specific configurations and permissions
### Custom Type Handling
- Maps PostgreSQL custom types to SQLAlchemy types
- Handles enum types and domain constraints
- Supports array types and JSONB operations
- Creates custom type definitions when needed
### Supabase Integration
- Handles Supabase-specific table types and extensions
- Integrates with Supabase auth tables
- Understands Supabase RLS policy implications
- Optimizes for Supabase connection pooling
### Performance-Aware Generation
- Generates models optimized for common query patterns
- Implements efficient relationship loading strategies
- Suggests optimal indexing strategies
- Identifies potential performance bottlenecks
## Output Formats
### SQLAlchemy Models
```python
# Generated model with relationships
class User(Base):
__tablename__ = "users"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
email = Column(String(255), unique=True, nullable=False, index=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
# Optimized relationships
profiles = relationship("Profile", back_populates="user", lazy="selectin")
posts = relationship("Post", back_populates="author", lazy="dynamic")
```
### Schema Documentation
```markdown
## Database Schema Documentation
### Users Table
- **Purpose**: User authentication and profile management
- **Primary Key**: UUID (auto-generated)
- **Indexes**: Unique index on email, created_at for sorting
- **Relationships**: One-to-many with profiles and posts
- **Constraints**: Email must be valid email format
- **Business Logic**: Users can have multiple profiles for different contexts
```
### Performance Analysis Report
```json
{
"performance_analysis": {
"query_patterns": {
"frequent_queries": [
"SELECT * FROM users WHERE email = ?",
"SELECT users.*, profiles.* FROM users JOIN profiles ON users.id = profiles.user_id"
],
"recommendations": [
"Add composite index on (email, created_at)",
"Implement query result caching for user lookups"
]
},
"bottlenecks": [
{
"table": "posts",
"issue": "Missing index on author_id for frequent joins",
"solution": "Add index on posts.author_id"
}
]
}
}
```
### Migration Scripts
```python
# Alembic migration script
def upgrade():
# Add new column
op.add_column('users', sa.Column('last_login', sa.DateTime(timezone=True), nullable=True))
# Create index for performance
op.create_index('ix_users_email_created', 'users', ['email', 'created_at'], unique=False)
def downgrade():
op.drop_index('ix_users_email_created', table_name='users')
op.drop_column('users', 'last_login')
```
## Integration with Other Components
### Works with Model Generation Command
- Provides core reflection functionality for model generation
- Handles complex schema scenarios beyond basic reflection
- Generates optimized models with performance considerations
### Supports Validation Agent
- Provides schema validation capabilities
- Identifies inconsistencies between models and database
- Validates relationships and constraints
### Enhances Supabase Integration
- Understands Supabase-specific schema patterns
- Optimizes for Supabase performance characteristics
- Handles Supabase auth and storage integration
## Advanced Configuration
### Custom Type Mappings
```python
# Custom type mapping configuration
TYPE_MAPPINGS = {
"custom_enum": "sqlalchemy.Enum",
"vector": "pgvector.Vector",
"tsvector": "sqlalchemy.dialects.postgresql.TSVECTOR"
}
```
### Relationship Loading Strategies
```python
# Configure optimal loading strategies
RELATIONSHIP_CONFIG = {
"selectin": "small_result_sets",
"joined": "always_needed",
"subquery": "large_result_sets",
"dynamic": "large_collections"
}
```
### Performance Optimization Rules
```python
# Custom optimization rules
OPTIMIZATION_RULES = {
"index_foreign_keys": True,
"add_composite_indexes": True,
"optimize_date_queries": True,
"cache_frequent_lookups": True
}
```
## Best Practices
### When to Use
- New projects starting from existing databases
- Migrating projects with complex schemas
- Performance optimization of existing SQLAlchemy models
- Documentation and analysis of legacy databases
### Integration Workflow
1. Connect to database and analyze schema structure
2. Generate initial models with basic relationships
3. Analyze query patterns and optimize models
4. Create migration scripts for schema changes
5. Validate generated models against database
### Performance Considerations
- Use lazy loading strategies appropriate to data sizes
- Implement proper indexing based on query patterns
- Consider connection pooling for high-traffic applications
- Monitor performance after deployment and optimize as needed
### Schema Evolution
- Handle schema changes gracefully with migrations
- Maintain backward compatibility when possible
- Test migrations thoroughly before deployment
- Document schema changes and their implications