可延迟的部分唯一索引

时间:2017-11-21 12:28:07

标签: sql postgresql database-design

我的应用程序有多个用户和每个用户的可订购列表。列表中的项目可以被软删除。架构如下。

create table list_item (
    id serial primary key
    user_id integer not null, -- Foreign key
    sort integer not null, -- The position in the list
    deleted_at timestamptz, -- Time of deletion, null if not deleted
    ...
)

(user_id, sort)必须是唯一的,因为每个列表中的每个位置只能有一个项目。为了支持软删除,我从索引中排除deleted_at is null项。所以我有以下索引:

create unique index on list_item (user_id, sort) where deleted_at is null;

现在,无论何时创建或删除列表项,我都需要移动(递增/递减)所有sort值。这可能会违反唯一索引,除非将其设置为可延迟(或者我使用效率较低的变通方法来强制执行更新顺序)。但是不可能有一个可推迟的部分唯一索引。

我该如何解决这个问题?我该如何改变设计?

0 个答案:

没有答案