2017-02-23 74 views
-2

我正在研究一个需要存储大量多语言问卷的项目。我在如何将这些问卷存入我的数据库方面做了很多努力,最后我去了资源文件。每份问卷都有他自己的资源文件,您可以在其中找到问题,类型和答案。在c#中存储问卷/答案的最佳方式?

我用答案的关键字将用户的答案存储在数据库中(该关键字在资源文件中答案的注释部分中定义)。

我尝试将它们首先存储在我的数据库中,但是当我添加翻译时它确实是一团糟。

所以我的问题是:这是一个好方法吗?或者有更好的方式来存储我的问卷?

我真的不能找到有关这个问题的在线文档,所以我问你们:)

谢谢!

回答

3

那么,“最好”当然是非常主观的。但是这样的结构怎么样?每个不同的资源在这个非常简单的表中定义:

Resource: ID 

和相应的翻译都存储在一个表,如:

ResourceTranslation: ID, ResourceID, LanguageCode, TextValue 

所以,现在,每当你需要显示资源4711文本语言de-DE,你得到一个SQL语句,如SELECT [TextValue] FROM [ResourceTranslation] WHERE [ResourceID] = 4711 AND [LanguageCode] = 'de-DE' (当然使用适当的参数化查询)

接下来,你有你的问题basica LLY像:

Question: ID, ResourceID 

的答案,如:

Answer: ID, ResourceID 

而像(n..m)连接:

QuestionAnswer: ID, QuestionID, AnswerID, IsCorrect 

现在如果你想在美国英语显示问题1337 ,查询是:SELECT [TextValue] FROM [ResourceTranslation] INNER JOIN [Question] ON [ResourceTranslation].[ResourceID] = [Question].[ResourceID] WHERE [Question].[ID] = 1337 AND [ResourceTranslation].[LanguageCode] = 'en-US'

您可以通过以下方式获得该问题的所有答案:SELECT [Answer].*, [QuestionAnswer].[IsCorrect] FROM [QuestionAnswer] INNER JOIN [Answer] ON [QuestionAnswer].[AnswerID] = [Answer].[AnswerID] WHERE [QuestionAnswer].[QuestionID] = 1337

而当你想用任何语言显示答案时,你会得到类似于你如何得到翻译的问题。

再一次,不知道这是否是“最好”的方式,但它应该既非常灵活,而且非常简单。


编辑:现在你还可以存储喜欢的网友:

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

而且答案一样:

UserAnswers: ID, UserID, QuestionID, AnswerID (, IsCorrect, TimeStamp) 
相关问题