作为一个例子,假设我有两个简单表和一个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
);
为了创建订单,必须有负责销售的相应用户。只有role
为seller
的用户才能创建订单(例如role
为admin
的用户不能为seller
)。
但是,用户可以具有多个角色。当前没有数据库级别的检查来确保seller_id
只能引用user
为role
的seller
。检查了contstraints documentation后,我不确定是否无需创建专门针对卖方的another表就可以做到这一点(即使它们在功能上完全相同)。
我有明显的失踪之处吗?
解决此类问题的常用方法是创建一个表Seller
,该表仅包含带有ID
外键的User.ID
列,因此将该用户描述为卖方,并且在需要User
时]成为销售用户(例如seller_id
的Order
),您有一个外键不是User
,而是Seller
。