我必须创建一个数据库列,以存储在我跟踪的特定指标上得分大于或等于0.01、0.1、1和10的阈值的人数。
例如,我要存储以下数据
addActivity
所以我的问题是...
如何命名我的专栏来传达这一点?我不能使用> =符号或。品格。我在想类似...
Number units quality score >= 0.01
Number units quality score >= 0.1
Number units quality score >= 1
Number units quality score >= 10
这看起来很直观吗?有更好的方法吗?
答案 0 :(得分:1)
这是主观的,但是我想说score_gte_001会更加直观。 Meets_thresh_001将是另一个可能比gte更加清晰的选项。
然后是数字。通过将数字显式或隐式地称为hundreths,可以避免小数点问题:
meets_thresh_1c
meets_thresh_10c
meets_thresh_100c
meets_thresh_1000c
答案 1 :(得分:1)
您的示例都是整数或小于零,因此没有任何歧义。但是对于其他人来说,这个名称本身可能并不明显,您可能不得不添加更多令人困惑甚至冲突的群组。 gte_score_15
是什么意思-它可以读为>= 15
或>= 1.5
?而且您可能需要代表这两天,因此您的命名应尽量做到面向未来和直观。
至少在您知道该方案之后,包含一个分隔符以显示小数点后的位置会使其更清晰。对我而言,将数字格式模型字符用作小数点分隔符D
:
gte_score_0d01
gte_score_0d1
gte_score_1
gte_score_1d5
gte_score_10
gte_score_15
尽管我同意@ L.ScottJohnson的观点,score_gte_0d01
等的扫描效果更好。再次,这是主观的。
如果该度量标准有一个最大值和一个最大精度,则可能值得,包括前导零和尾随零。假设它不能超过两位数,并且不能超过两位小数:
score_gte_00d01
score_gte_00d10
score_gte_01d00
score_gte_01d50
score_gte_10d00
score_gte_15d00
只要您知道模式,定界符就是多余的-没有定界符,阈值就是数字部分/ 100。但是用它可能更清楚一些,并且使用填充可以更清楚地显示d
的含义。
如果您沿着这条路线走,那么我建议您提出一个对您有意义的方案,然后将其展示给同事,看看他们是否可以毫无提示地解释它。
您可以(并且可以说应该)将您的设计规范化到一个单独的表中,该表中有一列用于阈值(然后可以是一个简单数字),另一列用于对应的阈值数每个指标的人。这样一来,以后添加更多阈值就变得更加容易(更轻松地添加额外的行和额外的列),并使问题消失了。 (您可以添加视图以转到该布局,但随后又回到了命名问题。)
答案 2 :(得分:0)
您真的要这样做吗?如果事实证明您需要额外的阈值20。或者75。或者...?为什么不将其标准化并使用两列?一个代表阈值,另一个代表人数。
所以,而不是
create table some_table
(<some_columns_here>,
gte_score_001 number,
gte_score_01 number,
gte_score_1 number,
gte_score_10 number
);
使用
create table some_table
(<some_columns_here>,
threshold number,
number_of_people number
);
comment on column some_table.number_of_people is
'Represents number of people who scored greater than or equal to a threshold';
并存储类似值
insert into some_table (threshold, number_of_people) values (0.01, 13);
insert into some_table (threshold, number_of_people) values (0.1, 56);
insert into some_table (threshold, number_of_people) values (1, 7);
如果必须实施新的阈值,没问题-只需将其插入为
insert into some_table (threshold, number_of_people) values (75, 24);
以您的方式,您必须
alter table some_table add gte_score_75 number;
-更糟的是-修改引用该表的 all 其他程序单元(存储过程,视图,表单,报告...列表很长)。
答案 3 :(得分:0)
使用列名别名的双引号可以使您摆脱很多麻烦。这消除了对受限字符和关键字的大多数限制。 我建议这样的东西应该可以用于显示目的。
SELECT 314 "Number units quality score >= 0.01" FROM DUAL
答案 4 :(得分:0)
无论使用哪种解决方案,存储的人数都超过阈值将导致问题。而是使用原始数据的视图。如果需要新的拆分,则可以创建新的视图,而不必重新计算任何列。此示例效率低,但仅作为示例提供:
create or replace view thresholds as
select
(select count(*) c from rawdata where score >= .1) as ".1"
, (select count(*) c from rawdata where score >= 1 ) as "1"
, (select count(*) c from rawdata where score >= 10 ) as "10"
from dual