Multi-tenancy — Database

Apa itu Multi-tenancy? Multi-tenancy adalah arsitektur di mana satu aplikasi melayani banyak tenant (klien/organisasi) dengan data yang terisolasi. Setiap tenan

Apa itu Multi-tenancy?

Multi-tenancy adalah arsitektur di mana satu aplikasi melayani banyak tenant (klien/organisasi) dengan data yang terisolasi. Setiap tenant hanya bisa melihat datanya sendiri.

Strategi Multi-tenancy

1. Single Database, Shared Tables

Semua tenant berbagi tabel yang sama, dibedakan oleh kolom tenant_id.

CREATE TABLE projects (
    id SERIAL PRIMARY KEY,
    tenant_id INT NOT NULL REFERENCES tenants(id),
    name VARCHAR(200),
    created_at TIMESTAMP DEFAULT NOW()
);

-- Query SELALU filter by tenant_id
SELECT * FROM projects WHERE tenant_id = 42;

-- Index wajib pada tenant_id
CREATE INDEX idx_projects_tenant ON projects(tenant_id);

2. Single Database, Separate Schemas

-- Setiap tenant punya schema sendiri
CREATE SCHEMA tenant_42;
CREATE TABLE tenant_42.projects (...);

-- Switch schema berdasarkan tenant
SET search_path TO tenant_42;

3. Separate Databases

-- Setiap tenant punya database sendiri
CREATE DATABASE tenant_42_db;
-- Isolasi penuh, tapi management lebih kompleks

Perbandingan

Tips Keamanan

// Middleware global untuk scope semua query
// Laravel example
public function handle($request, Closure $next)
{
    $tenantId = auth()->user()->tenant_id;

    // Global scope: otomatis filter semua query
    Project::addGlobalScope('tenant', function ($query) use ($tenantId) {
        $query->where('tenant_id', $tenantId);
    });

    return $next($request);
}

Yang akan kamu pelajari