Лучший способ добавить ограничение нескольких столбцов с помощью PSQL - PullRequest
0 голосов
/ 16 июня 2020

У меня есть таблица доступности:

CREATE TABLE availability (
    id SERIAL PRIMARY KEY,
    user_id int REFERENCES users(id) NOT NULL,
    address_id int REFERENCES addresses(id) ON DELETE CASCADE,
    day_of_week int NOT NULL,
    start_mn int,
    end_mn int,
    EXCLUDE using gist (user_id WITH =, day_of_week WITH =, (array[start_mn, end_mn]) WITH &&)
)

В моей таблице адресов у меня также есть поле user_id, которое ссылается на users(id).

Каким будет лучший способ убедитесь, что вставленный связанный адрес имеет тот же user_id, что и тот, который указан в таблице доступности?

Я безуспешно пытался найти триггер или функцию, и я хотел бы знать, есть ли способ c справиться с этим.

1 Ответ

0 голосов
/ 16 июня 2020

Вы должны создать ограничение UNIQUE для (id, user_id) в addresses.

Затем создать составной внешний ключ:

CREATE TABLE availability (
   ...,
   FOREIGN KEY (address_id, user_id) REFERENCES addresses (id, user_id)
);
...