par
Ryle » 30 nov. 2006, 16:33
Dans la mesure ou tu as une relation n::n entre tes utilisateurs et les diplomes (un diplome peut être associé à 0 ou n utilisateurs, et un utilisateur peut avoir 0 ou n diplomes) le mieux est effectivement d'utiliser une table intermédiaire. (donc pas d'id_diplome à ajouter dans ta table utilisateur, et donc pas besoin de chercher un type

)
Dans la table que tu décris (ID - ID_utilisateurs - ID_diplomes - Numero) si l'on suppose qu'un utilisateur ne peut pas avoir deux fois le même diplome, tu peux virer le champ ID. Ta clé primaire est en effet une clé sur deux colonnes : "ID_utilisateurs, ID_diplomes".
Je ne sais pas par contre si le numéro a réellement une utilité ?
Dans tous les cas, pour connaitre la liste des diplomes d'un utilisateur, il te suffit d'interroger cette table avec l'id_utilisateur

(avec id_diplome si tu veux savoir qui possède un diplome spécifique)
Pour le reste, c'est tout bon
Alors effectivement, cela t'oblige à des requêtes un peu plus compliquée puisqu'il va te falloir faire des jointures pour aller chercher les données qui te manque dans les autres tables, mais tu conserves l'unicité des données (ce qui t'évite de devoir mettre à jour une infos à 3 endroit différent, juste pour ajouter une majuscule à un diplome

) et ça c'est une bonne chose. Elles sont par ailleurs bien rangées, et c'est beaucoup plus simple de s'y retrouver plus tard (pour toi ou quelqu'un d'autre

)
Pour le temps de réponse, en ajoutant des index sur tes tables sur les champs que tu utilises dans tes conditions, tu devrais compenser un peu le fait que les données soient réparties.
Dans la mesure ou tu as une relation n::n entre tes utilisateurs et les diplomes (un diplome peut être associé à 0 ou n utilisateurs, et un utilisateur peut avoir 0 ou n diplomes) le mieux est effectivement d'utiliser une table intermédiaire. (donc pas d'id_diplome à ajouter dans ta table utilisateur, et donc pas besoin de chercher un type ;))
Dans la table que tu décris (ID - ID_utilisateurs - ID_diplomes - Numero) si l'on suppose qu'un utilisateur ne peut pas avoir deux fois le même diplome, tu peux virer le champ ID. Ta clé primaire est en effet une clé sur deux colonnes : "ID_utilisateurs, ID_diplomes".
Je ne sais pas par contre si le numéro a réellement une utilité ?
Dans tous les cas, pour connaitre la liste des diplomes d'un utilisateur, il te suffit d'interroger cette table avec l'id_utilisateur :) (avec id_diplome si tu veux savoir qui possède un diplome spécifique)
Pour le reste, c'est tout bon :)
Alors effectivement, cela t'oblige à des requêtes un peu plus compliquée puisqu'il va te falloir faire des jointures pour aller chercher les données qui te manque dans les autres tables, mais tu conserves l'unicité des données (ce qui t'évite de devoir mettre à jour une infos à 3 endroit différent, juste pour ajouter une majuscule à un diplome :)) et ça c'est une bonne chose. Elles sont par ailleurs bien rangées, et c'est beaucoup plus simple de s'y retrouver plus tard (pour toi ou quelqu'un d'autre :))
Pour le temps de réponse, en ajoutant des index sur tes tables sur les champs que tu utilises dans tes conditions, tu devrais compenser un peu le fait que les données soient réparties.