我正在构建一个动态应用。
应用程序的基础是我可以创建一个问题。一个问题可能有很多列。这些列将以表结构显示。然后用户将填写详细信息。以下是样本。
问题: 1.列出可用项目及其截止日期?
柱: 1.项目 - 文本框 2.截止日期 - 文本框
所以我会在下表中显示这些数据。
用户将填写该行并单击“提交”按钮。将添加另一个空行以添加另一个响应,如下所示。
用户将提交任何回复。
像这样,列的数量将是动态的,并且每列都会有一些验证,如Unique,AcceptsNull等......
如何在ms sql server中创建表结构以保存问题,列和响应。
请提前帮助谢谢..
答案 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 |
+-----------------------------------------------------------------------------------+
编辑:我已添加验证。如果您想对同一问题的所有答案进行相同的验证,您还可以将验证列移至问题表。