IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Relations entre tables


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Relations entre tables
    Bonjour,

    Je suis débutant sur Access 2010 et j'essaye de "m'autoformer" avec les différents tutoriels et livres Access que l'on peut trouver sur la toile, mais pas facile car Access est tellement vaste que l'on ne sait pas trop par ou l'attaquer.
    Mon but est de créer une base de donnée pour gérer ma PME (une vingtaine de personnes) car après avoir passé de nombreux logiciels de gestion (et dépenser beaucoup d'argent) je n'ai jamais trouver le logiciel suffisamment souple et spécifique à notre activité (BTP).
    Pour créer cette base de donnée, j'ai crée la plupart de mes tables, essayer de faire les relations (mais là aussi c'est un peu compliqué et j'ai encore un peu de mal à comprendre toutes les ficelles) et j'en suis donc à la création de mes premiers formulaires . Je voudrai créer un formulaire de commande fournisseur, et je voudrai que lorsque l'on sélectionne le fournisseur par son nom apparaisse tous les champs le concernant (adresse, CP, ville, tèl...) . Malheureusement je n'y arrive pas et je ne sais pas si c'est parce que mes relations de table ne sont pas faite correctement ou si c'est le contenu de mon formulaire qui n'est pas correct.
    Est ce que quelqu'un pourrait m'aider car j'ai passé pas mal de temps à chercher mais en vain ...

    Merci d'avance
    PICASSO 06

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Explique ce que tu voudrais faire avec ta base (gérer ton entreprise, c'est trop vague !) et si tu es débutant, tu trouveras peut-être parmi les lecteur quelqu'un pour te mettre le pied à l'étrier.
    Une piste serait d'expliquer en quoi les logiciels ne t'ont pas donné satisfaction.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci d'avoir pris un peu de ton temps pour me répondre. Alors pour être plus précis, je voudrai pouvoir gérer, comme peux le faire un logiciel de gestion, des bons de commandes matériaux, des bons de réceptions, des devis, des factures, le suivi des heures salariés... Les logiciels de gestion que j'ai utilisés m'ont déçu car il sont souvent vérrouillés et il est difficile d'obtenir quelque chose de personnalisé : paramétrage des documents commerciaux, analyses précises sur points particuliers... en fait dès que tu veux personnaliser le logiciel tu es contraint de faire appel à ceux qui te l'on vendu et là, soit il ne sont pas disponible pour te répondre, soit ce n'est pas possible de faire ce que tu souhaites, soit c'est faisable mais ça coute très chère . Voilà pourquoi je voudrai pouvoir créer ma propre BDD sachant que la plupart de mes données sont pour l'instant stockées dans différents fichiers excel. J'ai déjà fait la plupart des tables nécessaires à mon programme (voir capture d'écran ci-jointe), mais je coince pour faire l'entête de mon premier formulaire de bon de commande car je voudrais que toutes les coordonnées du fournisseurs s'affiche dans le formulaire lorsque je le selectionne dans ma liste déroulante. Cela ne fonctionne pas mais je ne sais pas si c'est liés à mes relations de tables qui ne seraient pas faites correctement ou si c'est les propriétés des champs de mon formulaires qui ne sont pas correct...
    Merci de ton aide.

    Picasso
    Images attachées Images attachées  

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour Picasso06

    Je veux bien essayer de t’aider, mais ce que tu envisages est fort ambitieux et à mon avis peu compatible avec le temps libre que te laisse ton boulot principal (la peinture, j'imagine ! ).
    Vois par exemple cette discussion ou celle-ci, toujours en cours pour te donner une idée du temps que cela demande de part et d’autre.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut A chacun son métier
    Bonjour,

    D'accord avec mon collègue, c'est ambitieux ;: le sgbd ce n'est qu'une petite partie. Et faire cela en Access, je reste dubitatif. s'il y a quelques utilisateurs, oui sinon ...

    A chacun son métier, il faut bien qu'on mange aussi.

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  6. #6
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut remarques
    Bonjour,

    Si ton client est aussi un fournisseur ?
    il faut extraire les adresses

    Une personne peut être du type client et fournisseur ?
    Une personne peut avoir une adresse ou plusieurs ?

    En règle général on extrait la table

    personne -> N adresses (donc 2 tables) par exemple.

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour Claude, bonjour Olivier,

    Merci d'avoir pris du temps pour me répondre c'est super sympa.
    C'est vrai que mon projet est bien ambitieux et que mon temps libre se limite entre 4H30 et 6H du mat. donc pas facile, mais je suis de nature tenace... C'est pour cela que je recherche également un développeur dans ma région (Lyon et Grenoble) qui pourrait m'aider à mettre en place le gros du projet mais je tiens absolument à comprendre le principe car je veux par la suite pouvoir faire évoluer mon programme en autonomie.
    Malheureusement je n'ai pas de gros moyens financier car les temps sont durs, et je n'ai d'ailleurs aucune idée de ce que me prendrai un développeur pour initier ce genre de programme ... Olivier sait peut-être ?
    En attendant je vais continuer à farfouiller et analyser vos réponses et encore merci du temps que vous m'avez accordé.
    Pour info j'ai bien une Ets de peinture mais le gros de notre activité est la cloison Placo en milieu hospitalier ou salle de spectacle.

    Bonne journée.

    Picasso06

  8. #8
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Bonjour,
    Bonjour,

    Si tu es tenace alors on tient le bon bout, car il faudra l'être. faut savoir que pour des projets moyens on calcul sur 90 H/J, soit 120K€ environs.
    Un dev pas cher 460€/J, je ne parle pas d'un chef de projet. Bon ce sont des tarifs officiels, j'entends le mot escroc .... non travail.

    Pour ton pb, il faut d'abord prendre le temps de tout spécifier sur le papier.
    Si tu as une idée des IHM, des actions .... de ce que doit faire ton logiciel, écrit le. cela permet de proposer une expression des besoins sur un futur cahier des charges version 0. Et donc un chiffrage à la louche. En spécifiant les détails, avec un pro, tu auras le budget. C'est souvent difficile à estimer tant qu'on n'a pas les idées claires sur les fonctionnalités.

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  9. #9
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Merci pour ces infos, effectivement financièrement ça va être dur de faire appel un pro du moins pour le moment et pour la réalisation complète de mon projet.

    Je vais donc tenter d'avancer pas à pas en ciblant mieux mes priorités. Mon premier objectif est de créer un formulaire de bon de commande (actuellement nous faisons ça avec excel) mais le soucis c'est que toutes les fonctions ne sont pas automatisés donc nous fonctionnons beaucoup avec des copier coller et surtout nous sommes obligé de ressaisir dans un journal des commandes les infos principales des bons de commandes (date, fournisseurs, chantier, montant HT) afin de pouvoir faire nos analyses croisés (encours par fournisseurs, encours par chantiers). Ce qui est assez lourd et redondant.
    Je vais donc d'abord me concentrer sur la création de ce formulaire de commande et une fois que j'aurai compris le mécanisme, je pourrai avancer sur les autres modules (devis, facturation) car le fonctionnement est sensiblement identique. Il ne me restera ensuite ''plus qu'à'' gérer la partie salarié qui là aussi sera un gros morceaux, mais chaque chose en son temps ...
    Ci-joint la capture d'écran du corps du formulaire souhaité (whaou le rêve !!! le jour ou cela fonctionne je gagne une heure de travail par jour !!!). Les tables sont déjà faites il faut maintenant (je pense !) retravailler les relations entre table et créer le formulaire, et là j'avoue que je suis bien perdu !! Merci de votre aide .
    Picasso
    Images attachées Images attachées  

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour, Picasso,

    C'est déjà beaucoup plus concret !

    Pour pouvoir choisir, l’article selon son code ou selon sa dénomination, vois ce tutoriel de Pierre Fauconnier : Sélection d'une donnée par l'une ou l'autre de ses propriétés.

    Je suppose que tu souhaites un formulaire à deux étages : au-dessus, les données de ton client ; en dessous le détail de son bon de commande.
    Si c’est le cas, vois ce tutoriel Comment classer les données dans des tables liées et construire un formulaire père/fils.

    Ensuite, reviens faire signe si tu as besoin d'un coup de main.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour Claude

    Oui je te confirmes que c'est bien un formulaire à 2 étages que je souhaites. Je m'y mets dès demain matin et je te tiens au courant de mon avancement.

    Merci à toi

  12. #12
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut MCD
    Bonjour,

    Ton problème est un cas d'école pour informaticien, Tu peux te baser sur ce schéma dont j'ai fais une copie d'écran.

    C'est un MCD, que tu dois convertir en MPD. A toi de chercher un peu les significations, il existe des logiciels pour faire une maquette, cherche aussi le mot dictionnaire de données . J'en dis pas plus ...

    Olivier
    Images attachées Images attachées  
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  13. #13
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour Olivier,

    MCD ??? tu rigoles je connais ça par coeur !! Pour un Modèle conceptuel de données, j'avais commencé à en créer un, mais j'avais plutot vu des choses sous cette forme là (voir fichier joint) Ensuite je trouvais que c'était un peu long et fastidieux et surtout je n'y voyais pas forcément un caractère indispensable car lorsque je créais mes tables j'étais souvent amené à y apporter des modifications ou des ajustements alors pourquoi ne pas le faire directement lorsque je créais mes tables ? Est ce que tu peux me dire si ce que j'avais commencé à faire est correct ? et si tu penses qu'il est vraiment indispensable de passer par cette étape ?

    Par contre MPD ??? Jamais entendu parler, je vais chercher ...

    Merci et bonne journée

    Picasso:
    Fichiers attachés Fichiers attachés

  14. #14
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour Picasso,


    Vu de la méthode Merise, le MCD fait l’objet d’une traduction en MLD (Modèle Logique de Données), lequel est indépendant du SGBD qu’on utilisera. Le MCD est conçu par les gens qui sont sur la dunette, c'est-à-dire les concepteurs. Le MLD est mis à la disposition des gens qui s’agitent sur le pont.
    Le MPD (Modèle Physique de Données) consiste en l’enrichissement du MLD par les spécialistes du SGBD, avec les éléments « physiques » permettant le stockage (table spaces, file groups, fichiers, ....), la performance des accès (index), etc., toutes choses connues seulement des spécialistes qui s’agitent dans la soute (les DBA) et cachées pour le commun des mortels qui du reste n’en a cure. En pratique, l’étape MLD est souvent court-circuitée, du fait d’un passage direct du MCD au MPD.

    Bien que sa vision du MPD soit bonne pour le pilon, pour le reste je vous renvoie à l’ouvrage de Michel Diviné Parlez-vous Merise ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Modifications groupés dans une table
    Whaouh !!! Bien compliqué pour moi tout ça ...

    Question un peu plus simple :

    Est-il possible de faire une modification groupé dans une table, cad : après avoir créer ma table article je me suis aperçu que j'aurai l'utilité de rajouter un champ "famille". J'ai donc rajouté ce champ en mode création avec une liste déroulante liée à la table famille. Maintenant je voudrai mettre à jour toute les données de ce champ supplémentaire dans ma table article en mode feuille de données sans avoir à rentrer dans chaque cellule puisque de nombreux article ont la même famille. Existe t-il une fonction comme sur excel ou il suffit de se mettre en bas à gauche de la cellule et de tirer vers le bas ?

    Merci d'avance
    Picasso06

  16. #16
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Acces
    Bonjour,

    Je ne rentrerais pas dans des concepts compliqués.

    Pour faire simple, j'ai lu ton fichier Excel, tu résonnes en interface graphique, il existe la notion de clef étrangère dans ton cas. Ce lien existe par exemple, entre famille Article et Article.
    Pour mettre un article dans une famille, il faut que cette famille existe. Dans la table Article, il existera donc un champ IDFamilleArticle, qui pointera sur la table FamilleArticle. On résonne sur deux tables. on oubli la notion de sous famille.

    Pour les mises à jour, d'un article, il faudra donc récupérer l'ID de la famille article.
    Insert into Article (ID, ...., ID_FamilleArticle) values (1,..., 10);
    C'est le cas simple ...

    Mais tu as une table de sousFamilleArticle.

    On peut dire qu'une famille sous article concerne O..N articles ?
    Qu'un article est dans une et une seule famille sous article ?

    qu'une famille d'article concerne 0..N sous famille ?
    qu'une sous famille correspond à une famille ?

    La Table sous Famille article correspond donc à une table intermédiaire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Table SousFamilleArticle
    ID_SousFamilleArticle
    ID_FamilleArticle
    DénominationSousFamille
     
    Table Article
    ID
    ....
    ID_SousFamilleArticle -> clef étrangère pointant sur la table SousFamilleArticle
    Par contre sur la partie Access .. ?? connais pas

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  17. #17
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir à tous,


    Citation Envoyé par Picasso06 Voir le message
    Existe t-il une fonction comme sur Excel ou il suffit de se mettre en bas à gauche de la cellule et de tirer vers le bas ?
    Connaissant à peu près SQL, je connais automatiquement la partie SQL correspondante d’ACCESS . Maintenant, quant à manipuler les données comme avec Excel, à « tirer ver le bas », ça n’est pas très relationnel, et je n’en ai donc aucune idée . Cela dit, vous pouvez toujours faire la manip sous Excel et importer le résultat sous la forme d’une table ACCESS.

    Quoi qu’il en soit, une chose est sûre, la bonne santé des projets repose sur la qualité de la modélisation, aussi regardons ce qu’il en est. Tout d’abord, le diagramme que vous avez proposé n’est pas un MCD mais un MLD. Dans l’absolu, un MCD n’est pas nécessaire et l’on peut modéliser directement au niveau MLD, mais au plan de la sémantique, la supériorité du MCD (ou de son cousin, le diagramme de classes) fait qu’il est bon d’en réaliser un.

    Peut-être connaissez-vous tout cela, mais allons-y quand même pour un peu de pédagogie, une piqure de rappel ne fait jamais de mal. Produisons donc un MCD, représentation abstraite de l’univers du discours (terme savant pour faire le lien entre l’abstraction et le concret, à savoir Deco Services).

    Grâce au MCD vous mettez en évidence les entités-types (types d’entités) de l’univers du discours : le fournisseur-type, le contact-type, l’article-type, etc., l’entité-type est donc un modèle pour les entités concrètes. Le fournisseur-type qu’on peut nommer par exemple FOURNISSEUR est un modèle pour ces entités que sont les fournisseurs, à savoir « Volfoni Frères », « Entreprise Naudin », etc. Il est important ne noter qu’on s’intéresse ici au Quoi (le fournisseur) mais pas au Comment.
    Une fois mises en évidence les entités-types, il est nécessaire de mettre en évidence les liens qu’elles entretiennent et ceci fait partie des règles de gestion des données. Par exemple (à vous de modifier les règles qui ne vous paraissent pas les bonnes) :
    R01 — Un fournisseur fournit au moins un article.
    R02 — Un article peut être fourni par plusieurs fournisseurs.
    R03 — Un famille est composée d’au moins une sous-famille.
    R04 — Une sous-famille appartient exactement à une famille.
    R05 — Un article fait référence exactement à (c'est-à-dire au moins une et au plus une) famille.
    R06 — Un article fait référence exactement à une sous-famille.
    Etc.
    A chaque fois, on précise pour chaque lien (qu’on appelle plus exactement association ou relation) le nombre minimum et maximum d’éléments (cardinalités) impliqués dans cette affaire :
    Quand on écrit qu’un fournisseur fournit au moins un article, il s’agit d’un énoncé informel pour « un fournisseur fournit de 1 (minimum) à N (maximum) articles ».
    Quand on écrit qu’un article peut être fourni par plusieurs fournisseurs, il s’agit d’un énoncé informel pour « un article est fourni par 0 (minimum) à N (maximum) fournisseurs ».

    A signaler que certaines règles peuvent être inférées d’autres règles : des règles R04, et R06 on infère la règle R05, à la façon d’un syllogisme :
    Un article fait référence exactement à une sous-famille ;
    Une sous-famille fait référence exactement à une famille ;
    Donc un article fait référence exactement à une famille.
    Tout cela donne lieu à la modélisation suivante, où les associations sont symbolisées par des ovales et les pattes qui les connectent aux entités-types sont porteuses des cardinalités :



    Il n'y a pas d'association entre ARTICLE et FAMILLE puisqu'inférable (en établir une engendrerait une redondance, donc une source d'erreurs).

    Maintenant, si les règles de gestion que j’ai supposées ne sont pas les bonnes, on peut recommencer avec celles qui conviennent. Quoi qu’il en soit, on peut maintenant faire figurer les attributs (propriétés) des entités-types :




    Notez que les attributs identifiants sont mis en évidence (soulignement de leur nom).
    Vous me direz que certains attributs sont absents : titre de civilité, unité de l’article, dimension/conditionnement minimum. En effet, on a intérêt à en faire des entités-types, on évitera ainsi des synonymes du genre « bidon de 5 L », « bidons de cinq litres », on gagnera donc en uniformité, en rigueur. Ce sont les associations qui permettent de ne pas perdre la trace de ces attributs : pas d’inquiétude, grâce à elles ont sait que les fournisseurs ont un titre de civilité, que les articles ont une unité et une dimension/conditionnement minimum.

    Vous observerez que l’identifiant d’ARTICLE n’est pas {ArticleReference} : en effet, l’expérience montre qu’il faut respecter le principe de Tabourier et qu’il est prudent d’utiliser un attribut artificiel, dépourvu de sémantique, en l’occurrence ArticleId. La contrainte d’unicité vaut toujours pour ArticleReference qui fait donc l’objet d’un identifiant alternatif (cf. le mickey « <ai> » dans le MCD). Le principe de Tabourier vaut évidemment pour les autres entités-types, même si je me suis limité ici à l’appliquer à ARTICLE.


    Le MCD s’enrichit petit à petit :



    Du MCD on passe par transformation (quasi ) automatique au MLD. il n’y a plus d’entités-types mais des tables. En utilisant la notation d'ACCESS :



    Cette fois-ci le titre de civilité (attribut CiviliteLibelle) est associé à la table FOURNISSEUR via l’attribut CiviliteId présent dans les deux tables CIVILITE et FOURNISSEUR. Tout AGL orienté modélisation et digne de ce nom sait effectuer le passage d’un modèle à l’autre (en l’occurrence j’ai utilisé PowerAMC, puis une fois le travail terminé, j’en ai récupéré le résultat SQL pour effectuer une rétro-conception avec MySQL Workbench, gratuit, pour obtenir un diagramme à la ACCESS).

    Passons aux commandes. Je me démarque de votre diagramme ACCESS, car pour le moment une commande est composée de lignes de commandes qui associent la commande et des articles (Question : sous forme de règles de gestion, quel est le rôle des chantiers dans cette affaire ?)

    Une commande (attributs à compléter) est passée à exactement un fournisseur et porte sur au moins un article. La partie correspondante du MCD est la suivante :



    La quantité commandée par article fait l’objet d’un attribut de l’association CDE_ART (synonyme de ligne de commande).

    MLD




    On peut maintenant demander à l’AGL (MySQL Workbench) de produire de façon automatique le script de création des tables, dans lequel on supprime les scories qui ne concernent pas directement ACCESS. Il reste :

    TABLE CIVILITE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE CIVILITE 
    (
       CiviliteId           Int                  Not null,
       CiviliteLibelle      Varchar(64)          Not null,
       CONSTRAINT CIVILITE_PK PRIMARY KEY (CiviliteId)
    ) ;

    TABLE DIM_COND_MIN
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE DIM_COND_MIN 
    (
       DimCondMinId         Int                  Not null,
       DimCondMinLibelle    Varchar(64)          Not null,
       CONSTRAINT DIM_COND_MIN_PK PRIMARY KEY (DimCondMinId)
    ) ;

    TABLE FAMILLE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE FAMILLE 
    (
       FamilleId            Int                  Not null,
       FamilleLibelle       Varchar(64)          Not null,
       CONSTRAINT FAMILLE_PK PRIMARY KEY (FamilleId)
    ) ;

    TABLE FOURNISSEUR
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE TABLE FOURNISSEUR 
    (
       FournisseurId        Int                  Not null,
       CiviliteId           Int                  Not null,
       RaisonSociale        Varchar(64)          Not null,
       AdresseLigne1        Varchar(64)          Not null,
       AdresseLigne2        Varchar(64)          Not null,
       CodePostal           Char(5)              Not null,
       Ville                Varchar(64)          Not null,
       Telephone            Char(10)             Not null,
       Fax                  Char(10)             Not null,
       AdresseCourriel      Varchar(64)          Not null,
       CONSTRAINT FOURNISSEUR_PK PRIMARY KEY (FournisseurId),
       CONSTRAINT FOURNISSEUR_CIVILITE_FK FOREIGN KEY (CiviliteId)
          REFERENCES CIVILITE (CiviliteId)
    ) ;

    TABLE FAMILLE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE FAMILLE 
    (
       FamilleId            Int                  Not null,
       FamilleLibelle       Varchar(64)          Not null,
       CONSTRAINT FAMILLE_PK PRIMARY KEY (FamilleId)
    ) ;

    TABLE SOUS_FAMILLE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE SOUS_FAMILLE 
    (
       SousFamilleId        Int                  Not null,
       FamilleId            Int                  Not null,
       SousFamilleLibelle   Varchar(64)          Not null,
       CONSTRAINT SOUS_FAMILLE_PK PRIMARY KEY (SousFamilleId),
       CONSTRAINT SOUS_FAMILLE_FAMILLE_FK FOREIGN KEY (FamilleId)
          REFERENCES FAMILLE (FamilleId)
    ) ;

    TABLE UNITE_ARTICLE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE UNITE_ARTICLE 
    (
       UniteArtId           Int                  Not null,
       UniteArtLibelle      Varchar(64)          Not null,
       CONSTRAINT UNITE_ARTICLE_PK PRIMARY KEY (UniteArtId)
    ) ;

    TABLE CONTACT
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE CONTACT 
    (
       ContactId            Int                  Not null,
       FournisseurId        Int                  Not null,
       ContactNom           Varchar(64)          Not null,
       ContactPrenom        Varchar(64)          Not null,
       AdresseCourriel      Varchar(64)          Not null,
       Portable             Char(10)             Not null,
       CONSTRAINT CONTACT_PK PRIMARY KEY (ContactId),
       CONSTRAINT CONTACT_FOURNISSEUR_1 FOREIGN KEY (FournisseurId)
          REFERENCES FOURNISSEUR (FournisseurId)
    ) ;

    TABLE ARTICLE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE TABLE ARTICLE 
    (
       ArticleId            Int                  Not null,
       ArticleReference     Int                  Not null,
       Designation          Varchar(64)          Not null,
       DimCondMinId         Int                  Not null,
       SousFamilleId        Int                  Not null,
       UniteArtId           Int                  Not null,
       PrixAchatUnitaire    Decimal(10,2)        Not null,
       Unite                Char(8)              Not null,
       CoefMult             Decimal(5,2)         Not null,
       PrixAchatCondMini    Decimal(10,2)        Not null,
       Commentaires         Varchar(200)         Not null,
       CONSTRAINT ARTICLE_PK PRIMARY KEY (ArticleId),
       CONSTRAINT ARTICLE_AK UNIQUE (ArticleReference),
       CONSTRAINT ARTICLE_DIM_COND_MIN_FK FOREIGN KEY (DimCondMinId)
          REFERENCES DIM_COND_MIN (DimCondMinId),
       CONSTRAINT ARTICLE_UNITE_ARTICLE_FK FOREIGN KEY (UniteArtId)
          REFERENCES UNITE_ARTICLE (UniteArtId),
       CONSTRAINT ARTICLE_SOUS_FAMILLE_FK FOREIGN KEY (SousFamilleId)
          REFERENCES SOUS_FAMILLE (SousFamilleId)
    ) ;

    TABLE ART_FOUR
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE ART_FOUR 
    (
       FournisseurId        Int                  Not null,
       ArticleId            Int                  Not null,
       CONSTRAINT ART_FOUR_PK PRIMARY KEY (FournisseurId, ArticleId),
       CONSTRAINT ART_FOUR_FOURNISSEUR_FK FOREIGN KEY (FournisseurId)
          REFERENCES FOURNISSEUR (FournisseurId),
       CONSTRAINT ART_FOUR_ARTICLE_FK FOREIGN KEY (ArticleId)
          REFERENCES ARTICLE (ArticleId)
    ) ;

    TABLE COMMANDE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE COMMANDE 
    (
       CdeId                Int                  Not null,
       FournisseurId        Int                  Not null,
       CdeDate              Datetime             Not null,
       CONSTRAINT COMMANDE_PK PRIMARY KEY (CdeId),
       CONSTRAINT COMMANDE_FOURNISSEUR_1 FOREIGN KEY (FournisseurId)
          REFERENCES FOURNISSEUR (FournisseurId)
    ) ;

    TABLE CDE_ART
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE CDE_ART 
    (
       CdeId                Int                  Not null,
       ArticleId            Int                  Not null,
       Quantite             Int                  Not null,
       CONSTRAINT CDE_ART_PK PRIMARY KEY (CdeId, ArticleId),
       CONSTRAINT CDE_ART_COMMANDE_FK FOREIGN KEY (CdeId)
          REFERENCES COMMANDE (CdeId),
       CONSTRAINT CDE_ART_ARTICLE_FK FOREIGN KEY (ArticleId)
          REFERENCES ARTICLE (ArticleId)
    ) ;

    Passons à ACCESS. Les commandes CREATE TABLE sont exécutables (dans l’ordre ci-dessus) quand on les a logées dans des requêtes as-hoc :



    La suite au prochain numéro.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  18. #18
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Reprise du travail interrompu.

    Insérons quelques lignes dans des tables choisies parmi celles qui viennent d’être créées :

    Table DIM_COND_MIN




    Table UNITE_ARTICLE




    Table ARTICLE




    Table CDE_ART




    Considérons maintenant votre exemple :




    La colonne Réf Art est l’image de la colonne ArticleReference de la table ARTICLE. La colonne Qté est l’image de la colonne Quantite de la table CDE_ART. La colonne UC est l’image de la colonne DimCondMinLibelle de la table DIM_COND_MIN. La colonne Désignation est l’image de la colonne Designation de la table ARTICLE. La colonne Qté F est l’image du produit de la colonne Quantite de la table CDE_ART et de la colonne CoefMult de la table ARTICLE. La colonne UF est l’image de la colonne UniteArtLibelle de la table UNITE_ARTICLE. La colonne PU HT est l’image de la colonne PrixAchatUnitaire de la table ARTICLE. La colonne Montant HT est l’image du produit de la colonne Quantite de la table CDE_ART, de la colonne CoefMult de la table ARTICLE et de la colonne PrixAchatUnitaire de la table ARTICLE.

    Votre résultat peut être obtenu par exemple au moyen d’une 1re requête (LigneCommande) pour produire les lignes de commande, puis d’une 2e requête (Commande_Total_HT) pour produire la ligne Total HT, puis d’une 3e requête (Commande_Total_TTC(19,6)) pour produire le total TVA ainsi que le montant TTC :





    Requête LigneCommande (lignes de commande de la commande 1 (CdeId = 1) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT y.CdeId, x.ArticleReference AS [Réf Art], y.Quantite AS Qté, z.DimCondMinLibelle AS UC,
           x.Designation, ROUND((Quantite * CoefMult),2) AS [Qté F], t.UniteArtLibelle AS UF,
           x.PrixAchatUnitaire AS [PU HT], ROUND((Quantite * CoefMult * PrixAchatUnitaire),2) AS Montant_HT
    FROM   ARTICLE AS x, CDE_ART AS y, DIM_COND_MIN AS z, UNITE_ARTICLE AS t
    WHERE  x.ArticleId = y.ArticleId 
      AND  x.UniteArtId = t.UniteArtId 
      AND  x.DimCondMinId = z.DimCondMinId 
      AND  y.CdeId = 1
    ;

    Au résultat :




    Requête Commande_Total_HT (on manipule la requête LigneCommande comme s’il s’agissait d’une table) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CdeId, ROUND(SUM(Montant_HT),2) AS Total_HT
    FROM   LigneCommande
    WHERE  CdeId=1
    GROUP BY CdeId
    ;

    Au résultat :




    Requête Commande_Total_TTC(19,6) (on manipule la requête Commande_Total_HT comme s’il s’agissait d’une table) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CdeId, ROUND((Total_HT*0.196),2) AS TVA, ROUND((Total_HT + Total_HT * 0.196),2) AS Total_TTC
    FROM   Commande_Total_HT
    WHERE  CdeId=1
    ;

    Au résultat :




    Avec SQL, on sait donc fabriquer une commande. Reste sa mise en forme, mais pour cela il faut rentrer dans le monde des formulaires et toutes ces choses qui ne font pas partie de la modélisation ou du Modèle Relationnel de Données et donc que je ne connais pas plus que nathieb...

    En tout cas, si vous avez besoin d’aide pour la suite de la modélisation (chantiers, salariés, etc.) n’hésitez pas à poser vos questions.

    Bon courage.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  19. #19
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut réponse
    Bonjour,

    Alors là chapeau bas, je voulais l'emmener à réfléchir ...
    Mais vous êtes trop fort
    Rappelez vous qu'il veut pas nous payer, je taquine.

    respect, et merci pour lui.

    Y'a plus qu'a

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  20. #20
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    J'entends bien Olivier, mais quand les temps sont durs nous pouvons donner un coup de main pour les parties que nous connaissons à peu près et qui se jouent plutôt dans la soute, surtout quand ce sont les fondements qui sont en jeu...
    En tout cas merci pour le commentaire.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Access me change mes relations entre tables
    Par karimspace dans le forum Access
    Réponses: 14
    Dernier message: 29/03/2006, 09h57
  2. Relation entre tables dans bdd différentes
    Par Mandotnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/03/2006, 08h03
  3. Les relations entre tables
    Par sheira dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 20/03/2006, 15h03
  4. Récupération des relations entre tables
    Par Themacleod1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 11h34
  5. relations entre tables
    Par ilyassou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/11/2005, 07h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo