我正在创建一个(postgres)表格,其中包含:
CREATE TABLE workers(id INT PRIMARY KEY,deleted_at DATE,account_id INT)
我希望仅对尚未删除的工作人员进行唯一性约束。有没有一种很好的方法在sql中实现这一点?举个例子:
id | date | account_id
1 | NULL | 1
# valid, was deleted
2 | yesterday | 1
# invalid, dup account
# 3 | NULL | 1
答案 0 :(得分:2)
你想要Postgres所谓的“部分索引”(以及其他数据库调用过滤索引):
create unique index idx_workers_account_id on workers(account_id)
where deleted_at is null;
Here是有关此功能的文档。