BD: Saisie d'utilisateur

Mammouth du PHP | 545 Messages

27 sept. 2007, 23:39

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
AB
ViPHP | 5818 Messages

28 sept. 2007, 00:02

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.

Mammouth du PHP | 545 Messages

28 sept. 2007, 09:17

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 :lol:


Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 09:24

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

Mammouth du PHP | 545 Messages

28 sept. 2007, 09:46

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 10:07

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

Mammouth du PHP | 545 Messages

28 sept. 2007, 10:26

En gros, je me tracasse pour pas grand chose :roll:

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

d0m
Mammouth du PHP | 1141 Messages

28 sept. 2007, 10:35

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à.

Mammouth du PHP | 545 Messages

28 sept. 2007, 10:38

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

28 sept. 2007, 10:52

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).

Mammouth du PHP | 545 Messages

28 sept. 2007, 10:59

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!