Ответ 1
Как насчет:
CHECK (status = "Current" or (status = "Complete" and enddate is not null))
У меня есть таблица, определяемая следующим 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.
Как насчет:
CHECK (status = "Current" or (status = "Complete" and enddate is not null))
CREATE TABLE test (
id integer PRIMARY KEY,
status text NOT NULL CHECK (status IN ('Current', 'Complete')),
enddate date NOT NULL
);
Это будет работать в SQLite с ограничением CHECK
, написанным в строке. Я изменил двойные кавычки на апострофы, чтобы их можно было использовать в PHP.
Там ничего не мешает вам иметь несколько ограничений CHECK
для одной таблицы. IMO - самое простое и легко расширяемое решение:
CHECK (status IN ("Current", "Complete"))
CHECK (status <> "Complete" OR enddate IS NOT NULL)
Это использует тот факт, что если A тогда B логически эквивалентно ни A, ни B.