我有一个用于定义表格的简单设计问题。我必须读取数字值的字符串,但也可以是“n/a”。现在我有两个选择。我可以将列定义为varchar并允许“n/a”,或者我将这样的列定义为numeric(float)并允许空值。定义表格:允许空值或用“n/a”表示
由于我想做聚合,我倾向于将值存储为浮动而不是一直投射它们。你怎么看?
我有一个用于定义表格的简单设计问题。我必须读取数字值的字符串,但也可以是“n/a”。现在我有两个选择。我可以将列定义为varchar并允许“n/a”,或者我将这样的列定义为numeric(float)并允许空值。定义表格:允许空值或用“n/a”表示
由于我想做聚合,我倾向于将值存储为浮动而不是一直投射它们。你怎么看?
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'
)潜入您的数据,你马上看到它。
非常好的理由为什么存储为数字(从而允许值在空值)是有道理的。 – 2013-05-12 19:02:36