contraintes d'integrite conditionnelles

Le
Etienne SOBOLE
salut.

je travaille avec postgreSQL

j'aimerai savoir s'il est possible de créer des contraintes d'intégrité
conditionnelle?
je m'explique

J'ai un systeme de reservation qui a une date de validité et qui référence
des lieux.
J'ai mis une contrainte d'intégrité entre mes reservation et mes lieux.
mais.

j'aimerai que cette contrainte ne s'applique que pour les reservation dont
la date est supérieur a la date du jour (par exemple)
sinon il m'est impossible de supprimer un lieu lié a une reservation, meme
si celle-ci s'est termié il y a 3 ans !!!

c'est pas glop

Merci
Etienne
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
francois
Le #21901581
Etienne SOBOLE a écrit :
j'aimerai que cette contrainte ne s'applique que pour les reservation dont
la date est supérieur a la date du jour (par exemple)
sinon il m'est impossible de supprimer un lieu lié a une reservation, meme
si celle-ci s'est termié il y a 3 ans !!!

c'est pas glop...



c'est normal, c'est justement ce qu'on attend d'une telle contrainte !

si c'est pas glop, c'est qu'il faut d'abord supprimer les réservations
liées à ce lieu (ce qui peut s'automatiser via ON DELETE CASCADE), ou
mettre à NULL le champ lieu de ces enregistrements, ou à un lieu
"spécial" faisant office de valeur archivée.

Une dernière option, surement celle qui vous convient le mieux, est de
coder un trigger sur la suppression de la table lieu, qui effectuera la
vérification dans les réservations, et supprimera les anciennes.

C'est quand même bizarre de vouloir supprimer ces données. Si c'est pour
un problème d'affichage, par exemple afficher la liste des lieux et que
vous ne voulez pas vous encombrer de ceux qui ne sont plus réservés
depuis 3 ans, faites une vue avec jointure sur les réservations qui
filtrent ceux non reservés depuis 3 ans, avec ceux jamais réservés pour
considérer les nouveaux lieux. C'est à mon avis le plus propre.

Mes 2 centimes ...

--
FG
SQLpro
Le #21901571
Les contraintes de type FOREIGN KEY dites "d'intégrité déclarative" n e
permettent que la mise en relation directe des valeurs (équivalent
d'une équi jointure).
En revanche vous pouvez mettre en oeuvre l'intégrité procédurale par
la biais d'un déclencheur.

A +

**
Frédéric BROUARD - SQLpro - MVP SQL Server
Spécialiste SQL/BD modélisation de données
SQL & SGBDR http://sqlpro.developpez.com/
Expert SQL Server : http://www.sqlspot.com
audits - optimisation - tuning - formation


On 8 juil, 11:42, "Etienne SOBOLE"
salut.

je travaille avec postgreSQL

j'aimerai savoir s'il est possible de créer des contraintes d'intégri té
conditionnelle?
je m'explique

J'ai un systeme de reservation qui a une date de validité et qui réf érence
des lieux.
J'ai mis une contrainte d'intégrité entre mes reservation et mes lieu x.
mais.

j'aimerai que cette contrainte ne s'applique que pour les reservation don t
la date est supérieur a la date du jour (par exemple)
sinon il m'est impossible de supprimer un lieu lié a une reservation, m eme
si celle-ci s'est termié il y a 3 ans !!!

c'est pas glop...

Merci
Etienne
Publicité
Poster une réponse
Anonyme