我有一个工作模型和一个用户模型。我需要每个用户能够基于特定的作业回答几个问题。每个问题都标记为1到10(或未答复)。允许用户对话题投票的数据库结构
我认为我需要一个hasMany through
协会,但都被这些之前混淆。
有人可以帮助我与我的数据库/模型布局。谢谢。
编辑:
- 中仅有的表我目前所面对的是用户和作业
- 的问题是每一项工作一样,有他们六人(在未来或许更多)
- 的问题将始终是数字1到10(或无应答)
我有一个工作模型和一个用户模型。我需要每个用户能够基于特定的作业回答几个问题。每个问题都标记为1到10(或未答复)。允许用户对话题投票的数据库结构
我认为我需要一个hasMany through
协会,但都被这些之前混淆。
有人可以帮助我与我的数据库/模型布局。谢谢。
编辑:
是的,完美的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
)
)
)
您能举一个JobQuestion中的一行示例吗? – 472084
一个用于kaklon @Jleagle (1,1,1,5,10) –
我觉得应该是:
个表:用户,工作,问题,答案
你回答表可以有以下栏目:USER_ID,question_id,答案(NULL或1-10)
你并不需要一个问题表,如果它融入工作莫名其妙。
编辑:更新到回答表中删除多余的ID按照意见建议。
Normalize that Answer table some more,然后您删除ID字段,因为用户应该只能回答一次问题?因为在这种情况下,id将会是多余的。 – Tobias
@Tobias点了。如果我对现有的表格有更多的了解,那么规范化会更容易。 –
你可能也想区分答案和回答。很难从原文中知道对这些问题的可能答案永远只会是从1到10的一个数字。如果不是(即,如果可能有多个选择或文本答案等),那么您可能想看看用于答案的单独表格(即,每个问题的所有可能的答案)和答复(由用户选择的问题答案)。 – liquorvicar
如果我正确理解你的模型,它听起来就像用户选择作业,然后回答有关这项工作的问题(其中一些可能适用于不止一个工作)?如果是的话我想你的表结构应该是这个样子:
首先有您的离散实体。
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。
我已经更新了我的问题,主要是关于:“每个工作的问题都是一样的,其中有六个(未来可能会更多)” – 472084
工作hasAndBelongsToMany问题为同样的问题可以适用于多个作业。
但是要实现你的答案,你使用这种方法,一个HasManyThoughJoin。在JobQuestion表中,您可以存储答案和user_id。
你在哪里保留你的问题?他们是否在Job表中? –
如果将来问题的数量可能会增加,那么您应该考虑将它们放在单独的表格中。 –
如果您现在唯一的表格是用户和工作,那么您的问题在哪里?他们是在乔布斯表中,还是仅仅在页面的html/php中?你在哪里保留答案值? –