Optimisation du stockage de variables

E_r_u
Invité n'ayant pas de compte PHPfrance

27 juil. 2007, 11:32

Bonjour,

je me permet de vous demander de l'aide, parce que là, ce problème dépasse mes maigres compétences...
  • je vous présente le "problème":
- Je dispose d'une table MySQL avec des 'objectifs' tous identifiés (champ 'id'), le nombre de ces objectifs est variable (possibilité pour un enseignant d'en ajouter, supprimer..).

- Pour chacun de ces 'objectifs', chaque etudiant qui les visualise va stocker entre 1 et 4 variables par objectif dans une autre table dédiée aux résultats, avec une entrée différente par étudiant.

Mon problème est comment stocker de facon simple ces résultats afin de les afficher rapidement par la suite?
  • Voici mes hypothèses :

1-
Stocker un objet du type :
StdObj ([ID objectif1] = Array (réponse1, réponse2, réponse3, réponse4),
[ID objectif2] = Array (réponse1, réponse2, réponse3, réponse4),...)
problemes :
Peut on stocker des objets dans un champ SQL?
Si oui est ce fiable?
Et surtout si le nombre d'objectifs atteint 100 (ce qui est probable) l'objet ne sera-t-il pas trop gros et donc ralentirait l'affichage? (sachant qu'il y aura plusieurs centaines d'étudiants!)

2-
Stocker une chaine de caractère, avec des marqueurs type:
###ID objectif1:Rep1-Rep2-Rep3-Rep4###ID objectif2...
puis utiliser une fonction explode(); pour créer un objet comme le précédent par la suite... Méthode qui me semble un peu limite car elle multiplie les manipulations et oblige a manipuler plusieurs fois l'ensemble des résultats en même temps.

3- Existe-t-il une autre solution plus simple et moins lourde?


Voila j'espère avoir été clair (mais ce n'est pas facile lol), merci d'avoir pris le temps de lire ceci :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 juil. 2007, 11:55

créer une table qui mémorise les réponses par objectif et étudiant.
La règle relationnelle est:
Un étudiant donne plusieurs réponses à un objectif
et Un objectif peut être concerné par plusieurs réponses de plusieurs étudiants.

Modèle relationnel résultant:
Table(Objectif) --- 0,N ---> Table (Reponse) <--- 0,N --- Table(Etudiant)

La table (Reponse) se voit alors affectée les clés primaires des tables (Objectif) et (Etudiant) en tant que clés étrangères.

L'affichage des réponses pour un étudiant ? et un objectif ? peut se faire par la requête:

Code : Tout sélectionner

SELECT * FROM Objectif o inner join (Reponse r inner join Etudiant e on r.id_etudiant=e.id) on o.id = r.id_objectif WHERE e.id = ? AND o.id = ? ORDER BY o.id, e.id
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

27 juil. 2007, 12:05

OK je vois a peu près,
je vais aller me renseigner dans la doc Mysql sur les clés par ce que la... c'est le néant lol :oops:

Cependant avec ce systeme, il faut ajouter une entrée par objectif, par étudiant dans cette table réponse? si j'ai bien compris (ce qui n'est pas certain...) Or s'il y a 500 étudiants et 100 objectifs par matière on arrive déja pour une seule matière à 50 000 entrées!!

Merci de ta réponse sadeq

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 juil. 2007, 12:18

Oui effectivement, ton calcul reflète la réalité et dans tous les cas cette réalité est incontournable, les bases de données sont faites pour stocker les informations d'une façon élémentaire pas aux guises des programmes.
C'est aux programmes (y compris les requête SQL) de s'adapter pour améliorer les performances.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

E_r_u
Invité n'ayant pas de compte PHPfrance

27 juil. 2007, 13:25

ok je te remerci beaucoup sadeq! je vais donc m'adapter!

En tant qu'invité je ne peux pas marquer ce sujet comme résolu mais il l'est pour moi!!
bonne journée a toi!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juil. 2007, 14:04

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer