|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 4 ![]() |
Bonjour,
J'essaye de modéliser une base de donnée pour suivre des négociations de plusieurs contrats en simultané. La société (= nous) fait des offres, le client fait des contre-offres, jusqu’à ce qu’un accord soit conclu (montant offre = montant contre-offre). Le but est de créer un tableau qui résume l’avancement des négociations pour tous les contrats (dernière offre, dernière contre-offre, négociations conclues ou non…) ------------- Plus précisément, on a une première table « Contrats » avec les champs :
Pour chaque contrat il arrive de nombreux évènements : à une certaine date, un montant est proposé par l’une ou l’autre des parties (nous = offre, ou le client = contre-offre). L’évènement peut donc être de deux types : offre (envoi par nous) ou contre-offre (envoyée par le client). => Table « Types_évènement » avec un champ « Type » et les valeurs « offre » et « contre-offre ».Pour chaque évènement qu’on entre dans la base de données, on spécifie aussi le statut du contrat : => Table « Statuts » avec un champ « Statut » et les valeurs « en négociation », « accord conclu », « en attente réponse client », etc.La table évènements est donc montée de la façon suivante : => Table « Évènements » avec les champs :
------------- Ce que j’ai déjà fait : États :
Formulaires :
Requêtes :
------------- Ce qu’on veut faire : La requête indiquée ci-dessus est un début, mais je veux afficher un unique tableau avec une ligne par contrat, où on résume :
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Johnny_titan,
Ce que tu demandes ne semble pas très compliqué à obtenir. Cependant, peut-être faudrait-il examiner la conception de ta base. Si j'ai bien compris, tes tables sont les suivantes (proposition d'Id en italique à considérer) : Table Contrats : - Numéro_contrat (clé primaire numéro auto ?) - Nom_contrat ... Table Types_évènement : - Id_type (clé primaire) - Type (« offre », « contre-offre ») ... Table Statuts : - Id_statut (clé primaire) - Statut (« en négociation », « accord conclu », « en attente réponse client », etc.) ... Table Évènements : - Id_evenement (clé primaire) - Numéro_contrat - Date_évènement - Id_Type - Montant - Id_Statut ==> index unique : Numéro_contrat / Date_évènement. Relations : Contrats 1----n Évènements, via Numéro_contrat ; Types_évènement 1----n Évènements, via Id_type ; Statuts 1----n Évènements, via Id_Statut. Dans un premier temps, le statut se situe, plutôt au niveau du contrat et non de l'événement, non ? Sinon, tu es obligé d'indiquer à tous les événements le statut du contrat, même s'il n'a pas changé.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 4 ![]() |
Bonjour,
Merci déjà pour ces précisions : je suis d'accord pour les Id à ajouter et pour les relations entre les tables. Pour le statut je suis aussi d'accord avec toi, ça semble plus logique de l'intégrer dans la table Contrats. En fait j'avais fonctionné comme ça pour la raison suivante : => Dans ma tête la table Contrats était relativement "figée". On peut toujours en créer un nouveau de temps en temps mais elle ne bouge pas très souvent. En revanche il y a très souvent de nouveaux évènements, qui mettent à jour à chaque fois le statut d'un contrat ou d'un autre. J'avais donc une table Évènements avec un beau formulaire associé : pour chaque nouvel évènement je le remplissais et je rentrais le statut mis à jour... |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Oui, la table Évènements est une bonne idée : elle permet de conserver l'historique d'un contrat.
Donc, nous validons les changements suivants. Table Contrats : - Numéro_contrat (clé primaire numéro auto ?) - Nom_contrat - Id_Statut ... Table Évènements : - Id_evenement (clé primaire) - Numéro_contrat - Date_évènement - Id_Type - Montant ==> index unique : Numéro_contrat / Date_évènement. Concernant ta demande initiale : Citation:
- ajouter la table Evenements (FROM) ; - ajouter la table Type_Evenement (FROM) ; - lier Evenements à Type_Evenement, via Id_type (JOIN) ; - passer en regroupement (GROUP BY) ; - sélectionner Numero_contrat, Id_Type, max(Date_évènement) (SELECT) ; - critères : Où Id_Type=1 ("offre") (WHERE). ==> donne la liste des contrats avec la date de leur dernière "offre" : 1 ligne par contrat. Créer une requête R2, via l'assistant : - ajouter la table Evenements (FROM) ; - ajouter la table Type_Evenement (FROM) ; - lier Evenements à Type_Evenement, via Id_type (JOIN) ; - passer en regroupement (GROUP BY) ; - sélectionner Numero_contrat, Id_Type, max(Date_évènement) (SELECT) ; - critères : Où Id_Type=2 ("contre-offre") (WHERE). ==> donne la liste des contrats avec la date de leur dernière "contre-offre" : 1 ligne par contrat. Créer une requête R3, via l'assistant : - ajouter la table Contrats (FROM) ; - ajouter la requête R1 (FROM) ; - ajouter la requête R2 (FROM) ; - lier Contrats à R1, via numero_contrat (JOIN) ; - lier Contrats à R2, via numero_contrat (JOIN) ; - sélectionner les champs que tu veux (SELECT). ==> tu devrais obtenir ce que tu souhaites. Non testé, juste pressenti... mais, tu vois le principe, je pense. Je ne serai pas disponible demain donc, à après-demain.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 4 ![]() |
Je viens de tester le tout et le principe est là ! Ma requête R3 sélectionne les champs Numéro_Contrat, MaxDeDate_évènement dans R1 et MaxDeDate_évènement dans R2.
Il reste quand même quelques affaires à régler :
Merci en tout cas, ça avance ! Thibaut |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonsoir Johnny_titan,
Citation:
Citation:
Créer une requête R1_1 : - ajouter la requête R1 (FROM) ; - ajouter la table Evenement (FROM) ; - lier R1 à Evenement, via Numero_contrat, Id_Type, max(Date_évènement) (JOIN) ; - sélectionner les champs que tu veux (SELECT). ==> ATTENTION : pas de dates identiques pour un même contrat/Id_type. Créer une requête R2_1 : - ajouter la requête R2 (FROM) ; - ajouter la table Evenement (FROM) ; - lier R2 à Evenement, via Numero_contrat, Id_Type, max(Date_évènement) (JOIN) ; - sélectionner les champs que tu veux (SELECT). ==> ATTENTION : pas de dates identiques pour un même contrat/Id_type. Dans R3, remplacer R1 par R1_1 et R2 par R2_1. Et là, tu devrais obtenir ce que tu souhaites.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 4 ![]() |
Bonjour,
Effectivement pour les montants j'avais trouvé entre temps. Pour le reste ça marche aussi ! Merci beaucoup en tout cas. Thibaut |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com