Подтвердить что ты не робот

Условное ограничение проверки SQLite?

У меня есть таблица, определяемая следующим SQL:

CREATE TABLE test (
  id       integer PRIMARY KEY NOT NULL UNIQUE,
  status   text NOT NULL,
  enddate  date,
  /* Checks */
  CHECK (status IN ("Current", "Complete"))
);

Я хотел бы добавить ограничение, для которого enddate должно быть не нулевым , если status является "полным".

Возможно ли это? Я использую SQLite v3.6.16.

4b9b3361

Ответ 1

Как насчет:

CHECK (status = "Current" or (status = "Complete" and enddate is not null))

Ответ 2

CREATE TABLE test (
  id       integer PRIMARY KEY,
  status   text NOT NULL CHECK (status IN ('Current', 'Complete')),
  enddate  date NOT NULL
);

Это будет работать в SQLite с ограничением CHECK, написанным в строке. Я изменил двойные кавычки на апострофы, чтобы их можно было использовать в PHP.

Ответ 3

Там ничего не мешает вам иметь несколько ограничений CHECK для одной таблицы. IMO - самое простое и легко расширяемое решение:

CHECK (status IN ("Current", "Complete"))
CHECK (status <> "Complete" OR enddate IS NOT NULL)

Это использует тот факт, что если A тогда B логически эквивалентно ни A, ни B.