A table!!!

A table!!! - SQL/NoSQL - Programmation

Marsh Posté le 03-02-2009 à 14:54:25    

Bonjour à tous, je suis débutant dans les bases de données & le langage SQL.
Je réalise actuellement un schéma conceptuel, avec des tables permettant de simuler au mieux les besoins d'une entreprise.  
Il s'agit d'un sondage destiné aux collaborateurs  ( 3-4 par ans) afin d'avoir des informations sur leur taux de satisfaction dans l'agence, (relais RH, ancienneté, satisfaction). Mes tables sont donc les suivantes:  5 tables, à savoir la table PERSONNE, QUESTION,SECTEUR,QUESTIONNAIRE et REPONSE. Mon problème se situe au niveau de la réponse. Je m'expliques: les questions admettent comme réponse soit "oui/non" , soit une durée (l'ancienneté par exemple), soit un coefficient(par exemple , mécontent : -1, neutre: 0 et satisfait : 1). Mais d'une question à l'autre , pour chaque coefficient correspond une chose différente( je n'aurais pas à chaque réponse le champ "mécontent" pour le coefficient -1" ) . Vous me suivez?
Ma question est donc comment faire au niveau de mes tables pour inclure ces réponses qui varient selon chaque question?!
 
Merci de votre rèponse, si vous avez besoin d'informations complémentaire j'y répondrais au mieux :)

Reply

Marsh Posté le 03-02-2009 à 14:54:25   

Reply

Marsh Posté le 03-02-2009 à 15:02:23    

Bonjour,
 
Un petit conseil: essaye d'aérer un peu ton texte on lira mieux ;)
 
Si je comprends bien tu veux créer 5 tables:
 

  • Personne
  • Question
  • Secteur
  • Questionnaire
  • Reponse

Jusque la ca va ;) Ca serait bien si tu pouvais mettre les champs de chaque table  :)  
 
Ta question c'est quoi? Tu veux savoir comment transformer un "-1" en mécontent avant l'enregistrement?  
Ou tu veux savoir comment lier question et réponse?
 

Reply

Marsh Posté le 03-02-2009 à 15:16:18    

PERSONNE  (  id_personne,relaisRH_personne)
SECTEUR(libelle_secteur,id_secteur)
QUESTION(libelle_question,id_question,cond_question)
REPONSE(coeff_reponse,HeureEnvoi_reponse)
QUESTIONNAIRE(id_quest,libelle_quest)
 
Transformer un "-1" en mécontent pas de souci, mais le probleme est que ce n'est pas forcèment mécontent, cela peut être " moins de 2 par semaine" , tu vois ce que je veux dire.
Donc j'ignore comment procéder pour joindre le coefficient a la réponse, qui peut être "mécontent" ou "moins de deux par semaine".
 
PS: je travaille en UML pour le moment, je n'ai donc pas créer les tables de liaisons
 
PS2: merci de ta réponse


Message édité par lakthar le 03-02-2009 à 15:16:49
Reply

Marsh Posté le 03-02-2009 à 15:19:37    

