Некоторые столбцы должны быть заполнены или все должны быть нулевыми - PullRequest
0 голосов
/ 04 июля 2019

Моя таблица (10 столбцов) имеет 4 столбца (A, B, C, D), которые должны быть либо нулевыми, либо заполненными.

Я пытаюсь сделать это следующим образом:

constraint chk_same check (A is not null AND B is not null And C is not null AND is not null) OR (A is null AND B is null And C is null AND D is null)

Выглядит плохо, есть ли лучший / более простой способ сделать это?

1 Ответ

2 голосов
/ 04 июля 2019

Ваш метод в порядке. Более общий подход заключается в подсчете количества значений NULL и проверке:

constraint chk_same
    check ( ((case when A is null then 1 else 0 end) +
             (case when B is null then 1 else 0 end) +
             (case when C is null then 1 else 0 end) +
             (case when D is null then 1 else 0 end)
            ) in (0, 4)
          ) ;

Это более общий принцип, поскольку вы можете легко проверить, имеют ли 2 из 4 или 3 из 4 столбцов значения NULL.

...