2013-05-12 54 views
1

我有一个用于定义表格的简单设计问题。我必须读取数字值的字符串,但也可以是“n/a”。现在我有两个选择。我可以将列定义为varchar并允许“n/a”,或者我将这样的列定义为numeric(float)并允许空值。定义表格:允许空值或用“n/a”表示

由于我想做聚合,我倾向于将值存储为浮动而不是一直投射它们。你怎么看?

回答

4

SQLite并没有真正的数据类型。它有“存储类”。这对你来说意味着什么。

sqlite> create table test (r real); 
sqlite> insert into test values (123.456); 
sqlite> insert into test values (654.321); 
sqlite> insert into test values ('n/a'); 

SQLite接受'n/a'没有错误或警告。

sqlite> select * from test; 
r 
---------- 
123.456 
654.321 
n/a 

存储字符串文字 'N/A' 声明为真正的一列。

sqlite> select sum(r) from test; 
sum(r) 
---------- 
777.777 

总结工作没有任何特别的努力。

无论这是一件好事还是一件坏事都值得商榷。但它 SQLite是如何设计的。

4

一个数字列和"n/a"null翻译最适合我。

  • 数字值可以合理相比号码(这是更大的,'3''25',相对于325)。
  • 数值可以合理地加总,平均等
  • 是随机垃圾(不是数字,而不是'n/a')潜入您的数据,你马上看到它。
  • 该表格较小,数字列的索引较小;如果数据很多并且RAM很少,这可能很重要。
+0

非常好的理由为什么存储为数字(从而允许值在空值)是有道理的。 – 2013-05-12 19:02:36