-- ============================================================ -- 03_checks.sql — Contraintes d'intégrité métier -- ============================================================ -- =========================================== -- UTILISATEURS -- =========================================== -- Email déjà couvert par UNIQUE + regex dans le schéma -- Vérifier que mobile et téléphone fixe ne sont pas identiques ALTER TABLE utilisateurs ADD CONSTRAINT chk_telephone_diff CHECK ( mobile IS NULL OR telephone_fixe IS NULL OR mobile <> telephone_fixe ); -- =========================================== -- ENFANTS -- =========================================== -- Si l’enfant est "a_naitre", la date_prevue_naissance doit être renseignée ALTER TABLE enfants ADD CONSTRAINT chk_enfant_date_prevue CHECK ( (statut = 'a_naitre' AND date_prevue_naissance IS NOT NULL) OR (statut <> 'a_naitre') ); -- Si l’enfant est déjà né, sa date_naissance doit être renseignée ALTER TABLE enfants ADD CONSTRAINT chk_enfant_date_naissance CHECK ( (statut IN ('actif','scolarise') AND date_naissance IS NOT NULL) OR (statut = 'a_naitre') ); -- =========================================== -- DOSSIERS -- =========================================== -- Budget positif si renseigné ALTER TABLE dossiers ADD CONSTRAINT chk_dossier_budget_pos CHECK (budget IS NULL OR budget > 0); -- =========================================== -- CONTRATS -- =========================================== -- Cohérence des dates : date_debut obligatoire pour un contrat signé ALTER TABLE contrats ADD CONSTRAINT chk_contrat_date_debut CHECK ( (statut = 'brouillon' OR date_debut IS NOT NULL) ); -- =========================================== -- EVENEMENTS -- =========================================== -- Cohérence des dates : début < fin ALTER TABLE evenements ADD CONSTRAINT chk_evenement_dates CHECK (date_fin IS NULL OR date_debut <= date_fin); -- =========================================== -- VALIDATIONS -- =========================================== -- Si statut = 'valide', alors modifie_le doit être >= cree_le ALTER TABLE validations ADD CONSTRAINT chk_validation_modif CHECK ( (statut <> 'valide') OR (modifie_le IS NULL OR modifie_le >= cree_le) );