6 KiB
6 KiB
Database Schema Overview
General Bots uses PostgreSQL as its primary database with Diesel ORM for type-safe database operations. The schema is designed to support multi-tenant bot hosting with comprehensive session management, user authentication, and content storage.
Core Architecture
The database schema follows these design principles:
- UUID Primary Keys: All tables use UUIDs for globally unique identifiers
- Timestamps: Created/updated timestamps for audit trails
- Foreign Key Relationships: Referential integrity between related entities
- JSON Fields: Flexible storage for dynamic configuration and metadata
Database Schema Diagram
Entity Relationship Overview
Core Tables Structure
Detailed Schema
Schema Categories
1. Organization & Bot Management
- organizations: Multi-tenant organization support
- bots: Bot instances and configurations
- bot_configuration: Bot-specific settings and parameters
- bot_memories: Persistent key-value storage for bots
2. User & Authentication
- users: User accounts with secure password storage
- user_sessions: Active user sessions with tokens
- user_login_tokens: Authentication tokens for login
- user_preferences: User-specific settings
3. Conversation & Messaging
- message_history: Complete conversation history
- clicks: User interaction tracking
- system_automations: Scheduled tasks and automation rules
4. Knowledge Base
- kb_collections: Knowledge base collection definitions
- kb_documents: Documents stored in collections
- user_kb_associations: User access to knowledge bases
- session_tool_associations: Tools available in sessions
5. Tools & Integration
- basic_tools: BASIC script tool definitions
- user_email_accounts: Email integration accounts
- email_drafts: Draft emails
- email_folders: Email folder organization
Table Relationships
Session Management Flow
Session Flow
Knowledge Base Access Pattern
Knowledge Base Access
Primary Relationships
-
Bot Hierarchy
- organizations (1) → (N) bots
- bots (1) → (N) bot_configuration
- bots (1) → (N) bot_memories
-
User Sessions
- users (1) → (N) user_sessions
- user_sessions (1) → (N) message_history
- bots (1) → (N) user_sessions
-
Knowledge Management
- bots (1) → (N) kb_collections
- kb_collections (1) → (N) kb_documents
- user_sessions (1) → (N) user_kb_associations
-
Tool Associations
- bots (1) → (N) basic_tools
- user_sessions (1) → (N) session_tool_associations
Data Types
Common Field Types
- UUID: Primary keys and foreign key references
- Text: Variable-length string data
- Varchar: Fixed-length strings for codes and identifiers
- Timestamptz: Timestamps with timezone
- Jsonb: JSON data for flexible schemas
- Boolean: Binary flags and settings
- Integer: Counters and numeric values
Indexing Strategy
Primary Indexes
- All primary keys (id fields)
- Foreign key relationships
- Timestamp fields for time-based queries
- Session tokens for authentication
Composite Indexes
- (bot_id, user_id) for session lookup
- (collection_id, document_id) for knowledge retrieval
- (user_id, created_at) for history queries
Migration Management
Database migrations are managed through Diesel's migration system:
- Migrations stored in
migrations/directory - Each migration has up.sql and down.sql
- Version tracking in
__diesel_schema_migrationstable - Automatic migration on bootstrap
Performance Considerations
Connection Pooling
- Default pool size: 10 connections
- Configurable via environment variables
- Automatic connection recycling
Query Optimization
- Prepared statements for repeated queries
- Batch operations for bulk inserts
- Lazy loading for related entities
- Pagination for large result sets
Data Retention
- Message history retention configurable
- Automatic cleanup of expired sessions
- Archival strategy for old conversations
Security Features
Data Protection
- Argon2 hashing for passwords
- AES-GCM encryption for sensitive fields
- Secure random tokens for sessions
- SQL injection prevention via Diesel
Access Control
- Row-level security via application logic
- User isolation by session
- Bot isolation by organization
- Audit logging for sensitive operations
Backup Strategy
Backup Types
- Full database dumps
- Incremental WAL archiving
- Point-in-time recovery support
- Cross-region replication (optional)
Restore Procedures
- Automated restore testing
- Version compatibility checks
- Data integrity validation
- Zero-downtime migration support
Monitoring
Key Metrics
- Connection pool usage
- Query execution time
- Table sizes and growth
- Index effectiveness
- Lock contention
Health Checks
- Database connectivity
- Migration status
- Replication lag (if applicable)
- Storage usage
Best Practices
- Always use migrations for schema changes
- Never modify production data directly
- Test migrations in development first
- Monitor performance metrics regularly
- Plan capacity based on growth projections
- Document changes in migration files
- Use transactions for data consistency
- Implement retry logic for transient failures
Future Considerations
- Partitioning for large tables (message_history)
- Read replicas for scaling
- Time-series optimization for metrics
- Full-text search indexes
- Graph relationships for advanced queries