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 !!!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
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
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
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" <etienne-nos...@tlk.fr> 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 !!!
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 !!!