2015-04-03 34 views
0

我正在構建一個動態應用程序。動態應用程序的MS SQL表結構

該應用程序的基本功能是我可以創建一個問題。一個問題可能有很多列。這些列將以表格結構顯示。然後用戶將填寫細節。以下是示例。

問題: 1.列出可用的項目和截止日期?

列: 1.項目 - 文本框 2.截止日期 - 文本框

因此,我會在表中顯示此數據如下圖所示。

enter image description here

用戶將填補該行並點擊提交按鈕。另一個空行將被添加以添加下面的另一個響應。

enter image description here

用戶將提交沒有任何的反應。

像這樣沒有列的將是動態的,也是每列將有獨特的一樣,AcceptsNull等一些驗證...

如何創建在MS SQL Server表結構保存的問題,列,答覆。

請幫助在此先感謝..

回答

0

通過你給我想是這樣的信息?

Questions  
+---------------------------------------------------------+ 
| Id | Question           | 
+----+--------------------------------------------------- + 
| 1 | "List the projects available and their deadlines?" | 
+---------------------------------------------------------+ 

Answers 
+-----------------------------------------------------------------------------------+ 
| Id | QuestionId | Order | Title  | Anwser  | Unique | Nullable | Values | 
+----+------------+-------+------------+-------------+--------+----------+----------+ 
| 1 |   1 |  0 | "Project" | "Project 1" | True | False | "P1, P2" | 
| 2 |   1 |  1 | "Deadline" | "Apr-15" | False |  True | NULL  | 
+-----------------------------------------------------------------------------------+ 

編輯:我已添加驗證。如果你想對同一個問題的所有答案進行相同的驗證,你也可以將驗證列移動到問題表。

+0

有多個問題的答案可用。你將如何處理它? – Dotnetpickles 2015-04-03 07:08:39

+0

通過在具有相同'QuestionId'的awsers-table中添加新記錄。 – Thijs 2015-04-03 09:06:24

1

您的場景與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的外鍵。

+0

每列都會有特定的屬性。像第1列將是文本框,而第2列將是下拉菜單。您可以在哪裏保存此信息 – Dotnetpickles 2015-04-03 08:37:13

+0

您可以向tbl_AnswerColumns添加新列:ColumnType,也是dropDown,您可以使用PossibleValues添加另一列。 – 2015-04-03 08:57:50