2013-06-18 118 views
1

我正在使用cakephp,我需要讓用戶設計自己的表單(這隻會在設置嚮導階段完成一次,約有12個表單在實際使用中創建)。始終需要的表格是用戶,組和日誌,設置。實際上,這是一個用戶友好的數據庫應用。我應該讓用戶在數據庫中創建表還是創建視圖?

我想創建視圖和具有兩個實際的表來存儲來自於形式和後續數據:

Forms [id | name | structure             ] 
     [1 | Details| {id:{type:key}q2:{type:text;validation:{select:male..}..} ] 
     [2 | Car | {id:{type:key};car:{type:text;validation:{select:Honda... }}] 

列「結構」將包含一個JSON或XML字符串,它列出的字段,類型和驗證規則。

Forms_data [id | form_id | survey_id | key | value ] 
      [1 | 1  | 1   | q1 | Male ] 
      [2 | 1  | 1   | q2 | 1/1/76] 
      [3 | 2  | 1   | Car | Honda] 
      [4 | 2  | 1   | Eng | Petrol] 
      [5 | 1  | 2   | q1 | Fem ] 
      [6 | 1  | 2   | q2 | 2/3/81] 
      [7 | 2  | 2   | Car | Ford ] 
      [8 | 2  | 2   | Eng | Diesel] 

的Forms_data表將包含數據表單的每個領域,survey_id意味着主體人的形式是一下,一個人被調查可以對他們做了很多形式。鍵將是varchar,但值必須是最大可能數據類型的大小(例如「段落文本」)。或者我應該讓用戶(通過params/sanitized等)執行一個「CREATE TABLE」並在數據庫中創建真正的表,這樣我就可以充分利用系統查詢和優化功能,並在cakephp中獲得所有魔法功能工作?

+0

你應該這樣做既不創建表,也不視圖創建,都是可怕的想法,即使你淨化輸入並沒有什麼,我可以創建n個賬戶和污染數據庫,有效地使其成爲一個噩夢,由於表/視圖維護。編輯:我看到你實際上不會在每次創建表單時創建一個視圖,因此 - 是的,創建一個視圖和你需要的兩個基礎表,這比創建表更安全。 –

+0

如果有提升的超級用戶帳戶(限制IP地址)可以運行應用程序的創建表代碼部分會怎麼樣? – trafalgar

+0

如果您即時創建表單,則不會創建包含數據的表。是的,如果我們能做到這一點,那將是非常好的,你只需查詢一個表(或一組表),但關係數據庫並不是爲此而設計的。您可以在這裏使用EAV方法,在這裏您的表已經創建好了,他們的模式支持所有字段和值的無限生長形式,或者簡單地使用無模式數據存儲層,比如MongoDB或者不依賴於類似的NoSQL解決方案一個結構。當你認爲你需要動態創建表格時 - 你做錯了什麼。 –

回答

1

這取決於你以後想要對數據做什麼以及會有多少數據。 DBMS系統(如MySQL)可以非常快地處理大量數據。您也可以以非常複雜的方式查詢數據,而不是其他選擇。這種權衡要複雜一點。我幾乎總是從數據庫解決方案的角度出發。它給你最大的靈活性。

相關問題