1

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

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

4

2 回答 2

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 的设计方式。

于 2013-05-12T20:13:39.043 回答
4

数字列和"n/a"null翻译对我来说看起来最好。

  • 数值可以合理地作为数字进行比较(更大,'3''25',与3和相反25)。
  • 数值可以合理地求和、平均等。
  • 随机垃圾(不是数字,不是'n/a')是否会潜入您的数据,您会立即看到它。
  • 表更小,数字列的索引更小;如果数据很多而 RAM 稀缺,这可能很重要。
于 2013-05-12T18:46:29.560 回答