2016-07-11 2 views
1

J'utilise l'API de monkey Survey pour transférer des données d'enquête dans un entrepôt de données SQL.Mappage de 5 colonnes à une table (ID, dimension) sans 5 jointures?

Je suis le dumping des données de réponse dans une table '' resonses ainsi:

survey_id, Q1, Q2, Q3, Q4, Q5 

survey3944, 848948344, 430984384, 43094839, 238094983, 2380284 

Ensuite, j'ai une table de dimension 'de answer_key' qui a les combos id/texte. Tels que

ID, text 

848948344, 5 - very satisfied 

Je me demande comment je peux rejoindre les 5 colonnes de réponse ci-dessus en texte significatif (ou au moins le nombre entier) sans faire 5 Assemble. Je veux dire que j'ai la table "réponses" et la table "answer_key".

Ma première pensée serait passer par le mouvement:

Select r.survey_id, a.text, a2.text, a3.text, a4.text, a5.text 
from responses r 
inner join answer_key a on r.q1 = a.id 
inner join answer_key a2 on r.q2 = a2.id 
inner join answer_key a3 on r.q3 = a3.id 
inner join answer_key a4 on r.q4 = a4.id 
inner join answer_key a5 on r.q5 = a5.id 

Est-ce que la meilleure façon d'y parvenir? Je me demandais juste. Surtout si l'enquête est étendue à 10 questions, ou non. Je réalise que je peux avoir une rangée pour chaque réponse à une question plutôt que chaque sondage pour la structure de la table --- c'est une possibilité mais je pense que c'est un peu plus difficile étant donné la structure du JSON, mais c'est peut-être plus logique.

Répondre

0

Je ne suis pas sûr qu'il existe une meilleure façon de le faire avec votre structure de base de données, mais je ne suis pas un expert SQL. Je vous suggère de modifier la structure DB, par exemple de base allant de la vôtre:

responses Tableau: SurveyID, QuestionID, ChoiceID

answer_key Tableau: QuestionID, Texte

faire quelque chose comme:

Select r.survey_id, a.text 
from responses r 
inner join answer_key a on r.QuestionID = a.QuestionID 

Je pense qu'en général, il sera beaucoup plus facile de travailler avec si vous séparez chaque question dans sa propre rangée, plutôt qu'une table avec tout ce que stions. Surtout si vous allez utiliser plusieurs enquêtes avec un nombre différent de questions, cela sera plus flexible.

Vous voudrez peut-être décomposer encore plus à VariableID ou quelque chose dans le cas où vous avez des questions à plusieurs lignes comme les questions de type matrice. Ensuite, vous pouvez demander exactement ce que vous voulez plus facilement.

1

j'ai écrit l'adresse électronique suivante au soutien SurveyMonkey

J'ai besoin de lire les réponses en vrac pour l'enquête en utilisant $ « enquêtes/{surveyId} /réponses/vrac », mais la réponse actuelle renvoie ids pour les questions et réponses.

J'ai séparément à faire question demande "enquêtes/{}/surveyId détails" $

et rejoindre les réponses.

Il ressemble à un scénario typique et la plupart des les clients le font.Il serait bien que l'API prenne en charge le mode dénormalisé, lorsque des informations connexes seront renvoyées dans une réponse. I comprendre que ce sera la duplication de données, mais il significativement simplifier l'utilisation de votre API.

Ils ont répondu qu'ils considéreront dans un futur. Si quelqu'un pense que c'est une bonne idée, faites le savoir à [email protected]