Estou construindo uma tabela no Postgres conforme especificado abaixo
CREATE TABLE table (
"id" BIGSERIAL PRIMARY KEY,
"ext_id" INTEGER REFERENCES ext_table (ext_id),
"user_id" VARCHAR(100) NOT NULL,
"user_type" VARCHAR(100) NOT NULL,
"event_type" VARCHAR(100) NOT NULL,
"status" VARCHAR(100) NOT NULL,
"created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
"updated_at" TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
CONSTRAINT "check_valid_user_type" CHECK ("user_type" IN ('TYPE_A', 'TYPE_B')),
CONSTRAINT "check_valid_event_type" CHECK ("event_type" IN ('EVENT_A', 'EVENT_B', 'EVENT_C')),
CONSTRAINT "check_valid_notification_status" CHECK ("status" IN ('STATUS_A', 'STATUS_B', 'STATUS_C')),
CONSTRAINT "no_duplicates" UNIQUE (ext_id, user_id, user_type, event_type)
);
Em particular, minha principal preocupação está relacionada à no_duplicates
restrição que, pelo que entendi, cria um índice UNIQUE nos bastidores. (Por favor, corrija-me se eu entendi mal). O que eu gostaria de saber são eventuais sobrecargas de desempenho ou desvantagens que não conheço na construção desse tipo de índice com colunas tão múltiplas.