В качестве примера, скажем, у меня есть две упрощенные таблицы и ENUM:
CREATE TYPE role AS ENUM (
'admin',
'seller'
);
CREATE TABLE users (
id serial PRIMARY KEY,
role role NOT NULL
);
CREATE TABLE orders (
id serial PRIMARY KEY,
seller_id int NOT NULL REFERENCES users(id), -- Should only allow for 'role' of 'seller'
cost currency NOT NULL
);
Чтобы создать заказ, должен быть соответствующий пользователь, который отвечал за продажу. Только пользователь с role
из seller
должен иметь возможность создать заказ (например, пользователь с role
из admin
не должен быть в состоянии seller
).
Однако пользователь может иметь несколько ролей. В настоящее время нет проверки на уровне базы данных, чтобы гарантировать, что seller_id
может ссылаться только на user
с role
из seller
. Проверив документацию по договорам , я не совсем уверен, что это возможно без создания другой таблицы специально для продавца (даже если в остальном они функционируют точно так же).
Есть ли что-то очевидное, что я упускаю?