Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

contraintes d'integrite conditionnelles

2 réponses
Avatar
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

2 réponses

Avatar
francois
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
Avatar
SQLpro
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" wrote:
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