在c#中存储问卷/答案的最佳方式?

时间:2017-02-23 13:33:34

标签: c# .net database translation resx

我正在开展一个项目,我需要存储大量的多语言问卷。我在如何将这些问卷存储在我的数据库中时遇到了很多困难,最后我选择了资源文件。每个调查问卷都有自己的资源文件,您可以在其中找到问题,类型和答案。

我将用户的答案存储在数据库中,并附有答案的密钥(此密钥在资源文件中答案的评论部分中定义)。

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

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

我无法在网上找到关于此主题的任何文档,所以我问你们:)

谢谢!

1 个答案:

答案 0 :(得分:3)

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

Resource: ID

相应的翻译存储在如下表格中:

ResourceTranslation: ID, ResourceID, LanguageCode, TextValue

现在,只要您需要在语言4711中显示资源de-DE的文本,就可以使用SELECT [TextValue] FROM [ResourceTranslation] WHERE [ResourceID] = 4711 AND [LanguageCode] = 'de-DE'之类的SQL语句来实现 (当然使用适当的参数化查询)

接下来,您的问题基本上就像:

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)