通过postgres中的表验证外键
Validating foreign key through tables in postgres
我正在尝试通过另一个 table 验证我的 table 上的外键约束,但我不确定如何去做,甚至不知道 [=] 的正确命名法33=].
我有一个用户table:
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
) 组合也必须在 [=17= 中有一个有效条目] table?我试图防止的情况是将一个条目添加到 Product
,其中商店不属于用户。
有没有办法添加:
CHECK ( store_id == Store.id and user_id == Store.user_id )
到产品table?
除非我误解了你的问题,否则我很确定它只是:
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 约束.
我正在尝试通过另一个 table 验证我的 table 上的外键约束,但我不确定如何去做,甚至不知道 [=] 的正确命名法33=].
我有一个用户table:
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
) 组合也必须在 [=17= 中有一个有效条目] table?我试图防止的情况是将一个条目添加到 Product
,其中商店不属于用户。
有没有办法添加:
CHECK ( store_id == Store.id and user_id == Store.user_id )
到产品table?
除非我误解了你的问题,否则我很确定它只是:
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 约束.