H2 - Создать уникальный индекс с двумя столбцами - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я использую запрос postgres для создания двух уникальных индексов.

Каждый индекс состоит из двух столбцов, где значение одного столбца проверяется на нулевое / не нулевое:

CREATE UNIQUE INDEX deleted_not_null_idx 
ON user (ADDRESS, DELETED)
WHERE DELETED IS NOT NULL;

CREATE UNIQUE INDEX deleted_null_idx 
ON user (ADDRESS)
WHERE DELETED IS NULL;

Я пытаюсь сделать то же самое на H2, но у меня возникают проблемы понимание синтаксиса и структуры H2.

Как бы сформировалось это выражение, если бы оно было написано с использованием синтаксиса H2?

1 Ответ

1 голос
/ 17 марта 2020

Обходной путь для обеспечения «уникальности столбцов в подмножестве строк» ​​может быть разработан, если вы хотите добавить искусственный дополнительный столбец в таблицу именно для этой цели. Не уверен, что это лучшая идея, но может выполнить эту работу.

Например:

create table t (
  address varchar(20),
  deleted int,
  extra_column varchar(20) as
    case when deleted is null then null else address end,
  constraint uq1 unique (extra_column)
);

insert into t (address, deleted) values ('123 Maple', 20);
insert into t (address, deleted) values ('456 Oak', 25);
insert into t (address, deleted) values ('456 Oak', null); -- succeeds
insert into t (address, deleted) values ('456 Oak', 28); -- fails

Результат:

select * from t;

ADDRESS    DELETED  EXTRA_COLUMN
---------  -------  ------------
123 Maple       20  123 Maple   
456 Oak         25  456 Oak     
456 Oak     <null>  <null>      
...