我正在使用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中獲得所有魔法功能工作?
你應該這樣做既不創建表,也不視圖創建,都是可怕的想法,即使你淨化輸入並沒有什麼,我可以創建n個賬戶和污染數據庫,有效地使其成爲一個噩夢,由於表/視圖維護。編輯:我看到你實際上不會在每次創建表單時創建一個視圖,因此 - 是的,創建一個視圖和你需要的兩個基礎表,這比創建表更安全。 –
如果有提升的超級用戶帳戶(限制IP地址)可以運行應用程序的創建表代碼部分會怎麼樣? – trafalgar
如果您即時創建表單,則不會創建包含數據的表。是的,如果我們能做到這一點,那將是非常好的,你只需查詢一個表(或一組表),但關係數據庫並不是爲此而設計的。您可以在這裏使用EAV方法,在這裏您的表已經創建好了,他們的模式支持所有字段和值的無限生長形式,或者簡單地使用無模式數據存儲層,比如MongoDB或者不依賴於類似的NoSQL解決方案一個結構。當你認爲你需要動態創建表格時 - 你做錯了什麼。 –