Database Schema
Overview
This document provides comprehensive details about the database schema design for the Product Management module. The schema is implemented using MongoDB with Mongoose ODM, following document-oriented design principles with embedded sub-documents and strategic referencing for optimal performance.
Table of Contents
Schema Architecture
Document-Oriented Design
The product management schema leverages MongoDB's document-oriented nature for efficient data storage and retrieval:
Embedded Documents: Language versions and pricing information are embedded for atomic operations
Reference Strategy: Media files and large collections use references for flexibility
Denormalization: Strategic denormalization for performance optimization
Schema Validation: Mongoose schema validation ensures data integrity
Collections Overview
Product Schema
Main Product Document
File: common/module/product/product/repos/product.scheme.ts
Field Specifications
SKU (Stock Keeping Unit)
Business Rules:
Must be unique across all products within the tenant
Cannot be modified after product creation
Used for external system integration
Format: Uppercase letters, numbers, hyphens, underscores only
Language Versions
Structure:
Business Rules:
At least one language version is mandatory
Language codes must be valid ISO codes
Titles are required for each language version
Descriptions are optional but recommended
Maximum 10 language versions per product
Pricing Information
Tags Array
Tag Constraints:
Maximum 20 tags per product
Each tag must exist in the product-tag collection
Tags are case-insensitive for matching
Indexed for efficient filtering operations
Images Array
Image Constraints:
Maximum 10 images per product
References stored as ObjectIds to Media collection
Images are populated on query when needed
Automatic cleanup when images are deleted
Display Order
State History
Audit Trail Features:
Tracks all changes to product data
Includes user information and timestamps
Stores previous values for rollback capability
Used for compliance and debugging
Product Tag Schema
Tag Document Structure
File: common/module/product/tag/repos/product-tag.scheme.ts
Tag Validation Rules
Name Constraints
Business Rules:
Tag names must be unique within the tenant
Automatically converted to lowercase for consistency
Only alphanumeric characters, hyphens, underscores, and spaces allowed
Minimum 1 character, maximum 50 characters
Leading and trailing whitespace automatically trimmed
Tag Usage Tracking
Price Sub-Schema
Price Document Structure
File: common/module/product/product/repos/sub/product-price.scheme.ts
Currency Support
Price Validation
Value Range: 0 to 999,999.99 (adjustable based on business needs)
Precision: Two decimal places for monetary values
Currency Validation: Must be from supported currency enum
Change Tracking: Timestamps track when prices are modified
Indexing Strategy
Product Collection Indexes
Primary Indexes
Compound Indexes
Tag Collection Indexes
Index Performance Considerations
Query Patterns Optimized
Product Lookup by SKU: O(1) lookup with unique index
Tag Filtering: Efficient array index scanning
Text Search: Full-text search across multiple language versions
Sorting: Pre-sorted indexes for order and date fields
Pagination: Efficient skip/limit operations
Index Maintenance
Selective Indexing: Only indexes that support actual query patterns
Index Monitoring: Regular analysis of index usage and performance
Compound Index Optimization: Left-prefix rule consideration
Memory Usage: Balance between query performance and memory consumption
Relationships and References
Product-Media Relationship
Reference Strategy
Media Document Structure
Product-Tag Relationship
Embedding Strategy
Benefits of This Approach
Performance: Fast filtering without joins
Simplicity: Direct array operations for tag management
Consistency: Tag names are normalized in Tag collection
Flexibility: Easy to add/remove tags from products
Multi-Tenant Relationships
Tenant Isolation
Data Validation
Schema-Level Validation
Built-in Validators
Custom Validators
Application-Level Validation
Business Rule Validation
Performance Optimization
Query Optimization Patterns
Efficient Product Queries
Pagination Optimization
Aggregation Pipelines
Product Statistics
Memory and Storage Optimization
Document Size Management
Embedded vs Referenced: Strategic choice based on access patterns
Field Selection: Use projection to limit transferred data
Archive Strategy: Move old products to archive collection
Image Optimization: Store only references, actual files in CDN
Connection Pooling
Multi-Tenancy Implementation
Tenant Isolation Strategy
Document-Level Isolation
Query Middleware
Tenant-Specific Indexes
Data Security
Access Control
Tenant Validation: Every operation validates tenant access
Data Isolation: Queries automatically scoped to tenant
Audit Logging: All operations logged with tenant context
Permission Checking: User permissions validated within tenant scope
Audit and State Management
State History Schema
StateHistory Sub-Document
Change Tracking Implementation
Automatic Change Detection
Compliance Features
Data Retention
Audit Trail: Complete history of all changes maintained
User Tracking: All modifications linked to specific users
Timestamp Accuracy: Precise timestamps for all operations
Reason Codes: Optional reason codes for changes
Privacy Compliance
Data Anonymization: Support for anonymizing user references
Right to Deletion: Compliance with data deletion requirements
Data Export: Support for exporting user-related data
Consent Tracking: Track consent for data processing
Backup and Recovery
Backup Strategy
Regular Backups
Point-in-Time Recovery
Oplog Archival: MongoDB oplog archival for point-in-time recovery
Snapshot Backups: Regular collection snapshots
Cross-Region Replication: Geographic distribution for disaster recovery
Testing: Regular backup restoration testing
Data Migration
Schema Evolution
This database schema documentation provides a complete reference for the data structure, relationships, and optimization strategies used in the Product Management module, ensuring efficient and scalable data management for the application.
Last updated
Was this helpful?