2014-03-30 45 views
0

最近我一直在計劃一個系統,允許用戶定製並添加到Web界面。該應用程序可以與測驗創建系統進行比較。我遇到的問題是如何設計一個模式,以允許對應用程序進行「可變」數量的添加。帶有未確定數據的數據庫設計

我研究的第一個選項是爲添加創建一個對象,然後序列化並將其放入其自己的列中。內容不會經常編輯,所以寫作會很少,但是讀取會很頻繁。 (緩存可用於減少)

另一種選擇是使用除mysql或postgresql之外的其他選項,如cassandra。我以前從未使用過其他數據庫,但有興趣學習如何改進系統設計的使用方法。

關於這個主題的任何輸入將不勝感激。

謝謝。

* 編輯 29/3/14

上的數據有些信息被改變。對於我上面關於使用序列化對象的想法,可以說在表格中我將存儲測驗的名稱,測驗值的點數,然後存儲稱爲測驗數據的列,其將存儲包含信息的序列化對象在問題上。所以,總體來說物體看起來是這樣的:

Questions(Array):{ 
    [1](Object):Question{ 
     Field-type(int):1 
     Field-title(string):"Whats your gender?" 
     Options(Array):{"Female", "Male"} 
     } 
    [2](Object):Question{ 
     Field-type(int):2 
     Field-title(string):"Whats your name?" 
     } 
} 

的結構當然可以變化,但一般我會被存儲整數determin字段的類型的測驗,然後一個字段來保存該字段的標籤該字段的選項(如果有的話)。

+0

您可以提供一些關於您需要存儲哪些元素/對象的結構以及哪些需要動態創建的信息 –

+2

請注意這裏的「系統中的系統」設計。你會遇到像EAV這樣糟糕的事情。這對傳統的關係數據庫來說是非常不合適的(我認爲這是一個在PostgreSQL上專業工作的人)。認真考慮一個「無模式」或靈活的模式數據庫。 –

回答

1

在這種情況下,我會建議看看MongoDB

但是,如果您想使用MySQL,您可以考慮設計中的entity-attribute-value模型。 EAV模型允許您設計包含可變數量屬性的條目。

編輯

按照你的數據類型的更新,你想保存,可以按如下方式映射你的設計:

+-------------------------------------+ 
| QuizQuestions      | 
+----+---------+----------------------+ 
| id | type_id | question_txt   | 
+----+---------+----------------------+ 
| 1 | 1 | What's your gender? | 
| 2 | 2 | What's your name? | 
+----+---------+----------------------+ 

+-----------------------------------+ 
| QuestionTypes      | 
+----+--------------+---------------+ 
| id | attribute_id | description | 
+----+--------------+---------------+ 
| 1 |  1  | Single select | 
| 2 |  2  | Free text  | 
+----+--------------+---------------+ 

+----------------------------+ 
| QuestionValues    | 
+----+--------------+--------+ 
| id | question_id | value | 
+----+--------------+--------+ 
| 1 |  1  | Male | 
| 2 |  1  | Female | 
+----+--------------+--------+ 

+-------------------------------+ 
| QuestionResponses    | 
+----+--------------+-----------+ 
| id | question_id | response | 
+----+--------------+-----------+ 
| 1 |  1  | 1   | 
| 2 |  2  | Fred  | 
+----+--------------+-----------+ 

這則允許你動態地添加各種不同的問題( QuizQuestions),不同類型(QuestionTypes),然後用不同的選項(QuestionValues)限制它們並存儲這些響應(QuestionResponses)。

+0

謝謝你的回答。這是我通過使用關係數據庫設置和表格來存儲答案,問題和測驗並通過唯一標識將問題連接到測驗的另一個選項。 MongoDB還是一個無血統的數據庫仍然是最好的選擇? – tiantang