|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 245 ![]() |
Bonjour,
Je souhaite comprendre l'utilité des tables de jointures (jonctions/ASSOCIATIONS/LIAISON) dans les bases de données. Quelqu'un pourra m'expliquer en détail l'interet de créer une telle table pour les relation n-n...avec si possible un exemple qui montre la différence entre l'utilisation d'une table de liaison entre deux tables et avoir deux tables avec un champs en commun sans table de liaison. |
|
|
00
|
|
|
#2 |
![]() ![]() |
Règle de gestion :
"Une personne peut travailler sur plusieurs projets et un projet peut faire travailler plusieurs personnes." MCD : Personne -0,n----Travailler----0,n- Projet Tables : Personne (prs_id, prs_nom...) Projet (prj_id, prj_nom...) Travailler (trv_id_personne, trv_id_projet) Si Paul travaille sur les projets 1 et 2 et que le projet 1 fais aussi travailler Jean et que le projet 2 fait aussi travailler Pierre, comment fais-tu pour implémenter ça sans la table associative Travailler ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 245 ![]() |
CinePhil, merci beaucoup de vouloir aider, je ne suis pas expert, en fait j'aimerai bien comprendre la logique derrière qui nous a poussé à penser à utiliser ces tables associatives.
sinon, pour répondre à ta question, j'imaginais que ça se fait simplement en faisant quelque chose du genre : Personne (prs_id, prs_nom,prj_id ...) Projet (prj_id, prj_nom, prs_id...) Peux tu me donner un exemple de select et son résultat qui montre la différence entre l'utilisation de table associative, et comment j'imaginais (sans table associative ) les choses...Peut etre en comparant les résultat je comprend mieux l'histoire des tables associatives. Encore une fois, merci beaucoup |
|
|
00
|
|
|
#4 | |||||||||||||||||||||||||||
![]() ![]() |
Citation:
Citation:
Commençons sans les clés étrangères... Personne (prs_id, prs_nom 1, Paul 2, Jean 3, Pierre Projet (prj_id, prj_nom 1, Apprendre Merise 2, Modéliser BDD Alimentons les clés étrangères... Citation:
Code :
Projet (prj_id, prj_nom, prs_id) 1, Apprendre Merise, 1 2, Modéliser BDD, 1 Jusque là, ça va ! Mais il faut aussi alimenter l'autre clé étrangère de la table des personnes ! Code :
J'enregistre le projet 1 ou le projet 2 Selon le bon principe des bases de données relationnelles et la première forme normale : 1 colonne d'1 ligne = 1 seule valeur Si je continue, ça va poser les mêmes problèmes ! Citation:
Code :
Code :
![]() Au mieux, sans la table associative et à condition de faire très attention, je peux mettre une personne dans la table projet et affecter le projet à une autre personne dans la table personne, soit au maximum deux personnes travaillant sur un projet. Avec la table associative, c'est illimité. Avec table associative... Citation:
Code :
Citation:
Code :
Citation:
Code :
Citation:
Sans table associative Code :
Avec table associative Code :
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||||||||||||||||||||||||
|
10
|
|
|
#5 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 245 ![]() |
Merci beaucoup CinePhil d'avoir pris le temps de m'expliquer tout ça, avec des exemples c'est toujours plus clair, mais si j'ai bien compris, j'aurais pu faire sans table associative quelque chose du genre répéter dans la table personne deux enregistrement pour dire que Jean travaille sur le projet 1 , et 2, et pareil dans la table projet dupliquer des enregistrements ... mais ça devient lourd je pense ..
En tout cas en principe j'ai compris, je te remercie beaucoup encore une fois |
|
|
00
|
|
|
#6 | |
![]() ![]() |
Citation:
La table des personnes ne doit contenir chaque personne qu'une seule fois et la table des projet ne doit contenir chaque projet qu'une seule fois. C'est le principe d'unicité des données. Et effectivement, ça alourdit les requêtes puisque pour retrouver la liste des personnes ou des projets sans doublons il faut utiliser SELECT DISTINCT qui est évidemment moins performant qu'un simple SELECT sans DISTINCT.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#7 | |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 245 ![]() |
Merci encore une fois, oui je vois, mais je disais ça rien que pour vérifier si j'ai bien compris ton exemple ou pas , et apparemment que oui
D'ailleurs as-tu un lien vers un cours ou tutoriel où on explique les règles à respecter comme celle que tu viens de me citer ? Citation:
|
|
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
Plus centré sur la modélisation des données, le tutoriel de SQLPro. Très pointu mais plus difficile d'accès, le long article de fsmrel sur la normalisation des bases de données. Peut-être plus abordable (je ne l'ai pas lu), le chapitre 3.2 du cours de Laurent Audibert sur la normalisation des bases de données relationnelles. Bonne lecture et bon courage !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
10
|
|
|
#9 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 245 ![]() |
Merci beaucoup CinePhil, je vais voir tout ça le week end.
bon week end et merci encore une fois |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com