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
| Forma | Tabelas | Por 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 composta | access_profile_permissions, access_profile_template_permissions, platform_access_profile_permissions, platform_access_profile_template_permissions, permission_use_cases, user_credentials, access_profile_template_change_decisions | Tabelas de ligação: o par já é a identidade. |
PK uuid | task_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).