2009-06-07 44 views
5

我需要允許用戶在記錄中添加新的字段,例如如果有聯繫人記錄,用戶可能需要添加「SSN」數字字段和「生日」日期/日曆字段。他們會通過用戶界面來做到這一點。您將如何在SQL數據庫中創建和存儲用戶定義的自定義字段?

這些字段應該可用於所有聯繫人記錄的輸入。

考慮到我的應用程序同時爲許多用戶運行(而不是單個公司部署等),理論上每個人都可以添加自己的自定義字段,將此信息存儲在數據庫中的最佳做法是什麼需要被搜索?

+1

坦率地說,我想你」通過詢問個人用戶的需求即時詢問問題。例如,如果你有10人需要相同的信息,但它命名爲10點不同的方式,你將有很多複雜的非常小的好處。與用戶見面並達成共識而不是專門做事可能會更好。 – 2009-06-07 05:13:21

+0

你100%正確。我堅持這一要求,雖然:( – Alex 2009-06-07 05:15:19

+0

我有很多的應用做到這一點,當你實現這種類型的需求,它很困難,但是這將給予更多的靈活性,用戶添加鑑於您的需求自定義字段 – 2009-06-07 06:20:40

回答

1

我們差點給定的靈活性加上我們所有的應用程序/產品的附加屬性/現場支持用戶
就像我們有一個產品類別,在類別,用戶可以定義任何產品的附加屬性
我們在做什麼在DB級別是:
類別表格有一些額外的列,如:Text1Att,Text2Att ...用於文本值支持,Num1Att,Num2Att ...用於數值支持,Date1Att,Date2Att ...用於日期時間值支持,ID1Att ,ID2Att ...支持ID從其他表像你可以添加下拉列表框,...
這裏所有的列都有字符串數據類型。
我們在這裏存儲是什麼

我們將在這裏存儲元數據信息,像Text1Att元是
SSN;文本框; 50;真,假,空;
字段標題;控件類型;最大長度;是必填字段;是自定義驗證所需;自定義驗證消息;
出生地; textbox; 100; true; true;無效值;
相同的數字字段...
日期元信息將看起來像
出生日期;日曆控制;真;真;無效的日期;
字段說明;日曆控件或可以是其他;是必需的;是自定義驗證;自定義驗證消息;


什麼都在做,在產品表中添加列的相同數量和數據類型有text1Att,..爲varchar,num1Att有數字,date1Att有日期時間,ID1Att有一個整型

我們正在做的GUI一面是:在類別定義頁面中添加這些屬性並在運行時創建元信息並存儲在類別表中
另一方面,當我們在類別中定義產品時,將從類別表中讀取和遍歷元信息並像其他字段一樣填充到產品定義頁中。


如果u需要進一步的幫助,我可以爲您提供的圖像,讓您可以更好地理解如何可以做到這一點。
我們的經驗和分析,這是非常靈活的方法

10

有一個存儲字段名稱和類型的表。

field_ID  INT 
field_name VARCHAR 
field_type ENUM('int','float','text','richtext') 

有一個表,用於存儲指向記錄表中的條目的鏈接,指向字段表中條目的鏈接以及字段值。

fieldvalue_fieldID INT 
fieldvalue_recordID INT 
fieldvalue_value  BLOB 

使其成爲搜索的是另一個挑戰 - 你需要抓住任何搜索內容指出,fieldvalue_value和索引的。這將是數據庫特定的。在MySQL中,你可以創建一個TEXT值並在其上添加一個MySQL FULLTEXT索引。

1

你最好的選擇是:

  1. 允許用戶改變自己的數據庫模式,也許是通過上傳一個模塊或運行一個腳本。

  2. 使用XML領域,

這些都是由Martin Fowler,這裏建議支持索引和查詢該字段的內容數據庫:http://martinfowler.com/bliki/UserDefinedField.html

相關問題