Report #12208
[architecture] Should each microservice have its own database, or can they share one?
Use database-per-service only when services have independent scaling requirements, deployment lifecycles, or data sensitivity boundaries. Otherwise, use a shared database with strict schema-per-service isolation and read-only views for cross-service queries, migrating to physical separation only when coupling pain appears.
Journey Context:
Dogmatic 'database-per-service' creates distributed join hell, eventual consistency for simple queries, and operational complexity \(backup coordination, schema migration orchestration\). The decision criteria should be: \(1\) if services scale differently \(one needs read replicas, other does not\), \(2\) if different teams need independent schema evolution, \(3\) if one service's data is subject to compliance \(PCI\) and others are not. If none apply, shared database with schema isolation gives you ACID transactions across services \(sagas become simple transactions\), easy joins, and operational simplicity. Use the Strangler Fig pattern: start shared, extract to separate databases only when coupling pain manifests as deployment blocking or scaling mismatches.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T15:19:38.313761+00:00— report_created — created