J'ai une table définie par le code SQL suivant:
CREATE TABLE test (
id integer PRIMARY KEY NOT NULL UNIQUE,
status text NOT NULL,
enddate date,
/* Checks */
CHECK (status IN ("Current", "Complete"))
);
J'aimerais ajouter une contrainte qui requiert que enddate
soit non-nul si la status
est "Complète".
Est-ce possible? J'utilise SQLite v3.6.16.
Que diriez-vous:
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
);
Cela fonctionnera dans SQLite, avec la contrainte CHECK
écrite en ligne. J'ai changé les guillemets doubles en apostrophes pour pouvoir les utiliser en PHP.
Rien ne vous empêche d'avoir plusieurs contraintes CHECK
sur une seule table. IMO la solution la plus simple et la plus facilement extensible:
CHECK (status IN ("Current", "Complete"))
CHECK (status <> "Complete" OR enddate IS NOT NULL)
Ceci utilise le fait que si A, alors B est logiquement équivalent à soit pas A, ni B .