我有一个定义表格的简单设计问题。我必须读取数字值但也可以是“n/a”的字符串。现在我有两个选择。我可以将一列定义为 varchar 并允许“n/a”,或者我将此类列定义为数字 ( float ) 并允许空值。
由于我想做聚合,我倾向于将值存储为浮点数,而不是一直转换它们。你怎么看?
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 的设计方式。
数字列和"n/a"
→null
翻译对我来说看起来最好。
'3'
或'25'
,与3
和相反25
)。'n/a'
)是否会潜入您的数据,您会立即看到它。