SQL Table 基于条件的值设计
SQL Table design for condition based values
我需要根据值的范围存储配置信息值。
这是要求:我想根据字段值存储颜色代码。例如,如果字段值为:
fieldValue > 0.5 then Red ,
fieldValue > 0.3 && fieldValue < 0.4 then Amber
fieldValue < 0.3 then Green
fieldValue < 0 then Blue
目前,我想到了下面的table设计
create table conditional_config
(
condition_id varchar2(50) primary key,
condidtion varchar2(100),
color_value archer(20)
);
示例条目如下所示(contain_id、条件、值)
condition1, >0.5, RED
condition2, >0.3 && 0.5<, AMBER
condition3, >0 && <0.3, GREEN
condition4, <0, BLUE
提出更好的设计方案。
如果您要使用该数据以编程方式计算颜色,我建议将其分成两个字段:LowerLimit 和 UpperLimit。将这些字段设为数字,然后您就可以直接使用它们而无需进行大量解析:
create table conditional_config
(
condition_id varchar2(50) primary key,
lowerLimit float(3,2),
upperLimit float(3,2),
color_value archer(20)
);
对于红色,可以设置upperLimit为3.402823466E+38
对于蓝色,可以将lowerLimit设置为-3.402823466E+38
浮点数限制取自http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html
我会先稍微改变标准的陈述方式:
fieldValue > 0.5 then Red
fieldValue > 0.3 then Amber
fieldValue > 0.0 then Green
fieldValue > -9999 then Blue
规则为“适用颜色值是小于或等于条件值的最大值。
Values:
Field Color
===== =====
0.5 Red
0.3 Amber
0.0 Green
-9999 Blue
这给出了以下查询:
select c.ConditionValue, v.Color
from Conditions c
join Values v
on v.Value =(
select Max( Value )
from Values
where Value <= c.ConditionValue );
现在,我已经创建了一个任意下限,如果您知道您的值可能包含的下限,这可能会很好地工作。如果不知道,您可以将下边界从 -9999 更改为 NULL
或完全删除该行。那么查询将是:
select c.ConditionValue, IfNull( v.Color, BLUE ) as Color
from Conditions c
left join Values v
on v.Value =(
select Max( Value )
from Values
where Value <= c.ConditionValue );
但是您必须从 table 中删除代码中的蓝色,这不是最佳形式。
我需要根据值的范围存储配置信息值。
这是要求:我想根据字段值存储颜色代码。例如,如果字段值为:
fieldValue > 0.5 then Red ,
fieldValue > 0.3 && fieldValue < 0.4 then Amber
fieldValue < 0.3 then Green
fieldValue < 0 then Blue
目前,我想到了下面的table设计
create table conditional_config
(
condition_id varchar2(50) primary key,
condidtion varchar2(100),
color_value archer(20)
);
示例条目如下所示(contain_id、条件、值)
condition1, >0.5, RED
condition2, >0.3 && 0.5<, AMBER
condition3, >0 && <0.3, GREEN
condition4, <0, BLUE
提出更好的设计方案。
如果您要使用该数据以编程方式计算颜色,我建议将其分成两个字段:LowerLimit 和 UpperLimit。将这些字段设为数字,然后您就可以直接使用它们而无需进行大量解析:
create table conditional_config
(
condition_id varchar2(50) primary key,
lowerLimit float(3,2),
upperLimit float(3,2),
color_value archer(20)
);
对于红色,可以设置upperLimit为3.402823466E+38
对于蓝色,可以将lowerLimit设置为-3.402823466E+38
浮点数限制取自http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html
我会先稍微改变标准的陈述方式:
fieldValue > 0.5 then Red
fieldValue > 0.3 then Amber
fieldValue > 0.0 then Green
fieldValue > -9999 then Blue
规则为“适用颜色值是小于或等于条件值的最大值。
Values:
Field Color
===== =====
0.5 Red
0.3 Amber
0.0 Green
-9999 Blue
这给出了以下查询:
select c.ConditionValue, v.Color
from Conditions c
join Values v
on v.Value =(
select Max( Value )
from Values
where Value <= c.ConditionValue );
现在,我已经创建了一个任意下限,如果您知道您的值可能包含的下限,这可能会很好地工作。如果不知道,您可以将下边界从 -9999 更改为 NULL
或完全删除该行。那么查询将是:
select c.ConditionValue, IfNull( v.Color, BLUE ) as Color
from Conditions c
left join Values v
on v.Value =(
select Max( Value )
from Values
where Value <= c.ConditionValue );
但是您必须从 table 中删除代码中的蓝色,这不是最佳形式。