PHP/Mysql : les contraintes d'une base relationnelle

Eléphanteau du PHP | 43 Messages

31 janv. 2006, 10:55

Bonjour,

je travaille actuellement à la conception d'un intranet pour ma boite, et ce sera de loin mon plus gros chantier php/mysql jusqu'ici : ça me pose des problèmes d'organisation et de méthodoloie.

Je me demandais si vous pourriez m'éclairer sur le point suivant :

Dans ma base, je gère (entre autres) des enseignants et leurs affectations dans des établissements. Il y a une table enseignants, une table établissements, une table disciplines et une table affectations, cette dernière contenant l'ID de l'enseignant, l'ID de son établissement d'affectation, l'ID de sa discipline + quelques autres infos.

Donc, si je veux afficher une liste des enseignants avec leur établissement d'affectation et la discipline qu'ils y enseignent, je dois faire un select sur la table affectations, puis :
- récupérer l'ID de l'enseignant pour aller lire son nom dans la table enseignants
- récupérer l'ID de l'établissement pour aller lire son nom dans la table établissements
- récupérer l'ID de la discipline pour aller lire son libellé dans la table disciplines.

Ma question est :
vaut-il mieux procéder comme ça, sachant que pour un enseignant on doit faire 4 SELECT, ou est-il plus économe de recopier carrément les noms de l'enseignant, de l'établissement et de la discipline dans la table affectations ?

Quelle est la priorité dans ce cas : le poids de la base de données + l'unicité de stockage des données, ou alors la simplicité du code + limitation des accès à la base ?

Merci d'avance pour vos conseils

Corinne

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

31 janv. 2006, 11:05

À moins d'avoir mal compris l'exposé de ton problème,
je pense que tout cela est faisable en une seule requête
en utilisant les jointures appropriées entre tes tables.

Tout dépend alors de la structure de tes tables.
Contiennent-elles les clés étrangères nécessaires à ces jointures ?

De manière générale, il est effectivement préférable de limiter
les allers-retours entre la page et la BD, tout en confiant à la BD
le maximum de traitements qu'elle effectuera souvent plus rapidement.

Eléphanteau du PHP | 43 Messages

31 janv. 2006, 11:13

Merci pour ces conseils.
je vais aller voir du côté des jointures, que je ne connais pas du tout !

Corinne.

ViPHP
ViPHP | 2144 Messages

31 janv. 2006, 14:09

Comme l'a dit Albat, les jointures régleront facilement le problême.
Juste pour dire que la base de donnée semble normalisée,(ce qui est très rare :D) donc n'y change rien, elle est très bien comme ça ;)