Skip to content

Database Naming Conventions

All SQL identifiers follow consistent, predictable naming standards.


Schemas & Tables

  • Schemas (Singular / Domain Noun):
  • Contracts: api, enterprise_api, internal_api
  • Helpers: auth, access
  • Domains: identity, accounts, places, devices, projects, site_maintenance, media, invoicing, agent_control, agent_access
  • Tables (Plural Nouns):
  • identity.users, accounts.companies, places.sites, devices.devices
  • Join Tables (Name Both Sides):
  • accounts.company_members, places.site_members, devices.user_devices

Keys & Identifiers

  • Primary Keys: Always named id (UUIDv4 by default, or identity bigint for high-volume append-only telemetry).
  • Foreign Keys: Named <entity>_id (e.g. user_id, site_id, company_id, device_id).

Helper Functions

  • Auth Helpers (auth.*):
  • auth.uid() — Returns caller UUID subject (sub).
  • auth.jwt() — Returns raw JWT payload as jsonb.
  • auth.role() — Returns the active database role claim.
  • auth.claim('name') — Returns a named JWT claim.
  • Access Helpers (access.*):
  • RLS-safe boolean functions used in policies instead of repetitive joins.
  • Examples: access.can_read_site(site_id, user_id), access.has_company_role(company_id, user_id, 'owner').

PostgREST & Application Roles

Tier PostgREST Authenticator Anonymous Role Authenticated Role Application DB Role
Public authenticator anon authenticated platform_api_role
Enterprise enterprise_portal_authenticator enterprise_portal_anon enterprise_portal_role enterprise_api_role
Internal internal_postgrest_authenticator internal_anon (no grants) internal_api_role internal_api_role

Views & RPC Functions

  • Views (Plural Nouns): Client-facing read projections (api.sites, enterprise_api.work_items, internal_api.vendors).
  • RPC Functions (Verb Phrases): State-changing actions (api.claim_device(...), enterprise_api.decide_work_item(...), internal_api.create_project(...)).

Indexes & Policies

  • Indexes (<table>_<columns>_idx):
  • users_email_idx
  • sites_owner_user_id_idx
  • user_devices_site_id_zone_id_idx
  • RLS Policies (<table>_<action>_<scope>):
  • users_select_self
  • sites_select_member
  • devices_all_service_role