这是我之前的一个后续问题。我们大三学生正在为大学做志愿工作的网站开发。我们正在使用PHP + MySQL技术。 现在我主要负责使用MySQL的数据库开发,但我是一名MySQL设计师。我现在要求提供一些关于编写我的第一张表的提示,以获得它,然后我可以很好地处理其他表。 问题是这样的,我们的网站要做的第一件事就是向用户提供调查,以便在他们想要使用巴士服务时收集他们的偏好。 这就是我要开始数据库开发的地方。 用户需求文档指定对于调查,应该
客户方:
客户可以通过一系列预定义的问题和答案获得Survery,并且应该很容易填写
业务方面:
Survery info。将被存储,输出和显示以供分析。
它听起来不是太多工作,我不需要关心任何PHP的东西,但我只是困惑于:我应该创建一个名为“Survery”的表,或者两个表“Survey_business”和“Survey_Customer” ,以及数据库如何存储信息。 如果你们能给我一些帮助以便我能够继续努力,我将不胜感激,因为第一步始终是最艰难和最重要的。 感谢。
答案 0 :(得分:9)
我会使用多个表格。一个用于调查本身,另一个用于问题。如果您想选择多项选择题,可能还有一个答案选项。另一个答案表,每个问题每个问题都有一个记录。当您考虑多种类型的答案(选择,填空单行,自由格式多行等)和显示选项(单选按钮,下拉列表,文本框,yada yada)时,复杂性会升级,但对于一个简单的多项选择示例和一个渲染类型,我认为这可行。
类似的东西:
-- Survey info such as title, publish dates, etc.
create table Surveys
(
survey_id number,
survey_title varchar2(200)
)
-- one record per question, associated with the parent survey
create table Questions
(
question_id number,
survey_id number,
question varchar2(200)
)
-- one record per multiple-choice option in a question
create table Choices
(
choice_id number,
question_id number,
choice varchar2(200)
)
-- one record per question per answerer to keep track of who
-- answered each question
create table Answers
(
answer_id number,
answerer_id number,
choice_id number
)
然后使用应用程序代码:
作为数据库开发人员,您可以与Web应用程序开发人员一起设计查询,以便为每个任务填充和检索相应的数据。
答案 1 :(得分:3)
只有1个表,你只会改变每个场合使用表格的方式
客户方将数据插入表
业务方从同一表中读取数据和结果
答案 2 :(得分:1)
Survey.Customer听起来像一个存储功能,而Survey.Business听起来像一个检索功能。
您需要的唯一表格是存储空间。检索操作将使用现有存储表的查询和报告进行,因此您不需要其他表。
答案 3 :(得分:1)
仅使用单个表格。如果您要使用两个表,那么无论何时进行更改,您实际上都必须做两次。对于您和将来参与其中的任何其他人来说,这对维护来说是一个巨大的痛苦。
答案 4 :(得分:1)
尝试创建捕获需求所需的实体和属性的逻辑模型,检查关系,考虑如何在流程的两端使用数据,然后设计表。与用户交谈,与将要运行报告的人员交谈,与设计用户界面的人(屏幕和报告)交谈,以获得完整的图片。
密切关注报告要求,因为它们通常意味着数据输入模式中不存在的其他属性和实体
答案 5 :(得分:1)
我认为需要2个表:
然后您可以计算结果并将它们存储在surveyResults视图中。
答案 6 :(得分:0)
您呈现的数据是问题和答案是动态的吗?这是一个长期项目,会有问题交换进出吗?如果是这样,您可能也想在数据库中提出问题和答案。
我这样做的方法是定义你的实体并弄清楚如何设计你的表,以便关系很简单。听起来像你有三个实体:
答案 7 :(得分:0)
只是对Steven和Chris上面提到的内容进行了详细阐述。
如果有多个调查,则会有多个表格,并且每个调查都有一组不同的问题,如果同一个用户可以进行多次调查。
以CustID为主键的客户表
以问号ID作为主键的问题表。如果一个问题不能属于多个调查(N:1关系),那么也可以将调查ID(第3点中提到的表调查表)作为表中的一个值。
但是,如果调查问题关系是N:M,那么 (SurveryID,QuestionID)将成为SurveyTable的复合键,否则它只会使SurveyID具有调查的高级细节,如描述。
包含(USerID,SurveryID,QuestionID,AnswerGiven)的UserSurvey表
[注意:如果同一用户可以反复进行同一调查,则必须更新旧调查或重复尝试必须存储为具有某些序列号的其他行)