簡體   English   中英

具有下拉列表支持的用戶定義字段的設計模式

[英]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分為CustomIntFieldsCustomStrFieldsCustomDateFields 如果需要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.

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