Building a SaaS application is very different from building software for a single company.
A traditional application may serve one organization, one database, and one set of users. A SaaS platform has a different challenge: multiple businesses need to use the same product while keeping their data, users, settings, and workflows isolated.
This is where multi-tenant architecture becomes important.
A well-designed multi-tenant SaaS platform can serve hundreds or thousands of businesses without requiring a completely separate application for every customer.
But the architecture needs to solve several problems:
- How should tenant data be isolated?
- Should every tenant have its own database?
- How should authentication work?
- How should subdomains identify tenants?
- How can the system scale?
- How do you prevent one tenant from accessing another tenant's data?
- How should backups and migrations work?
This guide explains the key architectural decisions behind a production-ready multi-tenant SaaS platform.
What Is Multi-Tenancy?
In a multi-tenant application, a single software platform serves multiple independent organizations, known as tenants.
SaaS Platform
│
├── Company A
│ ├── Users
│ ├── Employees
│ ├── Customers
│ └── Reports
│
├── Company B
│ ├── Users
│ ├── Employees
│ ├── Customers
│ └── Reports
│
└── Company C
├── Users
├── Employees
├── Customers
└── ReportsEach company uses the same SaaS product, but its data should remain logically isolated.
Customers might access the application through tenant-specific domains such as:
company-a.example.com
company-b.example.com
company-c.example.comThe application determines which tenant is making the request and loads the appropriate data and configuration.
The Three Common Multi-Tenant Database Models
There is no single database strategy that works for every SaaS application. The right model depends on the application's scale, security requirements, infrastructure, and expected growth.
1. Shared Database, Shared Schema
All tenants use the same database and tables. A tenant_id identifies which organization owns each record.
customers
--------------------------------
id
tenant_id
name
email
created_atFor example:
1 | tenant_001 | Company A Customer
2 | tenant_002 | Company B Customer
3 | tenant_001 | Another CustomerAdvantages
- Simple infrastructure
- Lower database cost
- Easy deployment
- Efficient for large numbers of smaller tenants
Challenges
The application must enforce tenant filtering everywhere.
Customer.objects.all()could potentially return records belonging to multiple tenants if the tenant context is not enforced correctly.
For enterprise applications, application-level isolation therefore becomes extremely important.
2. Shared Database, Separate Schema
Another approach is to use a separate database schema for each tenant.
PostgreSQL
│
├── public
├── tenant_company_a
├── tenant_company_b
└── tenant_company_cWhen a request comes from:
company-a.example.comthe application resolves the tenant and switches to:
tenant_company_aThis provides stronger logical isolation while still allowing tenants to share the same PostgreSQL server.
3. Separate Database Per Tenant
For high-security or enterprise environments, each tenant can have its own database.
Database Server
│
├── company_a_db
├── company_b_db
├── company_c_db
└── company_d_dbThis provides a stronger isolation boundary and can simplify certain tenant-specific operations:
- Backups
- Restores
- Data exports
- Database migrations
- Tenant-specific maintenance
The trade-off is operational complexity. Managing thousands of databases requires strong automation and infrastructure processes.
Comparing the Three Models
| Architecture | Isolation | Cost | Complexity | Typical Use |
|---|---|---|---|---|
| Shared schema | Lower | Low | Low | Smaller SaaS |
| Separate schema | Higher | Medium | Medium | Business SaaS |
| Separate database | Very high | Higher | High | Enterprise workloads |
There is no universally correct architecture. The important thing is to design the isolation model around the product's actual requirements.
Tenant Identification
The application needs a reliable way to determine which tenant owns each request.
One common approach is subdomain-based routing:
acme.example.com
globex.example.comConceptually:
Request
│
▼
acme.example.com
│
▼
Tenant Resolver
│
▼
Tenant: ACME
│
▼
Tenant Database / Schema
│
▼
ApplicationThis pattern gives customers a clean URL while allowing the application to establish tenant context early in the request lifecycle.
Authentication Must Be Tenant-Aware
Authentication becomes more complicated in a multi-tenant environment.
Consider:
[email protected]and:
[email protected]An email address alone may not be sufficient to identify the user's organization.
A better conceptual model is:
Tenant
│
└── User
├── Role
├── Permissions
└── SettingsThis allows users to be associated with the correct organization and permissions.
Authorization Is More Than Authentication
Logging a user in is only the first step. The application must also determine what that user is allowed to access inside the tenant.
Company A
│
├── Admin
│ └── Everything
│
├── HR Manager
│ └── Employees + Payroll
│
└── Sales Manager
└── Customers + SalesA user should never be able to access another tenant simply by modifying an ID in a URL.
For example:
/company-a/customers/123should not return a customer belonging to Company B.
Tenant validation should be enforced at the authorization and data-access layers, not only in the frontend.
A Multi-Tenant SaaS Needs More Than a Database
A production SaaS platform usually contains multiple infrastructure components.
Internet
│
▼
Cloudflare / CDN
│
▼
NGINX
│
├── Web Application
│
└── API Services
│
▼
Tenant Resolver
│
┌──────┼──────┐
▼ ▼ ▼
CRM HRMS Billing
│ │ │
└──────┼──────┘
▼
PostgreSQL
│
Redis
│
Background JobsDepending on the product, additional infrastructure may include:
- Object storage
- Message queues
- Monitoring
- Centralized logging
- Search
- CDN
- Email infrastructure
- Payment services
Scaling Multi-Tenant SaaS
A common mistake is to design only for today's traffic. A scalable architecture should make horizontal scaling possible.
Load Balancer
│
┌───┼───┐
▼ ▼ ▼
App 01 App 02 App 03
│ │ │
└───┼───┘
▼
Redis
│
▼
PostgreSQLMultiple application instances can serve requests while shared infrastructure handles stateful resources.
Containerization and orchestration can make this architecture easier to operate as traffic and tenant count increase.
Don't Forget Background Jobs
Enterprise SaaS platforms often perform operations that should not block an HTTP request.
- Report generation
- Email delivery
- Data imports
- PDF generation
- Notifications
- Scheduled synchronization
- Large file processing
HTTP Request
│
▼
Create Job
│
▼
Queue
│
▼
Worker
│
▼
ProcessEvery background job should retain the correct tenant context.
Job
├── tenant_id
├── user_id
├── operation
└── payloadSecurity Must Be Designed Around Tenant Isolation
Application Isolation
Every request should have a verified tenant context.
Database Isolation
The selected database architecture should prevent accidental cross-tenant access.
Authentication
Users must be associated with the correct organization.
Authorization
Roles and permissions should be evaluated within the tenant context.
API Security
APIs must validate tenant ownership rather than trusting IDs supplied by clients.
Audit Logging
Important actions should be recorded.
[object HTMLPreElement]Audit logging becomes particularly valuable for enterprise applications.
The Biggest Multi-Tenant SaaS Mistakes
Mistake 1: Treating Tenant Isolation as a Frontend Problem
Hiding another tenant's data in the UI is not security. The backend must enforce isolation.
Mistake 2: Using IDs Without Tenant Validation
Never assume that a URL such as /customer/123 automatically belongs to the current organization. The backend needs to validate ownership.
Mistake 3: No Tenant-Aware Background Jobs
Background workers must know which tenant a job belongs to. Without tenant context, asynchronous processing can become a source of serious data-isolation bugs.
Mistake 4: Ignoring Tenant-Specific Configuration
Different businesses may require different tax settings, currencies, time zones, workflows, branding, email settings, and approval rules.
Tenant configuration should therefore be treated as a first-class part of the architecture.
Mistake 5: Designing for One Tenant and Adding Multi-Tenancy Later
Adding multi-tenancy after the product is already large can require major changes to databases, authentication, routing, authorization, and application logic.
It is usually better to establish the tenant boundary early.
What Does a Production-Ready SaaS Architecture Look Like?
[object HTMLPreElement]This architecture can evolve as the SaaS platform grows.
Final Thoughts
Multi-tenancy is not simply a database technique.
It affects almost every layer of a SaaS platform:
DNS → Routing → Authentication → Authorization → Application → Database → Background Jobs → Storage → Monitoring → Billing
The right architecture depends on the number of tenants, data sensitivity, operational requirements, expected scale, and product design.
For a smaller SaaS, a shared database may be sufficient.
For a growing business platform, schema-based isolation can provide a stronger boundary.
For enterprise workloads with strict isolation requirements, separate databases may be appropriate.
The key is to choose the architecture based on business requirements and operational reality—not simply the architecture that looks most sophisticated on paper.
**
Building a Multi-Tenant SaaS Platform?
Waveinno helps businesses design and build scalable SaaS platforms with tenant-aware authentication, secure data isolation, APIs, billing, dashboards, and cloud infrastructure.**
— ** Building a Multi-Tenant SaaS Platform?**
Build software around how your business actually runs.
Get posts like this by email
Occasional engineering notes from the team. No marketing, and easy to leave.
Keep reading
Custom ERP vs SaaS ERP in Bangladesh: A Decision Framework, Not a Sales Pitch
We build both, which means we have no reason to sell you the wrong one. Here is the framework we actually use with clients — what forces a custom build in Bangladesh, what a SaaS licence really costs over five years, and why most companies end up somewhere in between.
9 min readGuidesHRMS and Payroll in Bangladesh: What the Software Actually Has to Handle
Most payroll software fails here for the same handful of reasons — leave entitlements that accrue by days worked, attendance captured where there is no signal, arrears that have to be recomputed months later. A practical guide to building or buying payroll that survives an audit.
8 min readNext post
Custom ERP vs SaaS ERP in Bangladesh: A Decision Framework, Not a Sales Pitch
We build both, which means we have no reason to sell you the wrong one. Here is the framework we actually use with clients — what forces a custom build in Bangladesh, what a SaaS licence really costs over five years, and why most companies end up somewhere in between.
