我已经为我的用户提供了以下投票表格,但我不确定如何围绕它构建数据库。
用户将获得20-30个民意调查问题,如下所示:
将能够选择上述答案之一,并must also provide around 100 words
解释他选择答案的原因。
我目前有两张桌子。持有民意调查问题的人和持有民意调查选项的人。我不确定的是如何保持用户的答案。
事情是因为民意调查是如此之大,用户可以部分地进行,稍后回来,改变他的答案并继续前进,直到他100%完成,这样我才能够在我的面板中查看整个结果。所以他基本上可以保存他的进度并随时改变它。最重要的是,我想"删除"针对特定用户的整个民意调查,并能够重新进行重新调整,但同时保留他之前答案的历史记录。
所以我不确定这样的表是否是满足我需求的最佳选择:
id
user_id
poll_questiond
poll_answer
poll_text
last_update
status
似乎这样的事情会造成巨大的混乱。有更好的方法吗?
答案 0 :(得分:0)
我会创建3个表:
<强> table_polls 强>
+----+---------------------+--------+
| id | description | status |
+----+---------------------+--------+
| 1 | Example description | 1 |
+----+---------------------+--------+
<强> table_poll_options 强>
+----+---------+-------------+
| id | poll_id | description |
+----+---------+-------------+
| 1 | 1 | Question 1 |
| 2 | 1 | Question 2 |
+----+---------+-------------+
<强> table_poll_answers 强>
+----+-----------+---------+----------------+---------------------+
| id | option_id | user_id | description | created_at |
+----+-----------+---------+----------------+---------------------+
| 1 | 1 | 1 | A valid reason | 1970-01-01 00:00:00 |
| 1 | 2 | 2 | Another reason | 1970-01-01 00:00:00 |
+----+-----------+---------+----------------+---------------------+
概括上述内容:
投票有很多问题。
民意调查问题有很多答案
民意调查答案有一个用户。
通过这种方式,您可以使用数据透视表分割所有内容,并且不再需要在轮询表中创建混乱的行。
如果您需要有关日期等的额外信息,您可以扩展表格。
答案 1 :(得分:0)
如果您使用半结构化语言定义问题域,我认为您会发现它更容易。您可以决定将某些逻辑委托给应用程序层,而不是嵌入到数据库模式中 - 例如,在应用程序层中保存部分完成的轮询可能会更容易。
您可以从这样的事情开始,捕获域中的主要实体及其关系,但不捕获它们的属性。
该系统包含许多民意调查。
一次民意调查有很多问题。 问题属于1 的轮询强>
问题可以是多项选择(选择一项)或 多项选择(选择n)或自由文字
问题可能强制或可选
多项选择题有1..n 答案选项
问题与其他问题有顺序关系 (例如,自由文本问题必须遵循喜欢的颜色 问题)
系统由许多用户
组成用户会回答许多民意调查
当用户回答民意调查时,他们会回答0..n 问题
当用户回答民意调查时,答案仅在以下情况有效 用户完成所有强制性问题
这表明你有两个多态实体 - 问题(可以是自由文本或多项选择)和答案(因为答案与问题有关,它也是自由文本或多项选择)。
您必须决定如何在模式中对此进行建模 - Stack Overflow对此主题有很多疑问 - 但我会选择最简单的。
Poll
-----
Poll_id
Question
------
Question_id
Poll_id
Sequence
Is_mandatory
Description
Question_option
-------------
Question_option_id
Question_id
Option_id
Sequence
Description
User
-----
User_id
Poll_session
------
Poll_session_id
User_id
Poll_id
Date
Status
Poll_session_answer
-----
Poll_session_id
Quesion_id
Free_text_answer
Question_option_id_answer