我是否可以创建外键约束,该约束还要求父表上的任意行都必须是某个值?

问题描述 投票:0回答:1

作为一个例子,假设我有两个简单表和一个ENUM:

CREATE TYPE role AS ENUM (
  'admin',
  'seller'
);

CREATE TABLE users (
  id serial PRIMARY KEY,
  role role NOT NULL
);

CREATE TABLE orders (
  id serial PRIMARY KEY,
  seller_id int NOT NULL REFERENCES users(id), -- Should only allow for 'role' of 'seller'
  cost currency NOT NULL
);

为了创建订单,必须有负责销售的相应用户。只有roleseller的用户才能创建订单(例如roleadmin的用户不能为seller)。

但是,用户可以具有多个角色。当前没有数据库级别的检查来确保seller_id只能引用userroleseller。检查了contstraints documentation后,我不确定是否无需创建专门针对卖方的another表就可以做到这一点(即使它们在功能上完全相同)。

我有明显的失踪之处吗?

sql database postgresql data-modeling
1个回答
0
投票

解决此类问题的常用方法是创建一个表Seller,该表仅包含带有ID外键的User.ID列,因此将该用户描述为卖方,并且在需要User时]成为销售用户(例如seller_idOrder),您有一个外键不是User,而是Seller

© www.soinside.com 2019 - 2024. All rights reserved.