Questionnement sur une table de lien Mysql

Fermé
pinka - 7 août 2008 à 10:18
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 7 août 2008 à 15:24
Bonjour,

Je suis novice dans la conception de base de données et j'avoue me poser de grandes questions pour des choses basiques. J'ai crée le modèle relationnel pour ma base et je me pose des questions pour la paase d'insertion des données.

Exemple concret: J'ai une table "Organisme" avec diveres propritétés, sa clé est ID_Organisme, reliée à la table "communique" qui comporte uniquement ses clés l'ID_Organisme et Nom_Langue car cette table est elle-même reliée à la table "Langue" qui n'a pour unique propriété que sa clé qui est Nom_Langue. Ainsi la table communique fait le lien entre la table organisme et la table Langue.

Mon grand questionnement, certainement ridiculement basique, est quelles données dois-je entrer dans la table communique et Langue... La table Communique ne reprenant que les clés de la table Organisme et Langue, n'a-t-elle peut-être pas besoin d'une quelconque insertion. Et pour la table Langue, dois-je rentrer autant d'occurences que j'ai d'ID_Organisme? mais alors dans ce cas j'aurai plusieurs fois le même nom de langue qui se répète, or une clé ne peut se répéter...

Pardon pour ce long roman et merci à ceux qui me viendront en aide...
A voir également:

4 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
7 août 2008 à 10:48
Bonjour,

Mon grand questionnement, certainement ridiculement basique, est quelles données dois-je entrer dans la table communique et Langue... La table Communique ne reprenant que les clés de la table Organisme et Langue, n'a-t-elle peut-être pas besoin d'une quelconque insertion. Et pour la table Langue, dois-je rentrer autant d'occurences que j'ai d'ID_Organisme? mais alors dans ce cas j'aurai plusieurs fois le même nom de langue qui se répète, or une clé ne peut se répéter... ==>

1. Tu rentres dans la table Langue les langues dont tu as besoin (d'un point de vue applicatif)
2. Idem pour la table Organisme
3. Maintenant: si l'Organisme avec l'ID 1 est censé "travailler"/"utiliser" les langues avec les ID 4 et 5, tu rentres deux lignes dans la table de lien Communique, à savoir les couples (1,4) et (1,5).
4. Si l'organisme avec ID=2 n'a besoin d'aucune langue, tu ne rentres rien dans Communique.
5. Les tables Organisme et Langue: aucun lien entre les 2 (hormis, bien sûr, la table Communique). Du coup, "Et pour la table Langue, dois-je rentrer autant d'occurences que j'ai d'ID_Organisme?" ==> la réponse est non: tu rentres dans Langue toutes les langues qui sont utilisées par l'ensemble des organismes dans ton application, mais une seule entrée par langue donnée (le français apparaîtra une seule fois dans la table Langue).

++
0
Merci beaucoup pour cette réponse claire et détaillée. Autre question, petite cette fois-ci. Lorsque j'afficherai les organismes avec leur langues respectives, il y aura énormément de répétitions. Existe-t-il une requête qui puisse afficher l'organisme et les diverses langues qu'il utilise sans répéter à chaque fois l'organisme ou bien est-ce à réaliser sous php par la suite?

Merci encore pour cette grande aide,
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
7 août 2008 à 13:28
De rien, haureux d'avoir pu aider.

Pour répondre à ta question: "il y aura énormément de répétitions" <== oui, c'est vrai. Mais tu peux éviter l'affichage des répétitions. Exemple:

Un tableau du genre:
id_organisme nom_organisme fonction_organisme langue_organisme
1                 Nom1               Fonc1                   Français
1                 Nom1               Fonc1                   Allemand
2                 Nom2               Fonc2                   Français
2                 Nom2               Fonc2                   Allemand
2                 Nom2               Fonc2                   Anglais


pourra être affiché (après filtrage) comme:
id_organisme nom_organisme fonction_organisme langue_organisme
1                 Nom1               Fonc1                   Français
                                                                     Allemand
2                 Nom2               Fonc2                   Français
                                                                     Allemand
                                                                     Anglais


Ceci est une première solution qui ne résout pas le fait que ta requête SQL te ramène effectivement des champs inutiles dans ton contexte (et donc, du coup, elle sera moins performante par rapport à une requête sans champs inutiles).

Une autre approche serait de ne pas afficher les langues dans ta page: tu as une liste d'organismes sans plus (éventuellement avec d'autres champs de la table Organisme). Pour avoir le détail d'un organisme (par exemple les langues associées), on clique sur l'ID de l'organisme et tu affiches les langues. Cette approche, si possible applicativement, est meilleure car elle te permet d'éviter la jointure et les champs inutiles ramenés par la première approche.

++
0
Merci encore pour ces précisions.

Bonne après-midi,
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
7 août 2008 à 15:24
/replace "haureux" "heureux", dans mon message précédent :-)

Merci, toi aussi.
0