2013-02-24 71 views
0

我正在爲在線調查設計一個關係數據庫。多維矩陣問題的關係數據庫設計

但是,我不確定用於存儲多維矩陣問題的最佳關係數據庫設計是什麼。

比方說,我有以下問題(對不起,它不允許我插入HTML表):

什麼是你的經驗......

----------| Not friendly| (2) |Very friendly|Length of stay|Visited in the last year?| 
Sydney |radio button | rb |  rb | drop down | check box    | 
-------------------------------------------------------------------------------------- 
New York |  rb  | rb |  rb | drop down | check box    | 
-------------------------------------------------------------------------------------- 
London |  rb  | rb |  rb | drop down | check box    | 
-------------------------------------------------------------------------------------- 

你覺得我應該按照以下方法做一些事情還是有更好的辦法?

要容納所有的問題:

問題
questionID
問題

QuestionMatrix2d
matrix2dID
questionID
subquestionID
subquestion

QuestionMatrix
questionID
matrix2dID
question_parentID

,並責成所有的答覆:

QuestionResponse
questionID
RESPONSE_CODE

QuestionMatrix2dResponse
questionID
subquestionID
RESPONSE_CODE

謝謝您的幫助。

回答

0

在做過類似的事情之後,我會建議考慮而不是將其轉化爲關係問題。如果你有對象並且將它們序列化爲類似JSON的東西並存儲它,會怎麼樣?

這樣做以關係到頭來你會花相當多的時間去表和接線一起復雜的繪圖代碼在你的應用程序,以確保該問題/答案正確的順序等

否則,我想畫你可以讓你的方法奏效。在RDBMS中設計調查問題沒有銀彈。

+0

謝謝 - 數據必須可用於查詢。如果我把它存儲爲JSON,我不確定我能否很容易地做到這一點。我知道有一些JSON查詢的開發,但有一些標準? – user2105030 2013-02-26 23:20:58

2

我不同意ryan1234。這完全是一個關係問題,沒有理由不把它放到數據庫中。

雖然我在這裏試圖達成目標,但我還是要做一些猜測。你有一個在線調查,所以我認爲它會被不止一個人使用。你的數據庫需要通過一個sessionuser表進行修改,我會用後者去讀,因爲它更清晰。其次,你有一個列表locations(Sidney,紐約,倫敦)。我想這個列表可以隨時間變化,甚至可以從一個調查問卷到下一個調查問卷。然後你有一組questions。你沒有明確說明這些是可變的或固定的。既然你爲此設計了一組表格,我認爲它應該是可變的。請注意,你的問題不是矩陣,而是一個列表。即使它們是分層的,它們仍然不構成矩陣。

最後但並非最不重要的是你已經得到了這些問題的答案。

讓我們創建一個users表:

user_id user_name 
1  me 
2  somebody else 

第二個表是非常簡單的:locations

location_id location_name 
1    Sidney 
2    New York 
3    London 

三表是一個比較複雜 - 而且說實話:只是普通的難看。但是,如果您在數據庫中設計數據庫,那麼這就是您所得到的結果,並且替代方案(使用DDL或將這些信息存儲在XML/JSON中,甚至存儲在數據庫外部)也不太好。如果存在分層問題(您的示例不顯示它們),則可以添加「parent_question_id」列。

question_id question_text  question_type question_type_info 
1    How do you rate RADIO   0 to 5 
2    Length of stay  COMBOBOX   1 day, 2 days, whatever 
3    Visited last year CHECKBOX   

最後,你需要第四個表來存儲所有的答案

user_id location_id  question_id  value 
1   1    1    2   <-- value here means "rating of 2" 
1   1    2    5   <-- value here means "5 days" 
1   1    3    1   <-- value here means "yes, visited last year" 

沒錯。醜陋的。如果你有疑問的固定列表,我可以爲你提供一個非常數據庫:)

編輯:回答您的意見:爲了您的問題鏈接到一個調查,你需要幾個表surveys界定哪些將要詢問哪些位置的問題。以下數據庫佈局允許您指定位置列表,問題列表以及問卷調查名稱。

surveys

survey_id survey_name 
1   Spring 2013 London Travel Survey 
2   Spring 2013 Northern Hemisphere Short Survey 

survey_questions

survey_id question_id 
1   1 
1   2 
1   3 
2   1 

survey_locations

survey_id location_id 
1   1 
2   1 
2   2 

我擺在這裏爲您提供了兩項調查的內容。調查#1將在一個位置詢問所有三個問題:'倫敦'。調查#2只會在倫敦和紐約提出一個問題。如果你想在不同的位置提出不同的問題,你的桌面佈局將不得不適應這種情況,但是這樣的系統不適合你原來的桌面佈局。

+0

謝謝你的回答。你是對的 - 它將被多個用戶使用,問題可能會從調查變爲調查。然而,你認爲最好的方式是證明所有這些問題都與你對......的經歷有什麼關係?因爲對於要分析數據的人來說,瞭解如何準確地提出問題非常重要。 – user2105030 2013-02-26 23:13:30

+0

我不確定你在這裏問什麼。第四個表「answers」有一個「question_id」列,它直接鏈接到「questions」表,後者又有問題。 – Hazzit 2013-02-27 16:52:55

+0

將會有外部人員在觀看這些調查。對於其中一些問題,重要的是要確切地知道問題是如何被問到的,因此,介紹性的問題「你對...的經歷」沒有得到任何迴應,但是當人們看待調查時,他們需要知道它被要求作爲介紹。我認爲在生成調查以便向用戶顯示時,瞭解這些問題如何相互關聯很重要。 – user2105030 2013-03-03 22:25:19