数据库结构允许用户对某个主题进行投票

时间:2011-11-25 11:56:14

标签: php cakephp cakephp-1.3

我有作业模型和用户模型。我需要每个用户能够根据特定的作业回答几个问题。每个问题都标记为1到10(或未答复)。

我相信我需要一个hasMany through关联,但之前一直对它们感到困惑。

有人可以帮我处理我的数据库/模型布局。感谢。

修改

  • 我目前唯一的表是用户和工作
  • 每个工作的问题都是一样的,其中有六个(将来可能更多)
  • 问题将始终是1到10(或未答复)的数字

4 个答案:

答案 0 :(得分:2)

我认为应该是:

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

  • 工作有多个问题
  • 用户 hasMany 答案
  • 问题 hasMany 答案

您的答案表可以包含以下列:user_id,question_id,answer(NULL或1-10)

如果它以某种方式集成到作业,则不需要问题表。

编辑:已根据评论建议更新,以从答案表中删除多余的 ID

答案 1 :(得分:2)

是的,对于hasMany来说是完美的候选人,我会这样做:

User hasMay JobQuestion
Job hasMany JobQuestion

JobQuestion belongsTo Job, User

将所有问题都放在JobQuestion模型中。此模型可能有更合适的名称。您是否需要有关模型键的更多详细信息?

编辑:

JobQuestion模型中的一行将:

id | user_id | job_id |问题1 | ...... | 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
                )

        )

)

答案 2 :(得分: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将包含JobID上的复合FK和与Job_Questions相关的QuestionID以及返回给用户的另一个FK。

答案 3 :(得分:0)

Job hasAndBelongsToMany问题,因为同一个问题可以应用于多个工作。

但是,为了实现您的答案,您可以使用此方法HasManyThoughJoin。在JobQuestion表中,您可以存储答案和user_id。