Multi-tenant by physics,
not by query filter.
Most multi-tenant SaaS shoves every customer into a shared table with a tenant_id column. One bad WHERE clause and you've leaked a competitor's price list. Vendix gives every tenant three of its own databases - physically separate. There is no “forgot to filter by tenant” to forget.
- 3+1
- DBs per tenant
- AES-256
- Encrypted CS
- 0
- Cross-tenant joins
Per-tenant DB stack
tenants · super admins · audit · pipeline config
users · products · orders · invoices · chat history · sync logs
fact tables · dimension tables · ETL tracking
embeddings for chatbot semantic search
Group tenants get a fifth: ReportDb_Group
Different jobs need different shapes.
Cramming everything into one schema means transaction speed fights reporting speed, and both fight chat-context retrieval. Vendix uses the right shape per job - normalised for transactions, denormalised for reports, vector-indexed for AI - and lets each scale independently.
- 1 VendixDb (master, 1 total) - knows about all tenants, super admins, the audit pipeline, and per-tenant transaction-step configuration. Behind the curtain. Tenants never query it.
- 2 TenantDb (per tenant, OLTP, 3NF) - every user, product, order, invoice, GRN, payment, return, visit, chat conversation. Indexed for write speed. This is the live system.
- 3 ReportDb (per tenant, OLAP, star schema) - fact + dimension tables, populated by the Hangfire ETL pipeline. Reports never touch TenantDb directly.
- + Per-tenant vector store - embeddings of products, outlets, knowledge base. Dedicated to the AI chatbot's RAG retrieval.
When each DB is touched
Onboarding a new tenant
- 1
Click "Create tenant" in super-admin
Fill in name, region, default language, currency.
- 2
Three databases provision automatically
Live transactions, reporting, AI search - each with the right structure.
- 3
Demo data seeds (optional)
Realistic Pharma or FMCG dataset loads in seconds.
- 4
Tenant logs in
From zero to first transaction in under five minutes.
Add a new tenant in minutes. Update them all in one release.
Most multi-tenant SaaS chokes on schema updates - you either run an upgrade script against every tenant database (slow, fragile) or you don't, and your tenants drift apart. Vendix is built so structural updates apply themselves automatically the first time a tenant comes back online after a release. No 90-minute deploy window. No 2 a.m. tickets.
- Self-healing structure - new tables and columns appear automatically. Safe to retry. No manual scripts to run per tenant.
- Tenant onboarding in minutes, not days. Three databases, region-pinned, demo data optional.
- Audit trail captured separately from structural changes - so the audit log is always about user activity, never platform housekeeping.
Holding companies. Group P&L. No spreadsheet glue.
A pharma group with five subsidiaries needs a way to see one consolidated number
without each subsidiary giving up its operational autonomy. Vendix supports group
tenants natively - every sub-tenant runs independently with its own three databases,
and a fifth database, ReportDb_Group, aggregates all of them
nightly at 02:30 UTC.
- Sub-tenants stay autonomous - own users, own pricing, own pipelines.
- The
ReportUserrole gets the consolidated view via a dedicated Power BI workspace. - Hangfire
GroupReportEtlJobhandles the rollup; failures alert without breaking sub-tenant ETLs.
Group tenant · 5 sub-tenants
Pharma SL
3 DBs
Pharma BD
3 DBs
Pharma MV
3 DBs
Pharma NP
3 DBs
Pharma TH
3 DBs
ReportDb_Group
02:30 UTC nightly · ReportUser only
The plumbing other SaaS hides from you.
Encrypted connection strings
Every tenant's DB connection string is AES-256-CBC encrypted at rest in VendixDb. Decrypted only inside the request scope; never in logs.
Region pinning
Each tenant declares its data residency. EU tenants get EU-region SQL; APAC stays in APAC. No accidental cross-border replication.
Per-tenant timezone + currency
All money goes through TenantFormat.Money; all dates through TenantFormat.DateTime. EC2 stays in UTC; tenants render in Asia/Colombo (or wherever).
Onboarding in minutes
Super-admin "Create Tenant" provisions VendixDb row + TenantDb (EnsureCreated) + ReportDb (star schema bootstrap) + vector store. Tenant logs in immediately.
Configurable per tenant
TenantInvoiceParameters, TenantDocumentNumberFormats, TenantTransactionSteps - each tenant overrides defaults without forking the platform. See the Pipeline Engine.
Demo data on tap
Super-admin "Seed demo data" loads a realistic Pharma/FMCG dataset into a sandbox tenant - 60+ price-list revisions, full credit-approval ladder, pre-activated free-issue schemas.
Provision a tenant in three minutes.
On a demo we'll spin up a fresh tenant in front of you - three new databases, encrypted connection strings, demo data seeded. From zero to your first chatbot answer.