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