如何创建独特的索引..WHERE another_field在H2中为NULL



我在做

CREATE UNIQUE INDEX index_name ON car (license_plate) WHERE deleted IS NULL

用例是软删除:

  1. 我们为汽车创建一行,deleted设置为null,license_plate唯一
  2. 现在我们不应该被允许进入另一辆车牌相同的车
  3. 我们通过将deleted设置为某个内容来软删除汽车
  4. 现在,我们应该被允许使用相同牌照进入一辆新车

这适用于postgres(在测试容器中运行(,但不适用于H2或HSQLDB。有没有一种方法可以用H2或我可以用Java编程创建的任何其他内存中数据库来实现同样的事情?

请参阅:PostgreSQL:创建一个索引来快速区分NULL和非NULL值

CREATE TABLE public.car (
id int4 NOT NULL GENERATED BY DEFAULT AS IDENTITY,
licenseplate varchar(20) NOT NULL,
deleted timestamp NULL
);
CREATE UNIQUE INDEX car_licenseplate_idx ON public.car USING btree (licenseplate) WHERE (deleted IS NULL);

我确实创建了字段deleted作为时间戳,所以当记录被"软"删除时,您可以添加一个触发器来用now()更新已删除的记录。

DBFIDDLE

最新更新