Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2007, 13h31   #1
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
Par défaut pb Syntaxe contrainte multitables

Bonjour

J'ai deux tables
RendezVous et Event
la table rendez-vous contient des évènements. il n'y a dessus qu'une contrainte d'unicité sur la clef. en effet il peut y avoir plusieurs évènements simultanés

certains de ses évènements sont des rendez-vous la table rendez-vous contient les infos propre au rendez-vous et les dates et heures du dit rendez-vous sont dans Event la table rendezvous contient l'id de l'évènement relatif (relation 1-0)

j'ai besoin d'ajouter à se schémas une contrainte d'unicité sur les deux table

un rendezvous est en gros un élément de
Code :
1
2
3
SELECT *
FROM rendezvous AS rdv
INNER JOIN event AS evn USING (evn_id);
si je décompose un peut j'ai les champs
Code :
rdv_id, rdv_contact, rdv_adress, evn_id, evn_begin_dt, evn_end_dt
il me faudrait une contrainte de non intersection sur evn_begin_dt, evn_end_dt
mais pas sur la table event vu qu'il peu y avoir plusieurs évènements simultané mais sur la jointure
Code :
rendezvous INNER JOIN event USING (evn_id)
savez vous comment écrire cela de façon simple
Attention je suis sous PostgreSQL 7.3 donc s'il faut une fonction je n'ai que SQL comme langage.

Merci A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2007, 15h57   #2
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
Tout d'abord, la 7.3 dispose déjà de PL/Pgsql, PL/Tcl, PL/python, etc. Voir http://www.postgresql.org/docs/7.3/i...rammer-pl.html pour plus d'infos. Il y a peut-être une autre raison qui fait que vous ne pouvez pas utiliser autre chose que SQL ou C dans vos procédures stockées mais il est clair que ce n'est pas à cause de la version 7.3.

Pour le reste, j'avoue ne pas avoir très bien compris. Si vous souhaitez simplement que l'heure de début soit antérieure à l'heure de fin, une contrainte CHECK suffit. Par contre, si vous souhaitez que votre contrainte d'intersection se vérifie sur toutes les lignes, cela devient plus complexe et demandera l'écriture d'une fonction en C ou en PL/pgsql (PL/sql étant trop simpliste pour cela).
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2007, 19h04   #3
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
non je souhaite une contrainte dans la table évent sur les dates de début et de fin que si il y a un élément référençant cet évènement dans rendez-vous

par exemple sur le résultat de la jointure suivant
Code :
1
2
3
4
5
6
7
 
SELECT *
FROM rendezvous AS rdv
INNER JOIN event AS evn USING (evn_id);
evn_id evn_desc evn_begin_dt evn_end_dt rdv.evn_d rdv_id rdv_contac
1        avnif       2007-03-13    2007-03-13 NULL         NULL     NULL
2        iphone     2007-09-25    2007-09-25 2            1        jobs
si j'insère un un rendezvous le 13/03/2007 je peux car il n'y a pas d'autre rendezvous à cette date
par contre si je veux insérer un rendezvous le 25/09/2005 je ne peux pas car j'ai déjà un rendezvous.

si je mets une simple contrainte sur event je ne pourait pas insérer un rendezvous le 13/03/2007 alors que je n'ais pas de rendezvous se jour là
il est donc necéssaire de faire intervenir la table rendezvous dans la contrainte mais je ne sais pas comment.

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 21h03   #4
Invité régulier
 
Inscription : août 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 10
Points : 8
Points : 8
Si un type d'événement (rendez-vous, autres...) ne peut avoir lieu qu'une fois par jour, il suffit d'ajouter une colonne pour le type d'événement et de mettre une contrainte d'unicité entre le type d'événement, et le jour de l'événement.

Si seuls les rendez-vous ne peuvent avoir lieu qu'une seule fois par jour, il faudra traiter les rendez-vous séparément des autres événements, c'est à dire qu'ils aient leurs propres colonnes d'id, descriptions, date de début et de fin.
Makkhdyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 21h25   #5
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
je ne peux pas j'ai une application existante et toucher au modèle de données serais très couteux il y à la dedans des requêtes de plusieurs centaines de lignes
je me vois mal tout refaire parce qu'on ma demandé d'ajouter une contrainte

en fait le plus simple serait en retouchant le modèle de faire hériter rendez-vous de évent et de mettre la contrainte sur rendezvous.

mais si je fais un select * sur event verrais-je les évènements rendezvous ?
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 21h33   #6
Invité régulier
 
Inscription : août 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 10
Points : 8
Points : 8
Citation:
Envoyé par sekaijin Voir le message
mais si je fais un select * sur event verrais-je les évènements rendezvous ?
A+JYT
Oui.

Attention cependant avec l'héritage, evn_id posera entre autres problème puisque tu pourra avoir un evn_id a 1 dans ta table d'évenements et en même temps une evn_id a 1 dans tes rendez-vous.
Makkhdyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2007, 17h23   #7
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
ok merci pour l'info
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h43.


 
 
 
 
Partenaires

Hébergement Web