私はエンティティの階層構造を持っています。それぞれが複数の名前を持つことがあるので、別々の名前テーブルがあります。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
で、もちろん)重複した名前を持つエンティティがないことを確認する必要があり、次のように簡略化SQLスキーマが見えます。
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'
をしかし、それはデータベースでこの制約を実現することが可能(およびSANE)だ場合、私は思ったんだけど:
私はこのようなクエリでentity_names
に名前を追加する前に、その権利を確保することができますか?