Page 1 sur 1
BD: Saisie d'utilisateur
Posté : 27 sept. 2007, 23:39
par Sebe
Bonjour,
J'ai un code qui permet à l'utilisateur de faire un test en course à pied (CAT Test). L'utilisateur pourra, s'il le veut, désigner un ou plusieurs coach(s) qui pourront avoir accès au(x) test(s) de l'utilisateur !
Je voulais savoir si je pouvais modéliser ma table ainsi
- id - id de l'enregistrement,
id_user - id de l'utilisateur ayant fait le test
coachs - liste de des différents coachs (séparé par une virgule)
En fait le code que j'ai me renvoie dans un formulaire les noms (des autres utilisateurs que l'on sélectionne) séparés par une virgule !
Est-ce que ma table ne posera pas de problème ? Cette façon de stocker ne va-t-elle pas poser de problème pour donner les droits ? ???
Merci
Posté : 28 sept. 2007, 00:02
par AB
Le problème va venir si tu souhaites ensuite faire une recherche en fonction des différents coatch.
Il te faudra faire une requête avec des like ou équivalent et ta requête sera très gourmande en ressources.
Dans ce cas tu ferais mieux de faire un explode() sur la virgule pour séparer les différents coach et les enregistrer dans une table séparée.
Posté : 28 sept. 2007, 09:17
par Sebe
Merci pour ta réponse
Je voulais savoir si je pouvais garder la même modélisation de la table à ceci prêt que temps que j'y suis, je récupère l'ID du coach ce qui devrait prendre moins de place ? Si oui, je pense que je vais ajouter un champ caché avec les id_caach !
Ensuite, tu me parles d'explode(). Je me demande si cela ne posera pas de problème lorsque l'utilisateur voudra faire une mise à jour ... est-ce que cela ne posera pas de problème si celui-ci a retiré un coach ? En gros, je pense que je vais bien prendre mon pied à bidouiller
Merci
Posté : 28 sept. 2007, 09:24
par d0m
comme te l'as dit AB, le mieux serait une table séparée.
Dans ta première table :
id - id de l'enregistrement,
id_user - id de l'utilisateur ayant fait le test (clé primaire)
Dans ta deuxième :
id_coatch - id_du coatch (clé primaire)
nom_coatch - nom du coatch
et une 3ème qui fait le lien :
id_user - id de l'utilisateur ayant fait le test
id_coatch - id_du coatch
(les 2 en clé primaire)
(ou si les coachs ne sont pas redondants, juste la table 1 et la 3ème avec le nom du coatch à la place de son identifiant.)
après pour retirer un coach, il te suffit d'enlever la ligne (id_utilisateur,id_coatch) de la 3ème table
Posté : 28 sept. 2007, 09:46
par Sebe
Salut,
En gros les 2 première existe déjà en une seul, ce sont les enregistrés à mon site. Est-ce suffisant ?
Pour la 3e, il n'y a pas d'id pour l'enregistrement ! Est-ce l'astuce pour la mise à jour ?
Merci
Posté : 28 sept. 2007, 10:07
par d0m
En gros les 2 première existe déjà en une seul, ce sont les enregistrés à mon site. Est-ce suffisant ?
bien sûr, une table de personne et une pour lier 2 personnes.
Pour la 3e, il n'y a pas d'id pour l'enregistrement ! Est-ce l'astuce pour la mise à jour ?
Ca ne change rien pour la mise à jour. Tu peux ajouter un index ou id d'enregistrement si tu veux pour d'autres raisons.
La mise à jour est simple :
- ajouter un coatch à un utilisateur : ajouter une ligne (id_utilisateur,id_coatch) à la table de lien.
- supprimer un coatch d'un utilisateur : supprimer la ligne ou l'utilisateur et le numéro de coatch sont spécifiés.
tout simplement
Posté : 28 sept. 2007, 10:26
par Sebe
En gros, je me tracasse pour pas grand chose
Voici ce que j'ai fait:
Code : Tout sélectionner
CREATE TABLE `jos_cat_coach` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT( 11 ) NOT NULL ,
`coach_id` INT( 11 ) NOT NULL
) TYPE = MYISAM ;
Est-ce correcte ?
Merci
Posté : 28 sept. 2007, 10:35
par d0m
Est-ce correcte ?
oui mais tu risques d'avoir dans 2 lignes le même utilisateur et le même coach. Il faudra alors juste faire attention à l'insertion que la ligne n'existe pas déjà.
Posté : 28 sept. 2007, 10:38
par Sebe
oui mais tu risques d'avoir dans 2 lignes le même utilisateur et le même coach. Il faudra alors juste faire attention à l'insertion que la ligne n'existe pas déjà.
Ok, je te remercie beaucoup pour le coup de main
Posté : 28 sept. 2007, 10:52
par Hubert Roksor
Pour la table de relation (jos_cat_coach) je conseille fortement de suivre l'exemple de d0m et ne pas utiliser de surrogate key, c'est à dire la colonne "id" de ton schéma. Utilise (user_id,coach_id) comme clé primaire et ça fonctionnera au moins aussi bien, la colonne "id" n'a pas de raison d'être si tu n'autorises pas de doublon (le même coach ajouté plusieurs fois).
Posté : 28 sept. 2007, 10:59
par Sebe
Pour la table de relation (jos_cat_coach) je conseille fortement de suivre l'exemple de d0m et ne pas utiliser de surrogate key, c'est à dire la colonne "id" de ton schéma. Utilise (user_id,coach_id) comme clé primaire et ça fonctionnera au moins aussi bien, la colonne "id" n'a pas de raison d'être si tu n'autorises pas de doublon (le même coach ajouté plusieurs fois).
C'est parce que je ne l'avais pas compris ainsi ... je rectifie !
Merci