Bonjour,

Je suis actuellement à la phase d'étude pour un site internet réalisé en php / MySQL.

Mon besoin est le suivant :
Une table utilisateur (avec les infos de l'utilisateur )
Une table type de musique (avec id_type_music et nom_type_musique)
Une table intermédiaire reliant les deux tables (id_type_musique et id_utilisateur)

Ma question est la suivante :
Quel serait la solution la plus optimisée en terme de temps de réponse et aussi en terme de ressource serveur :

1 - laisser tel quel
2 - supprimer la table "type de musique", puis dans le code PHP avoir en "dur" la liste des type de musique avec leurs ID + nom et insérer l'ID dans la table intermediaire
3 - Solution intermédiaire : supprimer la table "type de musique", ajouter le champ "nom_type_musique" dans la table intermédiaire ce qui nécessite d'avoir des constantes dans le code php pour l'insertion et aucune conditions du type [...] if(id_type_musique=="jazz") then $type="jazz" [...] pour la lecture


Mes points interrogations :
La solution 1 me permet de pouvoir rajouter un style de musique rapidement (même si ça ne devrait pas beaucoup bouger) mais cela me fait une table en plus et cela m'oblige aussi à faire une requête avec une jointure du type :
select t.nom_type_musique
from type_musique t, intermediaire i
where i.id_type_musique=t.id_type_musique
and i.id_client=12504
Alors que si je supprime la table "type de musique" je n'aurais plus de jointure à faire et j'aurais une table en moins dans ma base. Par contre, php devra prendre la relève. En effet, après avoir reçu la liste des id_type_musique via une requête SQL, il faudra faire un [...] if(id_type_musique=="jazz") then $type="jazz" [...] (et ainsi de suite) ce qui peut prendre de la ressource serveur.
De plus, cette table ne serait pas la seule (exemple : type_film, type_livre...)

La solution 3 me semble la plus adaptée sachant que pour l'insertion je n'aurais qu'a récupérer le nom des type de musique via des constantes dans le code et que pour la lecture je n'aurais qu'a afficher le résultat de la requête suivante :
select i.nom_type_musique
from intermediaire i
where i.id_client=12504


Merci pour le retour que vous pourrez me faire à ce sujet