Как не создавать одинаковых строк в postgres

Все привет. В моей таблице есть 3 столбца, каждый из столбцов по отдельности не уникален. Мне нужно чтобы столбцы оставались не уникальными но в целом нельзя было добавить в таблицу строку, которая полностью соответствет другой строке.

Например чтобы в случае если уже есть запись:

id           username        dob
1            John            01-01-1991

то при вводе

insert into some_table (id, username, dob) values(1, 'John', '01-01-1991')

Новая запись не делалсь, а в идеале давала ошибку которую потом можно на бэкенде обработать

Но если при том же условии в параметрах для values поменять хоть одно значение то запись делалась

Фильтрация по id не подходит так как id ссылается на другую таблицу Как это можно реализовать?


Ответы (1 шт):

Автор решения: Алексей Шиманский

Наприме можно сделать первичный ключ составным (compound key). Такой ключ может потребоваться, если у нас сразу несколько столбцов должны уникально идентифицировать строку в таблице. Например:

CREATE TABLE order_items (
    order_id INTEGER,
    product_id INTEGER,
    quantity INTEGER,
    price MONEY,
    PRIMARY KEY(order_id , product_id )
);

Здесь поля order_id и product_id вместе выступают как составной первичный ключ. То есть в таблице order_items не может быть двух строк, где для обоих из этих полей одновременно были бы одни и те же значения.

→ Ссылка