Pular para o conteúdo principal

Modelo de Dados

Diagrama de Tabelas

Identificadores

Todas as tabelas usam UUID v4 como identificador primário, gerado pelo PostgreSQL via gen_random_uuid().

VariaçãoTabelasPrimary Key
Simplestenants, types, configs, audit_logsid UUID PRIMARY KEY DEFAULT gen_random_uuid()
Composta (particionada)execution_runs, execution_items, http_logs, queue_logs(id, timestamp) — PostgreSQL exige a coluna de partição na PK

Na aplicação, quando o ID precisa ser gerado antes do insert (ex: referenciar um run_id em items), usa-se generateId() de @hg/core — wrapper de crypto.randomUUID().

Particionamento e Expurgo

TabelaParticionadaChaveRetenção Sugerida
execution_runsSimstarted_at (mensal)6 meses
execution_itemsSimcreated_at (mensal)6 meses
http_logsSimcreated_at (mensal)30 dias
queue_logsSimcreated_at (mensal)30 dias
audit_logsNãoPermanente

Expurgo: DROP TABLE <tabela>_YYYY_MM — operação instantânea, sem VACUUM.

Multi-tenant (RLS)

Todas as tabelas (exceto tenants e types) possuem Row Level Security:

ALTER TABLE configs ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON configs
USING (tenant_id = current_setting('app.tenant_id')::uuid);

O tenant é definido no início de cada transação:

SET LOCAL app.tenant_id = '<uuid>';

Scoped à transação — sem risco de vazamento entre requests.