|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 426 ![]() |
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 :
Code :
rdv_id, rdv_contact, rdv_adress, evn_id, 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) Attention je suis sous PostgreSQL 7.3 donc s'il faut une fonction je n'ai que SQL comme langage. Merci A+JYT |
||
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : août 2007 Messages : 128 ![]() |
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). |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 426 ![]() |
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 :
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 |
||
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : août 2007 Messages : 10 ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 426 ![]() |
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 |
|
|
00
|
|
|
#6 | |
|
Invité régulier
![]() Inscription : août 2007 Messages : 10 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 426 ![]() |
ok merci pour l'info
A+JYT |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com