您的場景與Microsoft Project Server
將數據存儲在MSSQL
中的方式類似。在每個項目的MSPE中,任務可以具有動態數量的列。在你的情況下,如果你可以使所有的列類型爲VARCHAR
,那麼比你的方案更簡化。
提出的結構是這樣的:
這是問題的表:
tbl_Questions
+------------------------------------------------------------------+
| Id | Question |
+----------------------------------------------------------------- +
| RandomGUID1 | "List the projects available and their deadlines?" |
| RandomGUID2 | "List the projects available?" |
+------------------------------------------------------------------+
tbl_RelationTable
+---------------------------------------------------------------------------+
| Id | QuestionId | Column1 | Column2 | ... |Column 1000 |
+---------------------------------------------------------------------------+
| 1 | RandomGUID1 | RandomGUID111 | RandomGUID112 | | null |
| 2 | RandomGUID2 | RandomGUID113 | null | | null |
+---------------------------------------------------------------------------+
在此表中存儲所有tbl_Questions和其他表之間的關係。你在這個表中定義了足夠多的列,在這裏我提出了1000,但是在你的情況下,10-15列就足夠了。一個重要的方面是你需要使用問題ID的GUID才能保持唯一性。
現在我們定義真正的數據表。 這是你定義你的答案列的表:
tbl_AnswerColumns
+-----------------------------------------------+
|Id| RelationTableId | QuestionId | ColumnName |
+-----------------------------------------------+
| 1| RandomGUID111 | RandomGUID1 | Title |
| 2| RandomGUID112 | RandomGUID1 | Answer |
| 3| RandomGUID113 | RandomGUID2 | Title |
+-----------------------------------------------+
這是表您存儲的答案值:
tbl_AnswerValues
+-----------------------------------------------+
|Id| RelationTableId | QuestionId | Answer |
+-----------------------------------------------+
| 1| RandomGUID111 | RandomGUID1 | "Answer1" |
| 2| RandomGUID112 | RandomGUID1 | "Answer2" |
| 3| RandomGUID113 | RandomGUID2 | "Answer3" |
+-----------------------------------------------+
您需要在所有表中定義外鍵以便更快地檢索數據。這就是爲什麼每個表都應該包含QuestionId的外鍵。
有多個問題的答案可用。你將如何處理它? – Dotnetpickles 2015-04-03 07:08:39
通過在具有相同'QuestionId'的awsers-table中添加新記錄。 – Thijs 2015-04-03 09:06:24