通过postgres中的表验证外键



我试图通过另一个表验证我的表上的外键约束,但我不确定如何去做,甚至不知道正确的命名法到谷歌。

有一个User表:

create table User ( id uuid primary key );

每个用户可以有多个store:

create table Store(
id uuid primary key,
user_id uuid foreign key store_user_id_fk references User (id)
);

和每个用户+商店可以有产品

create table Product(
id uuid primary key,
user_id uuid foreign key product_user_id_fk references User (id), 
store_id uuid foreign key product_sotre_id_fk references Store (id),
)

我的问题是:我如何在Product上写一个约束,使得任何(user_id,store_id)组合也必须在Store表中有一个有效的条目?我试图防止的情况是一个条目被添加到Product,其中商店也不属于用户。

有没有办法加上:

CHECK ( store_id == Store.id and user_id == Store.user_id )

到产品表?

除非我误解了你的问题,否则我很确定它会是:

create table Product(
id uuid primary key,
user_id uuid foreign key product_user_id_fk references User (id), 
store_id uuid foreign key product_sotre_id_fk references Store (id),
FOREIGN KEY (user_id, store_id) REFERENCES store(user_id, id)
);

这将表明存储的主键应该是(id, user_id)而不仅仅是id,或者至少应该对(id, user_id)有一个UNIQUE约束。

最新更新