2014-11-06 65 views
0

最近我看到一個網站應用程序,並且有一個有趣的HTML表單引起了我的注意!在網站管理員系統中,您可以定義一個表格,例如就業表格,您可以在表格中定義您需要的字段。在數據庫上動態生成字段並生成表單的動態字段

例如,您可以使用生日,姓名和性別字段來填寫生日,姓名和姓氏類型爲Textbox,性別類型爲Checkbox,因此您可以生成優化表單,另一個可以創建她/他的優化的形式。

之後,任何人都可以填寫您的表格在網站客戶端頁面,你可以看到經理網站上的所有填寫表格。所以這對我來說是一個很大的問題,網站數據庫如何設計它可以動態地改變字段?!在第一個視圖中,我認爲數據庫中有一列是它的類型是XML,它可以在單列中生成基於XML的任何形式。但我認爲這不是一個好方法,因爲我們將擁有許多類似數據的擁抱數據庫(XML文本大部分是類似的),那麼是否有更好的方法來做到這一點?

note:數據庫是在sqlserver2012上,我問網站管理員,你是怎麼做到的,他告訴我這種類型的設計被稱爲'財產引擎'爲我搜索它,但我沒有找到任何有用的信息!那麼你的想法是什麼?

回答

1

我不認爲你一定需要XML來實現這樣的系統,這是選擇的問題。它例如可以實現這樣的:

enter image description here

這意味着:剛拿在你的數據庫模型的方向META向前邁出的一步。

但是當然你必須圍繞這樣一個不簡單的數據庫模型來實現應用程序。當然,這已經存在很多實現。


您還可以檢查此question - 這裏的設計是一個稍微簡單一些不允許各種形式的內場的再利用 - 這可能是好的,甚至更好,取決於你計劃實現什麼。所以你應該在Form和Field表之間建立關係1:N。

enter image description here

所以,你的數據庫中的字段會是這樣的:

Form 
----- 
    FormID (PK) 
    FormName 
    UserId (FK to users) 
(other fields) 

FormField 
------------- 
    FormFieldId (PK) 
    FormID (FK to form) 
    FieldTypeId (FK to FieldType) 
    FieldName (or Caption ...) 
    (other fields) 

FieldType 
------------- 
    id (PK) 
    name 

FilledForm 
------------------- 
    FilledFormId (PK) 
    +IPAddress, data about who filled the form... 


FilledFormField 
------------------- 
    FilledFormFieldId (PK) 
    FilledFormId (FK) 
    FormFieldId (FK) 
    Value 

如果您不需要追蹤是誰填寫的表單信息,也可以從模型中取出FilledForm表。

在這樣的數據庫設計中,不要忘記創建正確的主鍵和索引。

+0

謝謝VDohnal這麼多,我有一些想法來實現這個數據庫中,但我在尋找新的,更好的解決方案,你的答案對我來說是新的和良好的解決方案,但你能告訴我一些教程或告訴我一些關鍵字可以幫助我找到更多的例子? – 2014-11-09 07:01:47

+0

感謝您提供完整,簡單,明確的答案,這真是太棒了。 – 2014-11-09 09:08:22