簡體   English   中英

您將如何在SQL數據庫中創建和存儲用戶定義的自定義字段?

[英]How would you create and store user-defined custom fields in a SQL database?

我需要允許用戶向記錄添加新字段,例如,如果有聯系人記錄,用戶可能想要添加“SSN”數字字段和“出生日期”日期/日歷字段。 他們當然會通過用戶界面做到這一點。

然后,這些字段可用於所有聯系人記錄的輸入。

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

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

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. 允許用戶更改自己的數據庫模式,可能是通過上載模塊或運行腳本。

  2. 使用XML字段以及支持索引和查詢該字段內容的數據庫

這些是由Martin Fowler推薦的,請訪問: http//martinfowler.com/bliki/UserDefinedField.html

我們幾乎在所有應用程序/產品中添加了額外的屬性/字段支持,以便為用戶提供靈活性
就像我們有一個產品類別一樣,在類別中,客戶可以定義任何產品的附加屬性
我們在數據庫級別做的是:
類別表有一些額外的列,如:Text1Att,Text2Att ...用於文本值支持,Num1Att,Num2Att ...用於數值支持,Date1Att,Date2Att ...用於日期時間值支持,ID1Att,ID2Att ...支持ID從其他表格,你可以添加下拉列表,列表框,...
這里所有列都有String數據類型。
我們在這里存儲的是什么

我們將在這里存儲元信息,就像Text1Att meta一樣
SSN;文本框; 50;真,假,空;
字幕;控制類型;最大長度;是必填字段;是否需要自定義驗證; 自定義驗證消息;
出生地;文本框; 100;真;真;無效價值;
數字字段相同...
對於日期元信息將看起來像
出生日期;日歷控制;真;真;無效日期;
字幕; 日歷控件或可以是其他;是必需的;是自定義驗證; 自定義驗證消息;

在產品表中做的是添加相同數量的列並且具有數據類型text1Att,..是varchar,num1Att有數字,date1Att有datetime,ID1Att有int

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


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM