我正在尝试配置一个外键,该键要求关系的每一侧的特定列都相同。这是为了确保在数据库级别强制实施“所有权”完整性。
这可能还不清楚,但是我认为通过一个例子可以更清楚地了解我的要求:
考虑一个具有名为user_account
的表的数据库,该表代表用户帐户。应用程序的用户可以创建books
和chapters
,它们都表示为数据库中的各个表。
每个chapter
和book
都具有user_account
的外键– book
是创建并“拥有”该数据段的帐户。这里的想法是,用户只能修改自己的书和章节。
CREATE TABLE book (
user_account_id uuid,
FOREIGN KEY (user_account_id) REFERENCES user_account(id)
);
表的摘要可能类似于:
chapter
此外,每个book
必须具有一个关联的chapter
。考虑一下CREATE TABLE chapter (
user_account_id uuid,
book_id uuid,
FOREIGN KEY (book_id) REFERENCES book(id),
FOREIGN KEY (user_account_id) REFERENCES user_account(id)
);
表定义的以下代码段:
book_id
此外键的问题在于,除非我在应用程序代码中禁止这样做,否则它允许用户创建与别人的书相关的章节。
如果必须在应用程序层上强制执行,则可以。但是,这似乎是PostgreSQL可能能够执行的。有没有一种方法可以要求给定chapter
的{{1}}引用与book
具有相同user_account_id
的{{1}}?
This question似乎与我要问的类似,但是答案中没有详细提供替代解决方案。