Database Patterns

storage

Data Access Patterns

Repository Pattern

Abstraction over data access with collection-like interface, centralizing data logic for improved testability.

Key Features
  • Centralized data access logic
  • Query encapsulation
  • Unit of Work integration
  • Collection-like interface
Use Cases
  • Entity repositories (UserRepository)
  • CRUD operation abstraction
  • Domain-driven design
  • Testing with mock repositories
Data Mapper

Separates domain objects from database persistence with bidirectional mapping and independent evolution.

Key Features
  • Object-relational mapping
  • Independent domain/DB evolution
  • Complex mapping logic support
  • Bidirectional transformation
Use Cases
  • ORMs (TypeORM, SQLAlchemy)
  • Entity mapping layers
  • Database abstraction
  • Legacy database integration
Active Record

Domain object with built-in persistence methods, simple CRUD operations, and direct database mapping.

Key Features
  • Self-contained model classes
  • Built-in CRUD methods
  • Simple query interface
  • Association handling
Use Cases
  • Rails ActiveRecord
  • Laravel Eloquent
  • Django ORM
  • Simple CRUD applications
DAO (Data Access Object)

Abstract persistence mechanism with interface-based design, technology-agnostic, and separation of concerns.

Key Features
  • Persistence abstraction
  • Interface-based design
  • Multiple implementations
  • Testability focus
Use Cases
  • Java DAO pattern
  • Service layer separation
  • Testing with mocks
  • Database technology switching
swap_horiz

Transaction Patterns

Unit of Work

Tracks object changes and batches commits with automatic change detection and transaction management.

Key Features
  • Automatic change tracking
  • Deferred execution
  • Transaction scope management
  • Batch updates
Use Cases
  • ORM session management
  • Batch update operations
  • Complex multi-object saves
  • Rollback scenarios
Identity Map

Ensures one object instance per database row with caching and identity guarantee for consistency.

Key Features
  • Object identity cache
  • Reference equality guarantee
  • Duplicate load prevention
  • Circular reference handling
Use Cases
  • ORM entity caching
  • Session-level cache
  • Object identity preservation
  • Graph navigation
Lazy Loading

Defers data loading until accessed with proxy objects, reducing initial load time and preventing N+1 issues.

Key Features
  • Proxy object usage
  • Virtual property loading
  • N+1 query prevention strategies
  • On-demand fetching
Use Cases
  • ORM relationship loading
  • Large collection handling
  • Optional data retrieval
  • Performance optimization
Eager Loading

Loads related data upfront with JOIN queries to prevent N+1 problem and optimize relationship loading.

Key Features
  • Include/preload directives
  • JOIN query optimization
  • Relationship batch loading
  • N+1 problem elimination
Use Cases
  • List page data loading
  • API response optimization
  • Report generation
  • Relationship-heavy queries
search

Query Patterns

Query Object

Encapsulated query logic with builder pattern, method chaining, and reusable composable queries.

Key Features
  • Builder pattern usage
  • Method chaining support
  • Named scope definitions
  • Query composition
Use Cases
  • Complex filtering logic
  • Search functionality
  • Reporting queries
  • API query parameters
Specification Pattern

Business rules as combinable objects with AND/OR/NOT composition for validation and query building.

Key Features
  • Rule composition (AND/OR/NOT)
  • Domain rule encapsulation
  • Validation support
  • Query criteria building
Use Cases
  • Business rule validation
  • Complex filtering
  • Access control rules
  • Domain-driven design
Database View

Precomputed query results with abstraction layer, materialized or regular views, and complex join simplification.

Key Features
  • Materialized vs regular views
  • Refresh strategy management
  • Index on view support
  • Query simplification
Use Cases
  • Reporting dashboards
  • Complex aggregations
  • Legacy system abstraction
  • Performance optimization