2017-02-23 1 views
-2

Je travaille sur un projet où j'ai besoin de stocker beaucoup de questionnaires multilingues. J'ai eu beaucoup de mal à stocker ces questionnaires dans ma base de données et finalement je suis allé avec les fichiers de ressources. Chaque questionnaire a son propre fichier de ressources dans lequel vous trouvez les questions, leurs types et leurs réponses.La meilleure façon de stocker des questionnaires/réponses en C#?

Je stocke les réponses de l'utilisateur dans la base de données avec une clé de la réponse (cette clé est définie dans la section commentaire de la réponse dans le fichier de ressources).

J'ai essayé de les stocker d'abord dans ma base de données mais c'était un vrai bordel quand j'ai ajouté les traductions. Donc, ma question est: Est-ce un bon moyen d'y aller? Ou y a-t-il une meilleure façon de stocker mes questionnaires?

Je ne peux pas vraiment trouver de la documentation sur ce sujet en ligne, donc je vous demande les gars :)

Merci!

Répondre

3

Eh bien, le «meilleur» est bien sûr très subjectif. Mais que diriez-vous d'une structure comme celle-ci. Chaque ressource distincte est définie dans ce tableau très simple:

Resource: ID 

Et les traductions respectives sont stockées dans une table comme:

ResourceTranslation: ID, ResourceID, LanguageCode, TextValue 

Alors maintenant, chaque fois que vous devez afficher le texte pour la ressource 4711 dans langue de-DE, vous obtenez que par une instruction SQL comme SELECT [TextValue] FROM [ResourceTranslation] WHERE [ResourceID] = 4711 AND [LanguageCode] = 'de-DE' (bien sûr utiliser les requêtes paramétrées appropriées)

Ensuite, vous avez à vos questions basica lly comme:

Question: ID, ResourceID 

les réponses comme:

Answer: ID, ResourceID 

et (n..m) connexion comme:

QuestionAnswer: ID, QuestionID, AnswerID, IsCorrect 

Maintenant, si vous voulez afficher question 1337 en anglais américain , la question est: SELECT [TextValue] FROM [ResourceTranslation] INNER JOIN [Question] ON [ResourceTranslation].[ResourceID] = [Question].[ResourceID] WHERE [Question].[ID] = 1337 AND [ResourceTranslation].[LanguageCode] = 'en-US'

Vous obtenez toutes les réponses à cette question via: SELECT [Answer].*, [QuestionAnswer].[IsCorrect] FROM [QuestionAnswer] INNER JOIN [Answer] ON [QuestionAnswer].[AnswerID] = [Answer].[AnswerID] WHERE [QuestionAnswer].[QuestionID] = 1337

Et quand vous voulez afficher les réponses dans n'importe quelle langue, vous obtenez cela semblable à la façon dont vous obtenez la question traduite.

Encore une fois, je ne sais pas si c'est le "meilleur" moyen, mais il devrait être à la fois assez flexible et encore assez simple.


Edit: Maintenant, vous pouvez également stocker les utilisateurs comme:

User: ID, LanguageCode (, Name, etc.) 

Et les réponses comme:

UserAnswers: ID, UserID, QuestionID, AnswerID (, IsCorrect, TimeStamp)