关于数据库设计的初学者问题

时间:2010-01-29 17:09:57

标签: mysql database-design

这是我之前的一个后续问题。我们大三学生正在为大学做志愿工作的网站开发。我们正在使用PHP + MySQL技术。 现在我主要负责使用MySQL的数据库开发,但我是一名MySQL设计师。我现在要求提供一些关于编写我的第一张表的提示,以获得它,然后我可以很好地处理其他表。 问题是这样的,我们的网站要做的第一件事就是向用户提供调查,以便在他们想要使用巴士服务时收集他们的偏好。 这就是我要开始数据库开发的地方。 用户需求文档指定对于调查,应该

客户方:

客户可以通过一系列预定义的问题和答案获得Survery,并且应该很容易填写

业务方面:

Survery info。将被存储,输出和显示以供分析。

它听起来不是太多工作,我不需要关心任何PHP的东西,但我只是困惑于:我应该创建一个名为“Survery”的表,或者两个表“Survey_business”和“Survey_Customer” ,以及数据库如何存储信息。 如果你们能给我一些帮助以便我能够继续努力,我将不胜感激,因为第一步始终是最艰难和最重要的。 感谢。

8 个答案:

答案 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
) 

然后使用应用程序代码:

  1. 插入新的调查问卷。
  2. 在人们参加调查时填写答案。
  3. 调查进行后的结果报告。
  4. 作为数据库开发人员,您可以与Web应用程序开发人员一起设计查询,以便为每个任务填充和检索相应的数据。

答案 1 :(得分:3)

只有1个表,你只会改变每个场合使用表格的方式

客户方将数据插入表

业务方从同一表中读取数据和结果

答案 2 :(得分:1)

Survey.Customer听起来像一个存储功能,而Survey.Business听起来像一个检索功能。

您需要的唯一表格是存储空间。检索操作将使用现有存储表的查询和报告进行,因此您不需要其他表。

答案 3 :(得分:1)

仅使用单个表格。如果您要使用两个表,那么无论何时进行更改,您实际上都必须做两次。对于您和将来参与其中的任何其他人来说,这对维护来说是一个巨大的痛苦。

答案 4 :(得分:1)

到目前为止,大多数建议/答案都适用,但对您的域名做出某些(未说明的!)假设

尝试创建捕获需求所需的实体和属性的逻辑模型,检查关系,考虑如何在流程的两端使用数据,然后设计表。与用户交谈,与将要运行报告的人员交谈,与设计用户界面的人(屏幕和报告)交谈,以获得完整的图片。

密切关注报告要求,因为它们通常意味着数据输入模式中不存在的其他属性和实体

答案 5 :(得分:1)

我认为需要2个表:

  • 用于存储问题和答案选择的调查表。每项调查将存储在一行中,并带有唯一的调查ID
  • 其他表用于存储答案。我认为最好将每个客户的答案放在一行,如果有必要,可以使用调查ID和客户ID。

然后您可以计算结果并将它们存储在surveyResults视图中。

答案 6 :(得分:0)

您呈现的数据是问题和答案是动态的吗?这是一个长期项目,会有问题交换进出吗?如果是这样,您可能也想在数据库中提出问题和答案。

我这样做的方法是定义你的实体并弄清楚如何设计你的表,以便关系很简单。听起来像你有三个实体:

  • 问题
  • 答案
  • 完成调查

答案 7 :(得分:0)

只是对Steven和Chris上面提到的内容进行了详细阐述。

如果有多个调查,则会有多个表格,并且每个调查都有一组不同的问题,如果同一个用户可以进行多次调查。

  1. 以CustID为主键的客户表

  2. 以问号ID作为主键的问题表。如果一个问题不能属于多个调查(N:1关系),那么也可以将调查ID(第3点中提到的表调查表)作为表中的一个值。

  3. 但是,如果调查问题关系是N:M,那么 (SurveryID,QuestionID)将成为SurveyTable的复合键,否则它只会使SurveyID具有调查的高级细节,如描述。

  4. 包含(USerID,SurveryID,QuestionID,AnswerGiven)的UserSurvey表

    [注意:如果同一用户可以反复进行同一调查,则必须更新旧调查或重复尝试必须存储为具有某些序列号的其他行)