Selon la question (donc l'id_question) et la réponse (coeff_reponse) tu veux afficher des trucs différents?
 
Genre question 1 coef= -1 => toto
Question 2 coef= -2 => TATA
 
C'est ca?
 
Si c'est le cas, je vois bien une table de correspondance.

Reply

Marsh Posté le 03-02-2009 à 15:23:48    

Oui aspirateur, c'est exactement ce que je veux faire:)
Tu penses a une simple table qui pointe vers coeff, avec un attribut (champ ) pour la réponse du coeff  -1, un champ pour la réponse du coeff 0 et  un champ pour la reponse du coeff 1 ?


Message édité par lakthar le 03-02-2009 à 15:24:51
Reply

Marsh Posté le 03-02-2009 à 15:28:43    

Non, je ferai comme ca à ta place:

 

Prenons les 2 tables concernées
QUESTION(id_question,libelle_question,cond_question)
REPONSE(id_reponse,coeff_reponse,HeureEnvoi_reponse)

 

Je ferai une troisieme

 

Correspondance(id,id_question, coeff_rep, reponse_clair)

 

Maintenant je dis pas que c'est la meilleure solution. Pourquoi ne pas vouloir stocker la réponse complète dans ta table?


Message édité par aspirateur le 03-02-2009 à 15:29:09
Reply

Marsh Posté le 03-02-2009 à 15:32:06    

Citation :


Correspondance(id,id_question, coeff_rep, reponse_clair)


le premier champ correspond a "id_reponse"?    
 

Citation :


Maintenant je dis pas que c'est la meilleure solution. Pourquoi ne pas vouloir stocker la réponse complète dans ta table?


C'est ce que je voulais faire mais un collègue plus expérimenté m'a dit qu'on voulait simplement récuperer la réponse de l'individu et non pas toute la reponse...

Reply

Marsh Posté le 03-02-2009 à 15:42:01    

Ok, prenons un peu plus de temps:
 
Voici tes 5 tables. Chaque table doit avoir une clef primaire donc une donnée qui ne peux pas être 2 fois dans ta table.
 
PERSONNE  ( id_personne, relaisRH_personne)
SECTEUR(libelle_secteur,id_secteur)
QUESTION(libelle_question,id_question,cond_question)
REPONSE(coeff_reponse,HeureEnvoi_reponse)
QUESTIONNAIRE(id_quest,libelle_quest)  
 
On va essayer de simplifier:
 
Tu as une PERSONNE qui fait parti d'un SECTEUR je suppose. Et cette PERSONNE doit donner des REPONSEs à des QUESTIONS issues d'un QUESTIONNAIRE. J'ai bon?
 
Je mets les clef primaires en gras souligné:
 

  • PERSONNE  ( id_personne, relaisRH_personne)
  • QUESTIONNAIRE(id_questionnaire,libelle_quest)  
  • QUESTION(id_question,id_questionnaire, libelle_question, cond_question)  je rajoute id_questionnaire pour identifier à quel questionnaire appartient cette question
  • REPONSE(id_reponse,id_question, id_personne, coeff_reponse,HeureEnvoi_reponse) Je rajoute id_question pour savoir à quelle question appartient cette réponse, et  id_personne pour savoir qui a répondu.


Pour la réponse en clair, je rajouterai un champ dans REPONSE.

Reply

Marsh Posté le 03-02-2009 à 15:58:40    

D'accord, donc tu pars du principe ou on met dans id-reponse l'ensemble du contenu de la reponse et dans reponse_clair, on met la reponse du collaborateur, c'est bien ça?
J'ai bien compris le principe des clès primaire.
Donc en mettant la réponse complète plus la reponse de l'individu, plus besoin de table correspondance.
Par contre si je ne souhaite garder que la reponse de l'individu, je dois mettre une table de correspondance.
Jte suis ou pas?

Reply

Marsh Posté le 03-02-2009 à 16:06:38    

Vu ta question, j'irais un peu plus loin qu'aspirateur au niveau de l'organisation des tables.
 
Si je comprends bien ce que tu pensais faire, t'as la table "Questionnaire" qui contient le nom du questionnaire, la table "QUESTION" qui contient les questions avec un identifiant de type de question (sic, souplesse réduite vu que tu n'as nulle part les éléments permettant de faire la correspondance entre le type et les réponses elle même) avec leurs réponses et la table "REPONSE" qui contient les réponses de chaque personne pour chaque formulaire.
 
A mon avis, il te manque des éléments dans ton modèle.
 
Ce que je ferais à ta place comme tables, c'est :

  • QUESTIONNAIRE avec son identifiant, son libellé, sa date de début et de fin de disponibilité (quel est l'intérêt de proposer à un nouvel employé de répondre aux questionnaires d'il y a 10 ans ;) )
  • QUESTION avec son identifiant, l'identifiant du questionnaire auquel il est lié, son numéro d'ordre d'apparition, le type de base de la question (QCM, numérique, texte) , le type de traitement des données (moyenne, somme pour chaque réponse, etc : plusieurs choix possible donc soit une table pour ça soit une colonne d'un type qui permet de stocker plusieurs éléments)
  • REPONSE (<> de ta table REPONSE) avec l'identifiant de la question, son ordre d'apparition, son texte, sa valeur interne (le -1, 0, 1 etc)


