Условен уникален индекс на h2 база данни

Имам SAMPLE_TABLE с колона BIZ_ID, която трябва да е уникална, когато активната колона не е равна на 0.

В база данни на Oracle индексът изглежда така:

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

Как би изглеждал този уникален индекс в база данни h2?


person Fabian Tschachtli    schedule 03.03.2015    source източник
comment
Дори ако Oracle може да направи това, недейте. Върнете се към вашите класове за моделиране на данни - уникалните индекси винаги трябва да са уникални. може да опитате индекс, базиран на функции...   -  person Larry    schedule 03.03.2015


Отговори (1)


В 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);
person Thomas Mueller    schedule 03.03.2015
comment
това не работи за мен, както е. Вместо (case active when 0 then null else biz_id end) трябваше да използвам (case when active=0 then null else biz_id end) - person Emmanuel Touzery; 10.02.2017