methode conception de bdd

Invité
Invité n'ayant pas de compte PHPfrance

29 août 2009, 17:01

Bonjour à tous,
j'ai une table contenant une liste d'agences et une table contenant une liste d'agents appartenant chacun à une agence.
pour faire le lien entre les 2, la table agent contient champ 'idAgence'.

j'ai entendu quelque part que plutôt que de faire ça, il était mieux de créer une 3ème table de mapping qui contient les 'idAgence' et les 'idAgents' pour faire le lien.
Je souhaite savoir quel est l'intéret de cette méthode par rapport à l'application développée, sachant que ça complique souvent le code sql quand on manipule les données.

Merci pour vos réponses.

ViPHP
ViPHP | 5924 Messages

29 août 2009, 17:41

Est ce qu'un agent peut appartenir à plusieurs agences ?

Invité
Invité n'ayant pas de compte PHPfrance

29 août 2009, 18:52

ok, c très clair...merci. il y a d'autres raisons aussi bonnes que celle là?

Eléphant du PHP | 254 Messages

30 août 2009, 01:17

Lol c'est étrange on croirait déceler une trace d'ironie, alors qu'il n'y a pas de raisons. Si Sekil te pose cette question c'est pas innocent mais plutôt pour essayer de te répondre.

Si tu répond "oui" a sa question il te répondra que tu as effectivement besoin d'une troisième table, alors que si tu répond non, la conceptuel que tu as décris est correct. Et comme c'est pas un radin il t'aurais surement expliqué pourquoi, mais pour moi il se fait un peu tard. Bienvenu quand même :wink:

Invité
Invité n'ayant pas de compte PHPfrance

30 août 2009, 11:04

Lol c'est étrange on croirait déceler une trace de parano, alors qu'il n'y a pas de raisons.
je n'ai pas répondu "oui" parceque j'ai tout de suite capté où il voulait en venir et je ne me suis pas attardé dessus, pas besoin d'expliquer pourquoi. je suis donc directement passé à la question suivante.
rassure toi, pas de baleine sous gravier.

Invité
Invité n'ayant pas de compte PHPfrance

30 août 2009, 11:06

et j'ai même dit "merci" en ajoutant que la question qu'il m'a posé était en fait une explication très claire

ViPHP
ViPHP | 5924 Messages

30 août 2009, 12:11

je suis donc directement passé à la question suivante.
Il n'y a pas de question suivante, tu as ta réponse…

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 août 2009, 20:43

Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 sept. 2009, 18:36

Code : Tout sélectionner

Agents : id, nom Agences: id, nom

Pour expliquer un peu l'affaire, mettons que nous ayons des Agents nommés Anne, Bertrand et Charlotte. Et que nous ayons des agences TourEiffel, NotreDame et SacreCoeur.

Si dans l'agence TourEiffel on a Anne et Bertrand et David, on aura besoin de stocker ces infos.

Code : Tout sélectionner

Agents: 1 - Anne 2 - Bertrand 3 - Charlotte 4 - David 5 - Elmer Agences: 1 - TourEiffel 2 - NotreDame 3 - SacreCoeur
On pourrait donc avoir pour chaque agent une info additionnelle
car mettre un champ additionnel genre listeAgents dans la table Agences est une mauvaise idée : on ne connaîtra pas sa taille maxi. et mettre des colonnes additionnels (genre Agence : id, nom, agent1, agent2, agent3...) est difficile, sans connaître le nombre limite d'agents possibles

Code : Tout sélectionner

Agents: 1 - Anne, agence TourEiffel (1) 2 - Bertrand, agence TourEiffel (1) 3 - Charlotte, agence NotreDame (2) 4 - David, agence TourEiffel (1) 5 - Elmer, agence SacreCoeur (3)
MAIS si un agent peut appartenir à plusieurs agences ?
Par exemple, David travaille parfois dans l'agence SacreCoeur, et Anne dans l'agence NotreDame ?

Pour les mêmes raisons déjà expliqués 3 lignes plus haut, on ne peut pas modifier la table Agents en ajoutant un champ lesAgences ou en ajoutant des colonnes (agence1, agence2).
On passe alors par une table de relations, qui va permettre de lister toutes les possibilités.

Code : Tout sélectionner

Agents: 1 - Anne 2 - Bertrand 3 - Charlotte 4 - David 5 - Elmer Agences: 1 - TourEiffel 2 - NotreDame 3 - SacreCoeur AgentsDansAgences : 1 - Anne (1), , agence TourEiffel (1) 2 - Anne (1), agence NotreDame (2) 3 - Bertrand (2), agence TourEiffel (1) 4 - Charlotte (3), agence NotreDame (2) 5 - David (4), agence TourEiffel (1) 6 - Elmer, agence SacreCoeur (3) 7 - David(4), agence SacreCoeur (3)
Et on pourra ajouter des informations par la suite !
Note que dans la réalité, on utilise les ID, donc les chiffres que j'ai mis entre parenthèses.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
AB
ViPHP | 5818 Messages

03 sept. 2009, 02:35

on pourra ajouter des informations par la suite !
C'est ça l'intérêt de la méthode.

Sinon tu pourrais aussi ajouter une nouvelle ligne dans ta table "agent" pour un agent appartenant à plusieurs agences tel que dans la table AgentsDansAgences de l'exemple de mere-teresa. Mais il y a fort à parier que la table "agent" contienne des infos uniques pour chaque agent (date de naissance, nationalité, sexe etc...) et cela t'obligerait à dupliquer inutilement ces données.