Monalisa
Garantias do banco

Chaves identity

PKs numéricas geradas pelo banco, identificadores públicos e chaves naturais.

GENERATED ALWAYS AS IDENTITY

Toda tabela com PK id numérica usa bigint GENERATED ALWAYS AS IDENTITY. É o caso de 64 das 82 tabelas do banco migrado (todas as que têm id, menos a de controle de migrations). ALWAYS significa que um INSERT que informa id é recusado: o valor sempre vem do banco, então não há colisão com sequências nem ids escolhidos pelo cliente.

create table "parties" (
  "id" bigint generated always as identity not null primary key,
  ...
);

As entities declaram a PK assim e a migration gerada traz a cláusula; ninguém escreve essa DDL à mão.

Quando a PK não é um id

FormaTabelasPor quê
PK é a FK do pai (1:1)person_profiles, company_profiles (party_id), financial_institution_credentials (credential_id), invitation_session_contexts (invitation_id), session_membership_brokers (session_membership_id), bank_credential_deliveries (credential_version_id)A linha estende outra e existe no máximo uma por pai. Em bank_credential_deliveries, isso é a regra "uma revelação por versão da senha".
PK compostaaccess_profile_permissions, access_profile_template_permissions, platform_access_profile_permissions, platform_access_profile_template_permissions, permission_use_cases, user_credentials, access_profile_template_change_decisionsTabelas de ligação: o par já é a identidade.
PK uuidtask_runs, platform_task_runs, task_run_user_actors, platform_task_run_schedule_origins (run_id)O run_id nasce na aplicação no momento do dispatch e é o mesmo no outbox, no envelope da fila e na execução.

Identificadores públicos

Os id numéricos são internos. O que sai para fora (URLs, payloads, links) é a coluna uid, text e única, nas tabelas que têm identidade pública: tenants, credentials, sessions, brokers, broker_affiliations, teams, memberships, invitations, invitation_deliveries, platform_invitations, platform_invitation_deliveries, broker_prospects e portfolio_transfers (este, único por tenant).

UNIQUE de apoio

Muitas tabelas declaram um UNIQUE que parece redundante com a PK, como (id, tenant_id) ou (id, user_bank_id, tenant_id, broker_id). Eles existem para servir de alvo das FKs compostas: o PostgreSQL só aceita uma FK para um conjunto de colunas que seja PK ou UNIQUE. São eles que permitem garantir "mesmo tenant" e "mesmo dono" nas relações (ver Garantias do banco).

Nesta página