+

  • PERSONNE_QUESTIONNAIRE qui indique que telle personne a répondu à tel questionnaire (éventuellement à telle date-heure)
  • PER_QUEST_REPONSE dans lequel on indique le questionnaire, la question et la réponse donné par la personne suscite (avec un lien vers PERSONNE_QUESTIONNAIRE si les questionnaires ne sont pas anonyme | avec un lien vers une table qui contient les infos pertinentes telles que, par exemple, "relaisRH_personne" si c'est utile évidement)


Normalement avec ça, il y aura moyen d'automatiser la plupart des traitement qu'ils te demanderont tout en gardant une souplesse importante. Par exemple avec ça, le système sera capable de gérer de lui même les questions à réponse pondéré (est ce que ceux qui passent par le premier RH sont plus content que mécontent) et les simples somme (x personne plutôt mécontente, y mitigé et z plutôt contente)
 
PS : Il est possible qu'il manque également quelques colonnes dans mon propre modèle, c'est à adapter en fonction des besoins. ;)
 
 
EDIT : Je suis trop lent à répondre, vous avez déjà reposté plusieurs messages. Je vais lire ce que vous avez écrit et je modifierai mon message si besoin.


Message édité par omega2 le 03-02-2009 à 16:07:52
Reply

Marsh Posté le 03-02-2009 à 16:06:38   

Reply

Marsh Posté le 03-02-2009 à 16:07:31    

Tu as presque tout compris  ;)  
Id_reponse est la clef primaire de la table REPONSE, dans ce champs sera la clef unique (un compteur par exemple).
 
REPONSE(id_reponse,id_question, id_personne, coeff_reponse,HeureEnvoi_reponse, reponseclair)
 
Voilà un exemple de ce qui sera dans la table REPONSE  
 
REPONSE(1, 38, 5, -1, 13H15, Très mécontent)
 
Ainsi pas besoin de table de correspondance. Sinon en effet tu fais une table de correspondance.
 
Ca te parait clair?

Reply

Marsh Posté le 03-02-2009 à 16:09:00    

Bon ben Omega est allé plus loin que moi en effet  :lol:

 

EDIT: Non Omega ta réponse est très bien.


Message édité par aspirateur le 03-02-2009 à 16:09:35
Reply

Marsh Posté le 03-02-2009 à 16:23:40    

En fait, j'ai quand même fait une petite erreur dans la table "PER_QUEST_REPONSE". Il faut une colonne de type texte pour les réponses libre (nombre, ou saisie de texte) et une colonne qui correspond à l'id de la table "REPONSE" (pour les questions de type QCM)
 
------------------------------------------
 
Et à la réflexion, si on peut donner plusieurs réponses à une question donné, (QCM à choix multiple) il faut encore une table qui fait la relation entre une ligne de "PER_QUEST_REPONSE" et la table "REPONSE" et cette table remplace au passage la colonne de de la table "PER_QUEST_REPONSE" dans laquelle on indiquait l'id de "REPONSE".
 
Quand je disais qu'il fallait ensuite compléter/adapter en fonction des besoins. ;)

Reply

Marsh Posté le 03-02-2009 à 16:26:57    

Tout d'abord merci de vos réponses les gars:)
@ aspirateur: on est ok
 
@Omega:  
 

Citation :

QUESTIONNAIRE avec son identifiant, son libellé, sa date de début et de fin de disponibilité (quel est l'intérêt de proposer à un nouvel employé de répondre aux questionnaires d'il y a 10 ans ;) )  
 


Pour les questionnaires, un mail est envoyé à l'ensemble des collaborateurs, avec relances si besoin est, qui ont globalement 15 jours 3 semaines pour répondre, après quoi , je dois récuperer le fichier plat qui provient de lime survey( soft utilisé pour génerer le questionnaire) et automatiser certains rapports. Donc je ne gére pas la date de disponibilité. Par contre il est vrai qu'un champ contenant la date de création du questionnaire( pour celui qui le met en ligne) peut être important.
 

