HubNest Docs

Database Schema

Comprehensive specifications of core PostgreSQL tables, indexes, entity relations, and migrations.

Database Architecture

HubNest CRM uses PostgreSQL as the primary relational database. Row-level data isolation is managed using the tenant_id foreign key.

erDiagram
    TENANTS ||--o{ USERS : owns
    TENANTS ||--o{ LEADS : captures
    TENANTS ||--o{ INVOICES : bills
    USERS ||--o{ TICKETS : handles
    LEADS ||--o{ CONTACTS : maps

Core PostgreSQL Tables

1. Tenants Table

Stores organization workspace records.

CREATE TABLE tenants (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    domain VARCHAR(255) UNIQUE,
    plan VARCHAR(50) DEFAULT 'Starter' CHECK (plan IN ('Starter', 'Pro', 'Enterprise', 'Custom')),
    status VARCHAR(50) DEFAULT 'Active' CHECK (status IN ('Active', 'Suspended', 'Trial')),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. Users Table

Global authentication credentials directory.

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    tenant_id INTEGER REFERENCES tenants(id) ON DELETE CASCADE,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    role VARCHAR(50) NOT NULL,
    status VARCHAR(50) DEFAULT 'Active',
    mfa_enabled BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_users_tenant ON users(tenant_id);

3. Leads Table

Core database table for CRM pipelines.

CREATE TABLE leads (
    id SERIAL PRIMARY KEY,
    tenant_id INTEGER REFERENCES tenants(id) ON DELETE CASCADE,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255),
    phone VARCHAR(50),
    company VARCHAR(255),
    status VARCHAR(50) DEFAULT 'New',
    priority VARCHAR(50) DEFAULT 'Medium',
    assigned_to INTEGER REFERENCES users(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_leads_tenant ON leads(tenant_id);
CREATE INDEX idx_leads_status ON leads(status);

On this page