Database Architecture
Design and optimize database systems: schema patterns, indexing strategies, partitioning schemes, replication topologies, migration procedures, and performance tuning.
Guiding Principle
"The database is the gravity well of your system — schema decisions are the hardest to change, so invest the most thought where the cost of change is highest."
Procedure
Step 1 — Schema Design
- Identify entities, relationships, and cardinality from domain model
- Select modeling approach: normalized (OLTP), denormalized (OLAP), document, graph
- Design primary keys: natural vs. surrogate, UUID vs. sequential
- Define constraints: foreign keys, unique, check, not-null
- Apply schema patterns: soft delete, audit columns, polymorphic associations, EAV (when justified)
Step 2 — Indexing Strategy
- Analyze query patterns: most frequent queries, filter columns, join paths
- Design covering indexes for critical queries
- Evaluate composite index column order based on selectivity and access patterns
- Identify candidates for partial indexes, expression indexes, and GIN/GiST indexes
- Establish index monitoring: unused index detection, missing index recommendations
Step 3 — Partitioning & Replication
- Evaluate partitioning need based on table size and query patterns
- Select partitioning strategy: range (time), list (region), hash (tenant)
- Design partition management: creation, pruning, archival automation
- Select replication topology: primary-replica, multi-primary, synchronous/async
- Define read routing: read replicas for reporting, primary for writes
Step 4 — Migration & Tuning
- Design schema migration strategy: forward-only, reversible, expand-contract
- Implement zero-downtime migration patterns for production changes
- Establish connection pooling configuration: pool size, timeout, idle management
- Define query performance baselines and monitoring thresholds
- Design capacity planning: storage growth projections, IOPS requirements, scaling triggers
Quality Criteria
- Schema normalized to at least 3NF for OLTP with documented denormalization decisions
- Critical queries have covering indexes with execution plans verified
- Partition strategy tested with 2x current data volume
- Schema migrations tested in staging with rollback procedures verified
Anti-Patterns
- Adding indexes for every slow query without analyzing root cause
- Partitioning tables that do not need it (overhead without benefit)
- Schema migrations with data loss potential and no rollback plan
- Connection pool exhaustion from missing timeout or pool size configuration