我有一個工作模型和一個用戶模型。我需要每個用戶能夠基於特定的作業回答幾個問題。每個問題都標記爲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中?你在哪裏保留答案值? –