У меня есть иерархическая структура сущностей, каждая из которых может иметь более одного имени, так что у меня есть отдельная таблица имен. Упрощенная схема SQL выглядит следующим образом:PostgreSQL: ограничение, которое влияет на несколько таблиц
CREATE TABLE users (
id SERIAL NOT NULL PRIMARY KEY,
-- some fields
);
CREATE TABLE entities (
id SERIAL NOT NULL PRIMARY KEY,
parent_id INTEGER NOT NULL,
owner_id INTEGER NOT NULL,
FOREIGN KEY (parent_id) REFERENCES entities(id),
FOREIGN KEY (owner_id) REFERENCES users(id)
);
CREATE TABLE entity_names (
id SERIAL NOT NULL PRIMARY KEY,
entity_id INTEGER NOT NULL,
name VARCHAR(30) NOT NULL,
FOREIGN KEY (entity_id) REFERENCES entities(id)
);
И мне нужно, чтобы убедиться, что нет никаких объектов с повторяющимся именем (конечно же, с тем же parent_id
и owner_id
).
я могу гарантировать, что право перед добавлением к имени entity_names
с запросом, как это:
SELECT COUNT(t.id)
FROM entity_names n
JOIN entities e ON n.entity_id = e.id
WHERE e.parent_id = 123 and e.owner_id = 456 and n.name = 'foo'
Но мне интересно, если это возможно (и вменяемый) осуществлять это ограничение в базе данных?