Составной первичный ключ и уникальное ограничение (UNIQUE) в PostgreSQL отличаются по характеру налагаемых ограничений.
Составной первичный ключ (PRIMARY KEY) гарантирует уникальность и исключает значения NULL. 2 Такой ключ может потребоваться, если для уникальной идентификации строки в таблице нужно использовать значения сразу нескольких столбцов. 1 Например, в таблице OrderLines поля OrderId и ProductId вместе выступают как составной первичный ключ. 1 В этом случае не может быть двух строк, где для обоих из этих полей одновременно были бы одни и те же значения. 1
Уникальное ограничение (UNIQUE) помогает избежать повторения значений в определённом столбце. 3 При использовании UNIQUE нельзя добавить в таблицу две строки, у которых значения для конкретного столбца будут совпадать. 1 Однако в отличие от PRIMARY KEY, UNIQUE допускает значения NULL. 24
Таким образом, PRIMARY KEY фокусируется на уникальности и отсутствии значений NULL, в то время как UNIQUE допускает NULL, но при этом поддерживает уникальность. 2