У меня есть следующая схема:
CREATE TABLE t2 (
id TEXT PRIMARY KEY,
t1_id TEXT REFERENCES t1(id)
);
CREATE TABLE t3 (
id TEXT PRIMARY KEY,
t2_id TEXT REFERENCES t2(id)
);
CREATE TABLE t4 (
t4_counter BIGINT NOT NULL,
t3_id TEXT REFERENCES t3(id),
// Need UNIQUE constraint on t4_counter + t2_id
);
В нашей системе есть 3 postgresql таблиц (t2, t3, t4). Есть и другие таблицы, но они для краткости игнорируются. Теперь у t2 есть уникальный идентификатор, который в t3 называется FOREIGN KEY. Точно так же t3 имеет уникальный идентификатор, который упоминается как иностранный ключ в t4. Теперь в t4 есть поле с именем t4_counter
. Теперь я хочу применить к этой таблице t4 ограничение UNIQUE, так что t4_counter combined with t2_id will always be UNIQUE
.
Один простой способ добиться этого - вставить t2_id
как новый столбец с ограничением REFERENCES
в таблица t4, а затем добавить UNIQUE constraint on (t2_id, t4_counter)
. Но так как у нас уже есть t3_id в таблице t4, мы должны быть в состоянии рассчитать его транзитивно.
Возможно ли достичь такого уникального ограничения без добавления t2_id в таблицу t4?
I Я использую postgresql 12+ версий, если это имеет значение.