2013-10-05 21 views
2

我沒有太多設計數據庫的經驗。我想要一個列值來確定要查詢哪個表,並且我不知道是否有更好的方法。這裏有更好的理解的具體問題:數據庫設計:我想要一個列值來確定要查詢哪個表

我正在爲調查創作者應用程序設計一個數據庫。我想存儲不同類型的問題(例如:多選題和基本文本問題)。我有以下表格:

QUESTION 
| ID | Title      | TypeID | 
---------------------------------------------- 
| 1 | "Pick a num from 1-10"  | 1  | 
| 2 | "Choose some from the list:" | 2  | 

TYPE 
| ID | Name     | ExtraValues | 
-------------------------------------------- 
|1 |Scale Question   |ScaleValues | 
|2 |Multiple Choice  |MultiValues | 


SCALE VALUES 
|Question_ID | Min | Max | 
-------------------------- 
|1   | 1 |10 | 

MULTI VALUES 
|Question_ID | Name | Value | 
-------------------------------- 
|2   | Sugar | 10 | 
|2   | Milk | 20 | 
|2   | Egg  | 14 | 
從現在開始

所以,如果一個問題是「選擇題」型,比我想檢查表MULTI價值觀,否則刻度值。我可以用存儲過程來完成,或者我可以查詢所有的用於question_ID的VALUES表。但有沒有更好的方法來做到這一點?

+0

不是真的,你在使用ORM嗎?做了近似非常相似的事情,但是用ActiveRecord的多態關聯去解決了很多痛苦。 –

回答

1

你當然可以用這種方式設計你的數據庫。但是,您無法獲取查詢中的「ExtraValues」列,並自動將該表拉入查詢。不是沒有動態執行的SQL。最好的辦法就是在問題類型上使用分支邏輯,並用它來確定從哪裏獲取其他相關數據。

您也可以將最小和最大字段移動到QUESTION表中,並完全消除ScaleValues表。如果它是一個多選題,你可以設置爲NULL。

0

我認爲有一個更好的方法來做到這一點。在問題和可用答案之間建立多對多的關係。添加第三列,名爲points。所以,你的三個表是:

問題 - QuestionId和文本

答案 - AnswerId和文本

問題答案 - QuestionId,AnswerId和點。

獎勵0分爲錯誤答案。

這種設計可能太簡單了。您也可能需要測試表。那麼你需要在很多表中都有一個TestId字段,它現在被稱爲TestQuestionAnswer。

相關問題