Citation :


PERSONNE_QUESTIONNAIRE qui indique que telle personne a répondu à tel questionnaire (éventuellement à telle date-heure)  
 


J'aurais dû préciser que les personnes qui répondent à ce questionnaire doivent rester anonyme,  la seule chose qui identifie une personne est un id_personne (1,2...n), remise a zéro au questionnaire suivant, ce qui indiquera par la même occasion le nombre de participants au sondage.
 
Qu'en penses tu?
 
 

Reply

Marsh Posté le 03-02-2009 à 16:27:50    

lakthar a écrit :

Bonjour à tous, je suis débutant dans les bases de données & le langage SQL.


 
Bon courage et n'hesite pas à venir si tu es bloqué à un moment...

Reply

Marsh Posté le 03-02-2009 à 16:32:37    

Citation :


lakthar a écrit :
 
Bonjour à tous, je suis débutant dans les bases de données & le langage SQL.
 
 
 
Bon courage et n'hesite pas à venir si tu es bloqué à un moment...
 


 
Je te remercie, je te mp en case de besoin :)
Bonne journée

Reply

Marsh Posté le 03-02-2009 à 16:44:21    

Post plutot sur le topic comme ca tu aura + de réponse  ;)  En plus je connais pas tout  :)

Reply

Marsh Posté le 03-02-2009 à 16:59:01    

lakthar a écrit :

Citation :


PERSONNE_QUESTIONNAIRE qui indique que telle personne a répondu à tel questionnaire (éventuellement à telle date-heure)  
 


J'aurais dû préciser que les personnes qui répondent à ce questionnaire doivent rester anonyme,  la seule chose qui identifie une personne est un id_personne (1,2...n), remise a zéro au questionnaire suivant, ce qui indiquera par la même occasion le nombre de participants au sondage.
 
Qu'en penses tu?
 
 

J'en penses juste que mon PERSONNE_QUESTIONNAIRE indique juste que telle personne a répondu à tel questionnaire avec éventuellement à quel moment il a répondu sans rien indiquer de plus. La liaison personne<=> réponses est stocké dans une autre table si on veut des sondages non anonyme et pour des sondages anonyme ce lien n'existe pas. Il est donc impossible de savoir ce que telle personne à répondu à telle question quand on a un sondage anonyme.
De ton côté, t'as choisit de créer un compteur. C'est bien pour savoir combien de personnes ont répondu, mais en quoi ça empêcherait quelqu'un de répondre plusieurs fois? Là, j'avoue que soit il manque une information soit il y a un lien que je n'ai pas repéré.
 
D'un autre côté, vu que vous utilisez un logiciel pour gérer les questionnaires, c'est le genre de chose dont tu n'as pas à te préocuper : c'est à lui de gérer ça vu que c'est lui qui reçoit les réponses. En fait, j'en viens à me demander si tout ce qu'on te demande n'était pas faisable directement dans ce logiciel. Enfin bon, c'est ni à toi ni à moi d'y répondre. En tout cas, tu seras forcément limité aux données que ce logiciel te fournis. Comme je ne le connais pas, je ne peux pas te dire si mes indications, qui étaient dans l'optique d'une gestion de A à Z des formulaires, seront valide dans ton contexte. [:airforceone]  
 
En tout cas, je te souhaites donne chance pour la suite. :)

Reply

Marsh Posté le 03-02-2009 à 17:09:14    

Merci à toi omega2, l'objectif de cette mission est d'automatiser la récuperation de fichiers plats (contenant les résultas des sondages), création d'un univers  ( d'ou la creation de tables) afin de faire des rapports indiquant des statistiques et des beaux graphiques:d
Je schématise mais jsuis pas si loin de la vérité :)
Dans aucune question n'est demandé le nom de l'individu, donc je n'aurais pas à le remplir.
Et comme tu dis c'est le logiciel qui gère les réponses, une personne ne peut répondre qu'une seule fois, je ne m'occupe pas de ça

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed