2017-02-23 47 views
-2

我正在研究一個需要存儲大量多語言問卷的項目。我在如何將這些問卷存入我的數據庫方面做了很多努力,最後我去了資源文件。每份問卷都有他自己的資源文件,您可以在其中找到問題,類型和答案。在c#中存儲問卷/答案的最佳方式?

我用答案的關鍵字將用戶的答案存儲在數據庫中(該關鍵字在資源文件中答案的註釋部分中定義)。

我嘗試將它們首先存儲在我的數據庫中,但是當我添加翻譯時它確實是一團糟。

所以我的問題是:這是一個好方法嗎?或者有更好的方式來存儲我的問卷?

我真的不能找到有關這個問題的在線文檔,所以我問你們:)

謝謝!

回答

3

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

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)