在 C# 中存储 questionnaires/answers 的最佳方式?
Best way to store questionnaires/answers in c#?
我正在做一个需要存储大量多语言调查问卷的项目。我为如何将这些调查问卷存储在我的数据库中而苦苦挣扎,最后我使用了资源文件。每个调查问卷都有自己的资源文件,您可以在其中找到问题、问题类型和答案。
我将用户的答案存储在数据库中,并带有答案的键(该键在资源文件中答案的评论部分定义)。
我试着先将它们存储在我的数据库中,但是当我添加翻译时,它真的一团糟。
所以我的问题是:这样做好吗?或者有更好的方法来存储我的问卷?
我真的无法在网上找到关于这个主题的任何文档,所以我问你们:)
谢谢!
嗯,"best"当然是很主观的。但是这样的结构怎么样。每个不同的资源都在这个非常简单的 table 中定义:
Resource: ID
并且相应的翻译存储在 table 中,例如:
ResourceTranslation: ID, ResourceID, LanguageCode, TextValue
所以现在,只要您需要以语言 de-DE
显示资源 4711
的文本,您就可以使用 SQL 语句(例如 SELECT [TextValue] FROM [ResourceTranslation] WHERE [ResourceID] = 4711 AND [LanguageCode] = 'de-DE'
)
(当然要使用适当的参数化查询)
接下来,你的问题基本上是这样的:
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
当您想以任何语言显示答案时,您获得的结果与获得翻译问题的方式类似。
同样,不确定这是否是 "best" 方式,但它应该既非常灵活又非常简单。
编辑:现在您还可以像这样存储用户:
User: ID, LanguageCode (, Name, etc.)
答案如下:
UserAnswers: ID, UserID, QuestionID, AnswerID (, IsCorrect, TimeStamp)
我正在做一个需要存储大量多语言调查问卷的项目。我为如何将这些调查问卷存储在我的数据库中而苦苦挣扎,最后我使用了资源文件。每个调查问卷都有自己的资源文件,您可以在其中找到问题、问题类型和答案。
我将用户的答案存储在数据库中,并带有答案的键(该键在资源文件中答案的评论部分定义)。
我试着先将它们存储在我的数据库中,但是当我添加翻译时,它真的一团糟。
所以我的问题是:这样做好吗?或者有更好的方法来存储我的问卷?
我真的无法在网上找到关于这个主题的任何文档,所以我问你们:)
谢谢!
嗯,"best"当然是很主观的。但是这样的结构怎么样。每个不同的资源都在这个非常简单的 table 中定义:
Resource: ID
并且相应的翻译存储在 table 中,例如:
ResourceTranslation: ID, ResourceID, LanguageCode, TextValue
所以现在,只要您需要以语言 de-DE
显示资源 4711
的文本,您就可以使用 SQL 语句(例如 SELECT [TextValue] FROM [ResourceTranslation] WHERE [ResourceID] = 4711 AND [LanguageCode] = 'de-DE'
)
(当然要使用适当的参数化查询)
接下来,你的问题基本上是这样的:
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
当您想以任何语言显示答案时,您获得的结果与获得翻译问题的方式类似。
同样,不确定这是否是 "best" 方式,但它应该既非常灵活又非常简单。
编辑:现在您还可以像这样存储用户:
User: ID, LanguageCode (, Name, etc.)
答案如下:
UserAnswers: ID, UserID, QuestionID, AnswerID (, IsCorrect, TimeStamp)