2011-02-15 80 views
2

對不起,我對自己的調查問卷如何製作db有點困惑;它將成爲那些在randon挑選了幾個問題的問卷中的一個,在他們旁邊顯示可能的答案,其中每個答案都具有在最後計算的權重。調查問卷db結構

所以我得到了3個表:問題,答案和重量

重量有一個一對多與答案,因爲每個答案都會有一個權重被添加到最後的比分。

這讓我很困惑的事情是如何擺脫問題和答案之間的多對多關係,因爲一個問題將有許多可能的答案,並且相同的答案,即是/否將用於許多問題。

回答

4

我建議以下結構:

  • 問題
    • has 0:n answers
    • 屬性:id(int PK),question(text)
  • 解答
    • 有1個問題
    • 有0:N響應
    • 屬性:id(INT PK),答案(文字),問題編號(INT FK)
  • 迴應
    • has 1 answer
    • (有1個問題通過回答)
    • 具有1個響應者(用戶)
    • 屬性:id(INT PK),答案ID(INT FK),用戶ID(INT FK)
  • 用戶
    • 具有0:N響應
    • 屬性:id(INT PK)+其他任何你需要存儲有關用戶

(PK =主鍵,FK =外鍵)

商店weight作爲問題或答案的屬性。你還沒有真正描述什麼是weight,所以很難說。


下面是一個問題的記錄以及某人回答該問題的記錄。在這個例子中,Jean Luc Picard被問到「有多少燈?」可能的答案是「3」,「4」和「5」。當然,他選擇了「4」,對此沒有收到任何weight(「5」是正確的答案)。

Question: (QID=1, Question="How many lights?") 
Answer: (AID=1, QID=1, Answer="3", Weight=0) 
Answer: (AID=2, QID=1, Answer="4", Weight=0) 
Answer: (AID=3, QID=1, Answer="5", Weight=1) 
Response: (RID=1, AID=2, UID=1) 
User: (UID=1, Name="Jean Luc Picard", ...) 
1

你有兩個選擇:

  1. 不要擺脫許多一對多。它並沒有傷害你。

  2. 有「每個問題的回答」。例如。答案表中有欄目「question_id,answer,weight」。 (據我所知,因爲體重是perl的答案/問題,所以你不需要一個seaparate體重表)。主鍵是「question_id + answer」

    是的,這第二個設計是非標準化 - 您將存儲幾個不同的「是」答案的副本。但是這並沒有什麼大的損失(在這種特殊情況下,參考完整性並不是一個大問題(例如「保持所有」是「字符串一致);空間問題是最小的 - 無論如何,對於小問題,大回答往往是唯一的,通過存儲「是」問題的ID與字符串「是」不存儲太多空間。

我的建議是第二設計 - 這既是編寫代碼反對,維護簡單,沒有大的缺點,儘管在理論上被規格化

0

@wuputah重量是選擇的問題值得點。

我決定和一張桌子一起去找相同重量的答案,tblBooleanAnswerYes,tblBooleanAnswerNo,tblTextAnswer1pt,tblTextAnswer2pt(ID,文本,weightID *)

有兩個問題表tblBooleanQuestion(ID,booleanAnswerYesID *,booleanAnswerNoID *),tblTextQeestion(ID,文字,textAnswer1ptID *,textAnswer2ptID *,textAnswer3ptID *等)

tblWeight -< tblBooleanAnswerYes -< tblBooleanQuestion 
     \ \_< tblBooleanAnswerNo ___v 
     \ 
     \ -< tblTextAnswer1pt -< tblTextQuestion 
     \_< tblTextAnswer2pt ___v 

一重了很多答案,一個答案很多問題

+0

重量應存放有答案呢?我不明白爲什麼它會是一個單獨的表格。您將所有答案屬性解除規範化爲問題,這隻會導致問題。我不會推薦你已經佈置的結構。 – wuputah 2011-02-18 07:37:13