2011-11-12 69 views
0

我希望用戶能夠使形式與N場,文字,數字,電子郵件,康寶等我怎麼每個字段存儲不知道他們中有多少會是什麼? 我想這樣做的第一個方法是存儲所有的文本字段一個表,在另一個所有電子郵件領域,等等。然後,在一個表中我存儲與它自己的ID形式的信息。 我如何解決這個表單系統的可伸縮性問題?例如有多個服務器共享表單。 我的設計夠好嗎? 我需要使用XSLT存儲以將其轉換成html嗎?如何將用戶生成的表單映射到數據庫中?

回答

0

兩個解決方案:

  • 創建一個乾淨的,規範化的數據庫結構(避免EAV Model)數據庫
  • 存儲元數據(如XML等)

1.解決方案

形式表

id | user_id | name 
  • USER_ID:將這種形式的 「所有者」
  • 名稱:如 「註冊」 或任何形式的名稱

form_fields表

id | form_id | label | type | sorting | values | default 
  • form_id是一個外鍵TH Ë形式表
  • 標籤是像「密碼」
  • 類型是輸入型(如選擇,電子郵件,密碼,文本)輸入的標籤,在此基礎上,你可以處理顯示/驗證等
  • 排序爲您提供了一個形式安排領域
  • 值的能力 - 預定義值的例子就是一個選擇框,這個存儲爲像XML,JSON或任何元數據,並在您的應用程序解析它,你可以使用類型字段確定要如何處理這些值
  • 默認 - 默認值(也許在一個選擇框或預先定義的文本的文本輸入所選值)

如果有人填表:

filled_forms表

id | user_id | form_id 
  • USER_ID:誰填補形式?
  • form_id:哪種形式?

filled_form_values

id | filled_form_id | field_id | values 
  • filled_form_id:外鍵filled_forms表
  • FIELD_ID:輸入的數值,可能存儲爲元數據:形式
  • 值的字段id比如JSON,XML(例如:允許多選的一個選擇框),您可以加入表單和表單字段,以便獲取該字段的類型,然後您可以辦理值正常

優點:

  • 數據庫處理數據的完整性對您
  • 規範化的數據庫架構

缺點:

  • 靜態模式,多加入檢索字段
  • 去的方向EAV-型號
  • 沒有直接轉化與XSLT可能

2.解決方案

你只有兩個表:

形式表

id | user_id | name | metadata 
  • USER_ID:形式的所有者(外鍵)
  • 名稱:形式的名稱(如註冊等)
  • 元:你的自我實現的形式描述(HTML,XML,JSON等等),其正確描述表格,爲元素等提供ID

filled_forms表

ID | form_id | user_id |值

  • form_id:外鍵的形式
  • USER_ID:外商關鍵誰填寫的表單
  • 值的用戶:您的自我實現的填寫表格的說明(HTML,XML ,它正確地描述了輸入和其映射到田裏

優點JSON無論):

  • 非常靈活,沒有EAV陷阱,結構簡單
  • 用XSLT可能直接轉化

缺點:

  • 你必須保證數據的完整性自己
+0

我會與第二個解決方案去了,還等什麼您認爲解決方案的資源密集度較低?確保數據完整性+更新元數據或使用第一種解決方案強調數據庫? – AlfredoVR

相關問題