1

我有一个支持我的客户表的用户定义字段的应用程序,我已经有了这样的东西:

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 的自定义字段的值都将保存在表格的列StringValueCustomFieldsValues

有什么建议,我应该考虑吗?

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

4

1 回答 1

0

有什么建议,我应该考虑吗?

是的。重新开始,让 DBMS 完成工作!该DataType列是一个警告,表明有问题。DBMS 提供类型、类型安全和类型转换。

将 UDF 分成CustomIntFieldsCustomStrFieldsCustomDateFields. 如果需要最后一个,您可以将它们表示为单个视图,使用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,程序员和客户的满意度会更高。:-)

于 2013-03-14T05:15:04.787 回答