Adcoar Ltd
← All posts

24 Jul 2026 · Adcoar News Editor

Why every tenant on our platforms gets its own database

It's common for multi-tenant SaaS platforms to store every customer's data in the same tables, separated only by a tenant_id column and a WHERE clause. It's simpler to build, and for a lot of products it's a reasonable trade-off.

We chose differently for Adcoar Tours and Adcoar Reach: every tour operator, every organisation sending messages through Reach, gets its own isolated database. It costs more upfront — more provisioning logic, more moving parts to manage — but it buys three things we think matter more for the businesses we serve:

  • No cross-tenant query bugs. A missing WHERE tenant_id = ? in a shared-table system is a data leak waiting to happen. In an isolated-database system, that entire category of bug is architecturally impossible.
  • Independent scaling. One operator's booking rush during peak season doesn't slow down anyone else's dashboard.
  • Clean data ownership. When an operator asks for an export of everything they own, or asks us to delete it, the answer is a single, complete database — not a query across shared tables hoping nothing was missed.

None of this is unique or clever — it's a well-known pattern. But it's the kind of decision that's invisible when it's working and very visible when it isn't, and we'd rather it stay invisible.