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

Sql 我是否可以创建一个外键约束,该约束还要求父表上的任意行为某个值?,sql,database,postgresql,data-modeling,Sql,Database,Postgresql,Data Modeling,举个例子,假设我有两个简单的表和一个枚举: 创建类型角色作为枚举( “管理员”, “卖方” ); 创建表用户( id串行主键, 角色角色不为空 ); 创建表格订单( id串行主键, 卖方id int NOT NULL引用用户(id)——应只允许“卖方”的“角色” 成本货币不为空 ); 为了创建订单,必须有负责销售的相应用户。只有具有角色卖家的用户才能创建订单(例如,具有角色管理员的用户不能成为卖家) 但是,一个用户可以有多个角色。目前没有数据库级别的检查来确保卖方id只能引用具有卖方角色的用户

举个例子,假设我有两个简单的表和一个枚举:

创建类型角色作为枚举(
“管理员”,
“卖方”
);
创建表用户(
id串行主键,
角色角色不为空
);
创建表格订单(
id串行主键,
卖方id int NOT NULL引用用户(id)——应只允许“卖方”的“角色”
成本货币不为空
);
为了创建订单,必须有负责销售的相应用户。只有具有<代码>角色<代码>卖家<代码>的用户才能创建订单(例如,具有<代码>角色<代码>管理员<代码>的用户不能成为<代码>卖家<代码>)

但是,一个用户可以有多个角色。目前没有数据库级别的检查来确保
卖方id
只能引用具有
卖方
角色的
用户
。检查了之后,如果不专门为卖家创建另一个表,我不能完全确定这是否可行(即使它们在其他方面的功能完全相同)


有什么明显的遗漏吗?

解决这类问题的通常方法是创建一个表
Seller
,其中只包含一个
ID
列,该列带有
User.ID
的外键,因此将该用户描述为卖家,并且当您需要
用户
成为卖家用户时(例如,
订单的
卖方id
)您的外键不是指向
用户
,而是指向
卖方