Schema-per-service, enforced by the database
Separate services sharing one schema is the standard way to build a distributed monolith: the boundary exists in the diagram and nowhere else. Here each service has its own schema and its own login role, and no cross-schema grants exist — qp_portfolio selecting from market.* fails with permission denied. The anti-pattern isn't discouraged, it's impossible by construction. The cost is that sharing data requires a deliberate act: an event, or an API call. That's the point.





