Database Overview
Introduction
The Scoriet database is a comprehensive relational database system designed to support the Enterprise Code Generator platform. It manages users, projects, database schemas, code templates, forms, reports, kanban boards, messaging, and a complete marketplace ecosystem for templates.
Database Management panel showing parsed schemas with status, visibility, and action buttons
The database architecture is built around several key domains:
- Core Domain: User management, authentication, projects, and teams
- Schema Domain: Database schema modeling, versioning, and storage
- Template Domain: Code template storage, versioning, and marketplace
- Generation Domain: Code generation tracking, logs, and code adjustments
- Form Domain: Form designer, layout, and element management
- Report Domain: Report patterns, layouts, and design elements
- Kanban Domain: Project kanban boards, cards, columns, and workflows
- Messaging Domain: User-to-user and broadcast messaging system
- Support Domain: Languages, permissions, settings, credit system, and more
Database Technology
- Database Management System: MySQL (primary), with support for PostgreSQL, SQLite, and MS-SQL
- ORM Framework: Laravel Eloquent
- Migrations: Laravel Database Migrations for version control
- Total Tables: 93 tables
- Key Relationships: 180+ foreign key relationships
Core Architecture Principles
Multi-Tenancy & Ownership
- Most tables include an
owner_idforeign key to theuserstable - Project-level data is isolated through
project_idforeign keys - Team-based access control via
teamsandteam_memberstables
Soft Deletes & Visibility
- Schema visibility levels:
private,public,deleted - Template visibility:
private,public,store - Many entities support soft delete through status/visibility fields
Versioning & History
- Schemas support multiple versions via
schema_versionstable - Templates track template type:
original,cloned,linked - Form sets can be cloned to support variations
- Generation logs maintain complete history of code generation
JSON for Flexible Data
- Complex configuration stored as JSON:
settings,tags,layout_data - Template variables and project configurations use JSON columns
- Form and report design elements stored as JSON structures
Credit & Monetization System
- User credit balance tracking in
userstable - Template pricing in credits or euros
- Credit transactions audit trail via
credit_transactions - Template purchase tracking and payout system
Security & Authentication
- Two-factor authentication fields in
userstable - Passport OAuth2 tokens for API authentication
- User inactivity tracking and warnings
- Git provider credential management
Table Categories
Core Tables (8)
users- User accounts with authentication and profileprojects- Project definitions with deployment configurationteams- Team organizational structureteam_members- Team membership and rolesteam_roles- Custom team rolesteam_role_permissions- Role-based access controlpermissions- System permissions registryuser_git_providers- Git repository integration
Schema Tables (8)
schemas- Database schema definitionsschema_versions- Schema version historyschema_tables- Table definitions within schemasschema_fields- Column/field definitionsschema_constraints- Database constraintsschema_constraint_columns- Constraint column mappingsschema_foreign_key_references- Foreign key definitionsschema_foreign_key_reference_columns- FK column mappings
Template Tables (7)
templates- Template definitionstemplate_files- Template file contenttemplate_variables- Template input variablestemplate_fingerprints- Content hashing for change detectiontemplate_media- Template marketing media (logos, images, videos)template_purchases- Marketplace purchase trackingtemplate_reviews- User reviews and ratings
Template Associations (3)
template_schema_dependencies- Schema requirements for templatestemplate_file_field_assignments- Form field visibility in template files
Project Relationship Tables (9)
project_members- Project team membershipproject_schemas- Linked/cloned schemas in projectsproject_template_usage- Template usage in projectsproject_template_variable_values- Template variable configurationproject_applications- Project join requestsproject_invitations- Project invitationsproject_attachments- File attachments for projectsproject_form_set- Form set associationsproject_kanban_roles- Kanban board roles
Generation Tables (4)
project_generations- Code generation recordsproject_generation_trees- Dependency trees for generationsgeneration_logs- Detailed generation logscode_adjustments- Code adjustment rules
Form Tables (4)
form_sets- Form set definitionsform_windows- Form window types (create, edit, list, report)form_elements- UI containers and layout elementsform_item_placements- Field placements within forms
Report Tables (5)
report_patterns- Report pattern definitionsreport_pattern_forms- Report form configurationsreport_pattern_elements- Report layout sectionsreport_layout_elements- Report content elementsreport_images- Report images/media
Kanban Tables (7)
kanban_boards- Kanban board per projectkanban_columns- Board columns/swimlaneskanban_cards- Task cardskanban_card_activities- Card activity logkanban_card_assignees- Card assignmentskanban_card_comments- Card commentskanban_labels- Label definitions
Messaging Tables (4)
message_threads- Message conversationsmessages- Message contentmessage_thread_participants- Thread participantsmessage_attachments- Message attachments
Support Tables (14)
languages- Supported languagesschema_translations- Schema text translationsproject_translations- Project localizationproject_report_patterns- Report pattern associationssettings- System-wide settingssubscriptions- User subscription managementcredit_transactions- Credit audit traildeployment_logs- Deployment historyperformance_metrics- System metricstickets- Support ticketspayouts- Seller payoutspayout_items- Payout line itemspages- CMS pagesvisitor_logs- Website visitor trackingregistration_invites- User registration invitescli_tasks- CLI command taskscli_devices- CLI device registrationpush_subscriptions- Web push notifications
Key Relationships
One-to-Many Relationships
- User owns many Projects, Schemas, Templates, Forms, Reports, etc.
- Project has many Members, Generations, Attachments, Kanban Boards
- Schema has many Versions, Tables
- Schema Table has many Fields
- Template has many Files, Variables, Reviews
Many-to-Many Relationships
- Projects ↔ Schemas (via
project_schemas) - Projects ↔ Templates (via
project_template_usage) - Teams ↔ Roles ↔ Permissions (via join tables)
- Kanban Cards ↔ Labels (via
kanban_card_label) - Templates ↔ Schema Dependencies (via
template_schema_dependencies)
Polymorphic Associations
- Code adjustments can reference projects or templates
- Credit transactions support multiple transaction types
- Performance metrics track various action types
Database Constraints
Primary Keys
All tables use bigIncrements('id') for auto-incrementing primary keys.
Foreign Key Actions
- Cascade Delete: Used for dependent records (template files when template deleted)
- Set Null: Used when relationship is optional (nullable foreign keys)
- Restrict: Default for critical relationships
Unique Constraints
- Email addresses (
users.email,registration_invites.email) - Git provider credentials per user
- Schema name per owner
- Template variable name per template
- Join codes in projects
Indexes
- Owner/visibility composite indexes for efficient filtering
- Project/user composite indexes for queries
- Foreign key indexes for relationship lookups
- Timestamp indexes for date-range queries
Data Types
Integer Fields
- bigIncrements: Primary keys, user references
- unsignedBigInteger: Foreign keys
- unsignedSmallInteger: Diagram sizing parameters
- unsignedTinyInteger: Short values
- integer: Counts, versions, credits
String Fields
- string(100+): Names, slugs, codes
- text/longText: Descriptions, content, JSON
- enum: Status fields, types, roles
Decimal/Currency
- decimal(10,2) or decimal(12,2): Pricing, earnings, amounts
Date/Time
- timestamp: All CRUD operations use timestamps
- nullable: For optional dates (deletions, verifications)
Design Patterns
Soft Deletes
Implemented through visibility or status enums rather than Laravel's soft delete trait, allowing for "deleted" visibility levels in schemas while maintaining referential integrity.
Audit Trails
credit_transactionstable maintains complete audit trailkanban_card_activitieslogs all card changesgeneration_logstracks all code generation- Timestamp fields on all tables for change tracking
Configuration Management
- JSON columns store complex configuration
settingstable for global configuration- Project-level settings override defaults
- Form/report design data stored as JSON
Polymorphic Data
Template variables support multiple languages via project_template_variable_values with language field allowing per-language overrides.
Performance Considerations
Indexing Strategy
- Foreign key columns indexed automatically
- Composite indexes on commonly filtered column pairs
- Separate index on
last_login_atfor inactivity queries
Query Optimization
- Avoid N+1 queries through eager loading relationships
- Use composite indexes for where clauses
- Pagination required for large result sets
JSON Column Queries
- Avoid querying inside JSON columns when possible
- Store structured data that benefits from relational queries in separate tables
- Use JSON for semi-structured or configuration data
Database Migrations
All database changes are managed through Laravel migrations in /database/migrations/. The migration naming convention is:
YYYY_MM_DD_HHMMSS_description_of_change.php
Migrations are organized into:
- Initial table creation (2026_02_01 batch)
- Foreign key additions (2026_02_01_094852 batch)
- Schema extensions and modifications (2026_03_xx)
Related Documentation
- See Entity Relationship Diagrams for visual schema relationships
- See Core Tables documentation for user and project structure
- See Schema Tables documentation for database schema modeling
- See Template Tables documentation for code template system
- See Generation Tables documentation for code generation workflow
- See Form Tables documentation for form designer system
- See Report Tables documentation for report designer system
- See Kanban Tables documentation for project management boards
- See Messaging Tables documentation for communication system