使用下拉列表支持设计用户定义字段的模式

时间:2013-02-20 10:35:26

标签: database database-design drop-down-menu user-defined-fields

我有一个应用程序支持我的customer表的用户定义字段,我已经有类似的东西:

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的自定义字段都会将其值保存在StringValue表的CustomFieldsValues列中

我应该提出任何建议和考虑因素吗?

实施下拉列表UDF的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

  

我应该提出任何建议和考虑因素吗?

是。重新开始,让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而更高。 : - )