我有一个应用程序支持我的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的最有效方法是什么?
答案 0 :(得分:0)
我应该提出任何建议和考虑因素吗?
是。重新开始,让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而更高。 : - )