动态应用程序的MS SQL表结构

时间:2015-04-03 06:24:26

标签: c# mysql sql-server

我正在构建一个动态应用。

应用程序的基础是我可以创建一个问题。一个问题可能有很多列。这些列将以表结构显示。然后用户将填写详细信息。以下是样本。

问题: 1.列出可用项目及其截止日期?

柱: 1.项目 - 文本框 2.截止日期 - 文本框

所以我会在下表中显示这些数据。

enter image description here

用户将填写该行并单击“提交”按钮。将添加另一个空行以添加另一个响应,如下所示。

enter image description here

用户将提交任何回复。

像这样,列的数量将是动态的,并且每列都会有一些验证,如Unique,AcceptsNull等......

如何在ms sql server中创建表结构以保存问题,列和响应。

请提前帮助谢谢..

2 个答案:

答案 0 :(得分: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列就足够了。一个重要的方面是您需要使用GUID作为问题ID才能是唯一的。

现在我们定义真实的数据表。 这是您定义答案列的表格:

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的外键。

答案 1 :(得分: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     |
+-----------------------------------------------------------------------------------+

编辑:我已添加验证。如果您想对同一问题的所有答案进行相同的验证,您还可以将验证列移至问题表。