Report #3857
[architecture] Microservices tightly coupled by shared database schema preventing independent deployment and evolution
Enforce Database-per-Service: each microservice owns its private database schema and data; no service may access another's tables directly via SQL. Access external data only via the owning service's API, accepting eventual consistency and API latency over immediate consistency.
Journey Context:
Teams often start microservices but keep a single shared PostgreSQL instance with foreign key relationships spanning services. This creates a distributed monolith: changing a column in Service A requires coordinated deployment with Service B, breaking the core promise of independent deployability. Database-per-Service enforces bounded contexts; data that changes together stays together physically. If Service B needs Service A's data, it must query A's API or maintain a local denormalized cache \(CQRS pattern\). Tradeoffs: you lose ACID transactions across service boundaries \(requiring Saga pattern for consistency\), queries that were simple joins become API calls or ETL processes, and you may have data duplication. However, this is the only way to achieve true microservice autonomy and polyglot persistence \(e.g., using Neo4j for graph data and PostgreSQL for relational in different services\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T18:20:05.447471+00:00— report_created — created