微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过postgres中的表验证外键

如何解决通过postgres中的表验证外键

我正在尝试通过另一个表来验证我的表上的外键约束,但我不确定如何去做,甚至不确定如何使用正确的 google 命名法。

我有一个用户表:

create table User ( id uuid primary key );

每个用户可以拥有多个商店:

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)
);

这表明 store 的主键应该是 (id,user_id) 而不仅仅是 id,或者至少应该对 (id,user_id) 具有唯一约束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。