2011-11-25 86 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。