[英]Design patterns for user defined fields with dropdownlist support
我有一個支持客戶表中用戶定義字段的應用程序,並且我已經有了類似的東西:
CustomFields table
Id Name DataType
--------------------------------------------
1 Hobbies 1
2 Number of Siblings 3
上表顯示了一個表,其中包含在整個應用程序范圍內使用的UDF。 DataType列中的值轉換為如下形式:
1: string
2: DateTime
3: Integer
下表包含UDF的值
CustomFieldsValues table
CustomerId FieldId StringValue NumericValue DateValue
1234 1 Fishing NULL NULL
1234 2 NULL 6 NULL
8834 1 Golfing NULL NULL
8834 2 NULL 2 NULL
現在,我想介紹一個新的“ DataType”
4: DropDownList
從本質上講,它類似於string
數據類型,不同的是,除了呈現文本框之外,我還有一個下拉列表,其中的值將由管理員添加。
我現在能想到的是再有一張桌子
FieldDropDownList table
FieldId DropDownItem
1 Fishing
1 Golf
1 Swimming
2 Random value #1
2 Random value #2
3 Random value #3
並且所有數據類型為4的自定義字段的值都將保存在CustomFieldsValues
表的StringValue
列中
有什么建議和考慮因素嗎?
實施下拉列表UDF的最有效方法是什么?
有什么建議和考慮因素嗎?
是。 重新開始,讓DBMS完成工作! 該DataType
列警告您出了點問題。 DBMS提供類型,類型安全性和類型轉換。
將您的UDF分為CustomIntFields
, CustomStrFields
和CustomDateFields
。 如果需要laster,可以使用UNION
它們表示為單個視圖:
create view CustomFields as
select 's' as type, FieldID, Name from CustomStrFields UNION
select 'i' as type, FieldID, Name from CustomIntFields UNION
select 'd' as type, FieldID, Name from CustomDateFields;
對於初學者,這將使DBMS代表您確保日期包含日期,而整數包含數字。
DropDowns
表變為
create table DropDowns
( DropDownID int -- indicating the widget
, type char(1)
, FieldID int
);
引用三個UDF表的並集。
這種設計允許添加字段而不會自動出現在下拉列表中,而這可能不是您想要的。 如果應該將每個字段僅顯示在一個特定的下拉列表中,則可以將下拉ID添加到三個字段表中,並從視圖驅動所有內容。
什么是最有效的方法
這些東西都是非常靜態且很小的。 我很難相信效率將是一個問題。 但是我確實認為,按預期的方式使用DBMS可使程序員和客戶滿意度更高。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.