【问题标题】:Best way to store questionnaires/answers in c#? [closed]在 C# 中存储问卷/答案的最佳方式? [关闭]
【发布时间】:2017-02-23 13:33:34
【问题描述】:

我正在处理一个需要存储大量多语言调查问卷的项目。我为如何将这些问卷存储在我的数据库中而苦苦挣扎,最后我使用了资源文件。每份问卷都有自己的资源文件,您可以在其中找到问题、问题类型和答案。

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

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

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

我真的在网上找不到任何关于这个主题的文档,所以我问你们:)

谢谢!

【问题讨论】:

    标签: c# .net database translation resx


    【解决方案1】:

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

    Resource: ID
    

    并且相应的翻译存储在一个表格中,如下所示:

    ResourceTranslation: ID, ResourceID, LanguageCode, TextValue
    

    所以现在,当您需要以语言 de-DE 显示资源 4711 的文本时,您可以使用像 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)
    

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多