sql 允许重复空值的唯一索引

sql unique index allowing duplicate nulls

我有一个 table 和奖品代码

codes
code, user_id, prize_id

我在 user_id、prize_id

上有一个唯一索引

所有代码都已在 table 中,当用户兑换代码时,会分配一个 user_id = NULL 的随机代码。

不幸的是,这不起作用,因为唯一索引不允许我在不分配 user_id 的情况下多次添加相同的 prize_id。

有没有什么方法可以告诉唯一索引 NULL 不应该被认为是重复的?

初始状态:

code, user_id, prize_id
A, NULL, 1
B, NULL, 1
C, NULL, 1
D, NULL, 2
E, NULL, 2

用户1兑换奖品2的代码后:

code, user_id, prize_id
A, NULL, 1
B, NULL, 1
C, NULL, 1
D, 1, 2
E, NULL, 2

只需使用过滤索引:

create unique index unq_codes_user_prize on codes(user_id, prize_id) 
    where user_id is not null;