2015-03-03 4 views
3

У меня есть SAMPLE_TABLE с колонки BIZ_ID, который должен быть уникальным, если столбец активен не равен 0.Условный Уникальный индекс h2 базы данных

На базе данных оракула индекс выглядит следующим образом:

CREATE UNIQUE INDEX ACTIVE_ONLY_IDX ON SAMPLE_TABLE (CASE "ACTIVE" WHEN 0 THEN NULL ELSE "BIZ_ID" END); 

Как будет выглядеть этот уникальный индекс в базе данных h2?

ответ

4

В H2, можно использовать вычисляемый столбец, который имеет уникальный индекс:

create table test(
    biz_id int, 
    active int, 
    biz_id_active int as 
     (case active when 0 then null else biz_id end) 
     unique 
); 
--works 
insert into test(biz_id, active) values(1, 0); 
insert into test(biz_id, active) values(1, 0); 
insert into test(biz_id, active) values(2, 1); 
--fails 
insert into test(biz_id, active) values(2, 1); 
+0

, которая не работала для меня, как есть. Вместо '(case active, когда 0, а затем else else biz_id end)' Мне пришлось использовать '(случай, когда active = 0, а затем null else biz_id end)' –

0

Даже если Oracle может это сделать, не надо.

Вернитесь к классам моделирования данных - уникальные индексы всегда должны быть уникальными.

вы можете попробовать индекс на основе функции ...