Bonjour ,

tout d'abord je vous presente le mld de ma base de données qui gere une agence de voyages


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
 
 
 
 Station(nomStation, capacité, lieu, région, tarif) 
 Activité(nomStation,libellé, prix) 
 Client(id, nom, prénom, ville, région, solde) 
 Sejour(id, station, début, nbPlaces)
j'utilise postgresql je voudrais gérer certaines contraintes:

. Le prix d'une activité doit être inférieur au tarif de la station et supérieur à 0

Pour une date de début donnée, le nombre total de places réservées dans une station doit être inférieur à la capacité de la station.



pour l'instant je n'ai testé que la première . jusqu'à maintenant je n'ai géré que des contraintes simples du style que les valeurs d'un champ soient comprises entre les valeurs d'une liste...

pour cette requete j'avais pensé à gérer ca comme:






Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
alter table activite add constraint prix check (prix <(select tarif from station) and prix>0);
mais j'ai eu comme erreur comme quoi qu'on ne peut pas avoir de sous requete dans une contrainte.
donc apres j'ai testé





Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
alter table activite add constraint prix check (prix <station.tarif and prix>0);
etant donne que nomstation est une clé etrangere mais ca n'a pas fonctionné j'ai eu comme erreur




Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
NOTICE:  Ajout d'une entrée manquante dans FROM (table «station») 
 ERREUR:  La contrainte de vérification pourrait seulement référencer la relation «activite»
et d'autre part j'ai voulu tester avec les triggers mais je n'ai jamais utilisé ca donc je voudrais savoir si cette syntaxe est correcte


Code : Sélectionner tout - Visualiser dans une fenêtre à part
CREATE TRIGGER ins_sum BEFORE INSERT ON activite referencing new as prix (when prix < (select tarif from station where station.nomstation=activite.nomstation) for each row);
merci d'avance