如何命名包含受限字符的列,以便该名称直观?

时间:2018-07-19 17:33:16

标签: database oracle

我必须创建一个数据库列,以存储在我跟踪的特定指标上得分大于或等于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

这看起来很直观吗?有更好的方法吗?

5 个答案:

答案 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