|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Bonsoir,
j'ai un soucis de relations. Je m'explique : Ma table Bons de commande (T_BDC) sert à enregistrer des commandes. Elle est en relation avec des marchés (T_Marche) Ces marchés concernent une ou plusieurs entreprises (T_Tiers) Les entreprises peuvent avoir plusieurs marchés et vis versa. Or il existe quelques cas particuliers : Certains bons de commandes ne font référence à aucun marché, mais toujours à un tiers (entreprises) Pour me faciliter les choses, j'ai prévu un marché "neutre". Je relie les entreprises qui n'ont pas de marché via la table relationnelle TR_Marche_Tiers. Je rajoute donc les enregistrements correspondants aux entreprises connectées avec le marché "neutre". Lors des saisies dans le formulaire de bons de commande, si je sélectionne le marché "neutre", j'obtiens alors autant de répétition du bon de commande qu'il existe d'entreprises en relation avec ce marché "neutre". Je me plante donc dans mon schéma! ![]() Voici le modèle de données : ![]() Merci d'avance |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Minot83,
La solution de créer un marché fictif n'est pas la bonne : dans tes futurs traitements tu devras, toujours, penser à l'exclure... La solution est d'enlever l'intégrité référentielle dans les "Relations" : tu pourras donc créer des bons de commandes avec NUM_Marche=null ou présent dans T_Marche. Ne crains pas de retirer l'intégrité référentielle, car c'est réellement ce dont tu as besoin.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#3 | |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Citation:
Je pourrais créer des bons de commandes avec NUM_Marche=null et accéder aux entreprises "sans marché" via ce MCD ? |
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Citation:
Citation:
Il me semble commencer à comprendre ce que tu veux faire, mais je peux me tromper. Si j'ai vu juste, les 2 MCD ne sont pas bons. Il faudrait une relation : TR_Marche_Tiers 1----n T_BDC, via NUM_Marche et NUM_Tiers. Ce qui veut donc dire qu'un même couple NUM_Marche/NUM_Tiers peut avoir plusieurs commandes, couple que tu retrouves donc dand la commande. Ceci tout en conservant tes relations, telles qu'elles, entre T_Tiers, T_Marche vers TR_Marche_Tiers, car la relation n----n doit être conserver. Me trompe-je ?
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
||
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Bonsoir,
Citation:
Étant donné qu’un bon de commande peut faire référence soit à un tiers, soit à un marché, le diagramme pourrait être le suivant (sous réserve que la table TR_Marche_Tiers définisse effectivement les associations entre les marchés et les entreprises) : Dans ce diagramme, les flèches orientées expriment le sens des contraintes d’intégrité référentielle : la table BDC_TIERS fait référence à la table BDC, mais la table BDC ne fait pas référence à la table BDC_TIERS (surtout pas de cycles...) Même principe pour la table BDC_MARCHE_TIERS.Le symbole P inscrit dans un cercle exprime une contrainte de partitionnement : une valeur de l’attribut Id_BDC de la table BDC doit aussi être exactement une valeur soit de l’attribut Id_BDC de la table BDC_TIERS, soit de l’attribut Id_BDC de la table BDC_MARCHE_TIERS.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
|
10
|
|
|
#7 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Bonjour et merci beaucoup pour votre réponse,
j'avoue ne pas comprendre l'intérêt des tables "BDC_TIERS" et "BDC_MARCHE_TIERS". Etant donné qu'un bon de commande n'est lié qu'à 1 seul marché ou aucun, et aussi qu'à 1 seul tiers (entreprise) Question : Access sait-il gérer une relation de 0 à n ? Car c'est typiquement ce qu'il me faudrait, non ? |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonjour,
tu pourrais nous éclairer sur les règles de gestion, j'ai un doute... Citation:
- soit à une entreprise (sans référence avec un marché) - soit à un marché (sous-entendu toutes les entreprises concernées par le marché). Citation:
- soit à une entreprise (sans référence avec un marché) - soit à une (voire plusieurs?) entreprise(s) dans le cadre d'un marché particulier 1°) ou 2°) ou autre chose ? |
||
|
00
|
|
|
#9 | |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Citation:
Un bon de commande est en relation avec une seule entreprise. (choix de la compta, d'adresser le BDC au titulaire du marché/ qui se charge de retransmettre aux associés, co-traitants...) Donc 1 BDC a -0 ou 1 marche -1 seule entreprise |
|
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
Je propose de reformuler ça autrement
![]() Un bon de commande est libellé : - soit à une entreprise en particulier si la commande n’est pas passée dans le cadre d’un marché - soit à un marché (et dans ce cas le processus consiste à adresser le bon au titulaire du marché) Tu confirmes que c’est bien l’un ou l’autre? Autre question : où est stocké le titulaire du marché dans ta base ? Je verrais bien la table MARCHE_TIERS avec un indicateur supplémentaire, par exemple un booléen :MARCHE_TIERS(#idMarche, #idTiers, EtreTitulaire) fsmrel t’expliquera mieux que moi l’intérêt de ces tables "intermédiaires" en relations -1-------1- avec les bons de commande. <--bonhomme Null
|
|
10
|
|
|
#11 | |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Citation:
Je n'ai pas mis de "hiérarchie" au sein des relations, c'est vrai. Et c'est encore une TRES bonne question !!! ![]() Nous progressons Demain, je creuse ceci avec quelques collègues comptable. |
|
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Bonsoir,
Le sage f-leb ayant posté entre temps (pendant que je regardais la télévision...), je ne tiens pas compte ici de ses remarques tout à fait pertinentes. Je ne réponds donc que d'un strict point de vue technique de modélisation. Citation:
Etant donné qu’un bon de commande a la possibilité de n'être associé à aucun marché, il peut être marqué NULL. Dans le contexte du Modèle Relationnel de Données (ou théorie relationnelle), NULL est banni, l’attribut Id_Marche ci-dessous est donc délinquant. NULL est dangereux du point de vue de l’algèbre relationnelle, c’est un inhibiteur des optimiseurs de SGBD, etc. Voyez par exemple les discussions : http://www.developpez.net/forums/d94...e/#post5380412 http://www.developpez.net/forums/d96...s/#post5420146 et j’en passe (f-leb, je vous interdis de pouffer en cachette Interdire que le bonhomme NULL se manifeste entraîne donc la mise en œuvre de la table BDC_MARCHE_TIERS. La mise en œuvre de la table BDC_TIERS est plutôt justifiée pour des raisons de symétrie, et son existence peut être contestée. Maintenant, si vous préférez suivre le modèle SQL qui se moque des problèmes pouvant être engendrés par NULL (qui dans votre cas il est vrai ont peu de chances de se présenter), le diagramme immédiatement ci-dessus pourrait vous convenir. Cf. le diagramme ci-dessus.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
|
10
|
|
|
#13 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
![]() Je vous remercie énormément pour vos éclairage ! ça m'a permis de "désckotcher" vis-à-vis de mon problème, et d'en réaliser la réelle complexité. Nous avons décidé de rendre la référence marché obligatoire pour toute commande. Chaque commande précédemment "sans marché" sera automatiquement associé à son propre marché, valable uniquement dans le cadre de cette commande. Par conséquent, je peux établir : ![]() Qu'en pensez-vous? |
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonjour à tous,
si un bon de commande est obligatoirement libellé à une entreprise et ceci dans le cadre d'un marché, tu peux raccorder T_BDC directement à TR_Marche_Tiers: ![]() Le but étant, par le jeu de l'intégrité référentielle, d'éviter de valider des bons de commande libellés à des entreprises qui ne font pas partie du marché. _____________________________________ pourquoi je ferais ça en cachette ?pfrrrrtt
|
|
10
|
|
|
#15 | |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Citation:
Pourquoi mon schéma permettait-il de valider des bons de commande libellés à des entreprises qui ne font pas partie du marché? Dans ton schéma, la table "TR_Marche_Tiers" possède une double clé primaire. La relation de 1 à n n'est pas possible entre "Id_Tiers" de "TR_Marche_Tiers" et Id_Tiers de "T_BDC" puisqu'il y a aura parfois répétition de "Id_Tiers" dans "TR_Marche_Tiers". Idem pour l'autre 1/2clé de "TR_Marche_Tiers" Non ? Merci d'avance |
|
|
|
00
|
|
|
#16 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Citation:
Citation:
Mais, toujours selon votre schéma la table TR_Marche_Tiers peut ne pas comporter la paire <m1, t1>. Je vous l’avais dit, f-leb est un sage et qui plus est, un sage pouffant (castigat ridendo minotum), que ce soit en se cachant derrière son écran ou en s’affichant sur le forum.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
||
|
|
00
|
|
|
#17 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
|
|
|
00
|
|
|
#18 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Citation:
Par exemple, parce que concernant la table BDC, par distraction l’utilisateur a utilisé un numéro de tiers t1 appartenant à la table des tiers, mais qui n’est pas le bon et donc tel que t1 ne soit pas associé dans la table TR_Marche_Tiers au marché m1 auquel le bon fait référence. En revanche, avec la solution f-leb Talon, l’utilisateur ne peut que renseigner la table BDC avec une paire <m1,t1> que si cette paire existe bien au préalable dans la table TR_Marche_Tiers, et le SGBD sera intransigeant sur ce point, intégrité référentielle oblige.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
|
10
|
|
|
#19 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
|
|
|
00
|
|
|
#20 |
|
Membre confirmé
![]() Administrateur de base de données Inscription : mars 2006 Messages : 285 ![]() |
Encore Merci à vous, et Merci à Developpez.com d'exister, je ne trouve pas les mots pour le dire, mais sans ce site, ce serait bien triste !
Bravo !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com