У меня есть postgresql таблицы со следующим макетом:
create table bar(
bar_id serial primary key,
... other columns
)
create table foo(
foo_id serial primary key,
bar_id bigint not null,
... other columns
)
create table baz(
baz_id serial primary key,
foo_id bigint not null references foo(foo_id),
bar_id bigint not null references bar(bar_id),
constraint fk_fb foreign key (foo_id, bar_id) references foo(foo_id, bar_id)
)
Я хочу сослаться на foo_id и bar_id в другой таблице (baz) и иметь ограничение внешнего ключа, поэтому мне нужно добавить уникальное ограничение для (foo_id, bar_id). Тот факт, что foo_id является первичным ключом, гарантирует, что комбинация foo_id и bar_id уникальна, даже если все значения bar_id одинаковы. Мой вопрос: есть ли снижение производительности при добавлении ограничения уникальности для (foo_id, bar_id) или если postgresql достаточно умен, чтобы знать, что тот факт, что foo_id уникален по всей таблице благодаря тому, что является первичным ключом, означает, что с bar_id ничего делать не нужно.
Таблица foo содержит строки, которых нет в baz, поэтому удаление bar_id из таблицы foo не будет работать.