2013-02-06 31 views
-1

我正在考慮一個用例,其中應用程序的每個用戶都可以使用n個不同數據類型的不同表單字段創建N個表單。每個用戶然後可以以其各自的形式接收表格數據。這些數據可以被更新,編輯,搜索,排序等。用於爲動態創建的表單保存表單數據的DB結構

我想知道,我如何在MySQL中爲此設計數據庫體系結構。

我最初的做法是將表單結構以序列化形式保存在一個表中,其中form_id作爲主鍵。另一張表中,數據應包含列的形式:form_id,record_id,order,value。這裏,順序將是表示表單結構中字段位置的數字。值列應具有該字段的值。這種方法導致我有10行(對於具有10個字段的表單)一組記錄。另外,我不認爲這樣的查詢可以寫入特定表單的搜索記錄。

我的確想到在這個用例中使用mongodb,其中表單結構應該存儲在一個數組中,並且在該數組中,該表單的所有記錄都應該被存儲。我從來沒有使用過mongodb,但是我猜如果我將文檔存儲在文檔中,mongodb會對大小產生某種限制。那麼,使用MySQL(或任何其他數據庫完美適用於這種用例)的最佳方法是什麼?

+0

關於您的問題的問題太多了......您是否可以縮小範圍?有很多種方法可以將它存儲在任何現代數據庫系統中。這完全取決於數據的使用方式,使用頻率以及用戶數量。看起來列可能有數據類型(要進行排序,他們需要有關聯的數據類型)。 (你用什麼查詢來試圖搜索特定表單的記錄?爲什麼他們不能被搜索? – WiredPrairie

回答

1

每個mongoDB文檔的大小限制爲16mb。如果你需要每個文件都更大,那麼你需要適當地調整你的設計。 MongoDb也包括GridFS,它允許你將大文件分成塊。

在您的示例中,您可以將表單字段作爲數組存儲在mongoDB中,但您也可以將它們作爲嵌入式文檔存儲。無論您選擇哪種方式,your schema design in mongoDB都需要與您的數據訪問模式相匹配。

通過應用程序很容易將新的鍵值對添加到mongoDB文檔中。僞代碼將是:

if user adds form field 
db.collection.update({'id':1},{$addToSet {'newField':'value'}}) 

我知道你的問題是關於MySQL的結構,但我認爲它值得炫耀它如何在MongoDB中工作(顯然需要適應你選擇的語言)。

+0

謝謝!我猜MongoDB應該可以工作,但是我需要進一步探索。 – gentrobot

+0

沒問題 - 有很棒的文檔可用,我上面鏈接和大量的好書加10gen運行免費的在線課程。享受! – br3w5

+0

感謝您接受我的答案 - 請upvote它,如果你滿意的話:) – br3w5