2011-11-25 41 views
0

我有一个工作模型和一个用户模型。我需要每个用户能够基于特定的作业回答几个问题。每个问题都标记为1到10(或未答复)。允许用户对话题投票的数据库结构

我认为我需要一个hasMany through协会,但都被这些之前混淆。

有人可以帮助我与我的数据库/模型布局。谢谢。

编辑:

  • 中仅有的表我目前所面对的是用户和作业
  • 的问题是每一项工作一样,有他们六人(在未来或许更多)
  • 的问题将始终是数字1到10(或无应答)
+0

你在哪里保留你的问题?他们是否在Job表中? –

+0

如果将来问题的数量可能会增加,那么您应该考虑将它们放在单独的表格中。 –

+0

如果您现在唯一的表格是用户和工作,那么您的问题在哪里?他们是在乔布斯表中,还是仅仅在页面的html/php中?你在哪里保留答案值? –

回答

2

是的,完美的hasMany通过candidat,我会做它像这样:

User hasMay JobQuestion 
Job hasMany JobQuestion 

JobQuestion belongsTo Job, User 

放在JobQuestion模型你所有的问题。这个模型可能有一个更合适的名称。你需要更多关于模型钥匙的细节吗?

编辑:

在JobQuestion模型中的行会:

ID | user_id | job_id | question1 | ... | questionN

你的数据数组将像

Array 
(
    [0] => Array 
     (
      [JobQuestion] => Array 
       (
        [id] => 1 
        [user_id] => 1 
        [job_id] => 1 
        [question1] => answer1 
        [question2] => answer2 
       ) 

      [Job] => Array 
       (
        [id] => 1 
        [name] => somejob 
       ) 

      [User] => Array 
       (
        [id] => 1 
        [username] => someuser 
       ) 

     ) 

) 
+0

您能举一个JobQuestion中的一行示例吗? – 472084

+0

一个用于kaklon @Jleagle (1,1,1,5,10) –

2

我觉得应该是:

表:用户,工作,问题,答案

  • 工作的hasMany 问题
  • 用户的hasMany 答案
  • 问题的hasMany 答案

回答表可以有以下栏目:USER_ID,question_id,答案(NULL或1-10)

你并不需要一个问题表,如果它融入工作莫名其妙。

编辑:更新到回答表中删除多余的ID按照意见建议。

+1

Normalize that Answer table some more,然后您删除ID字段,因为用户应该只能回答一次问题?因为在这种情况下,id将会是多余的。 – Tobias

+0

@Tobias点了。如果我对现有的表格有更多的了解,那么规范化会更容易。 –

+1

你可能也想区分答案和回答。很难从原文中知道对这些问题的可能答案永远只会是从1到10的一个数字。如果不是(即,如果可能有多个选择或文本答案等),那么您可能想看看用于答案的单独表格(即,每个问题的所有可能的答案)和答复(由用户选择的问题答案)。 – liquorvicar

1

如果我正确理解你的模型,它听起来就像用户选择作业,然后回答有关这项工作的问题(其中一些可能适用于不止一个工作)?如果是的话我想你的表结构应该是这个样子:

首先有您的离散实体。

Users: 
    UserID (PK) 
    User 

Jobs: 
    JobID (PK) 
    JobName 

注意,如果一些问题具有普遍性,并适用于一个以上的工作,那么问题应该被定义如下:

Questions 
    QuestionID (PK) 
    Question 

否则,如果每一个问题是具体到一个特别是工作,你可以避开至少一种关联表,同时增加了FK乔布斯成问题表:

Questions 
    QuestionID 
    JobID 
    Question 

但我不建议这样做,除非你确信疑问句每个工作都不同。

接下来,你的协会:

User_Jobs (Composite key = FK on USerID, FK on JobID) 
    UserID 
    JobID 

Job_Questions (Composite Key = FK on JobID, FK on QuestionID) 
    JobID 
    QuestionID 

User_Job_Questions (this one would contain a feild for responses, and could also be named User_Response) 
    UserID 
    JobID 
    QuestionID 
    Response (likley constrained to ints from 1-10) 

注意User_Job_Questions将包含对作业ID和QuestionID与回Job_Questions和其他FK回用户的复合FK。

+0

我已经更新了我的问题,主要是关于:“每个工作的问题都是一样的,其中有六个(未来可能会更多)” – 472084

0

工作hasAndBelongsToMany问题为同样的问题可以适用于多个作业。

但是要实现你的答案,你使用这种方法,一个HasManyThoughJoin。在JobQuestion表中,您可以存储答案和user_id。