那麼,「最好」當然是非常主觀的。但是這樣的結構怎麼樣?每個不同的資源在這個非常簡單的表中定義:
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)