Sql 定义表格:允许为空或使用“保留”;不适用;
我有一个定义表的简单设计问题。我必须读取字符串,这些字符串是数值,但也可以是“n/a”。现在我有两个选择。我可以将列定义为varchar并允许“n/a”,或者将此类列定义为numeric(float)并允许nullSql 定义表格:允许为空或使用“保留”;不适用;,sql,sqlite,Sql,Sqlite,我有一个定义表的简单设计问题。我必须读取字符串,这些字符串是数值,但也可以是“n/a”。现在我有两个选择。我可以将列定义为varchar并允许“n/a”,或者将此类列定义为numeric(float)并允许null 因为我想进行聚合,所以我倾向于将值存储为浮点数,而不是一直强制转换它们。您的意见是什么?一个数字列和“n/A”→ 空翻译对我来说最合适 数值可以作为数字进行合理比较(与3和25相比,数值更大,3和25) 数值可以合理地求和、平均等 如果随机垃圾(不是一个数字,不是一个'n/a')潜
因为我想进行聚合,所以我倾向于将值存储为浮点数,而不是一直强制转换它们。您的意见是什么?一个数字列和
“n/A”
→ <代码>空翻译对我来说最合适
- 数值可以作为数字进行合理比较(与
和3
相比,数值更大,25
和3
)25
- 数值可以合理地求和、平均等
- 如果随机垃圾(不是一个数字,不是一个
)潜入您的数据,您会立即看到它'n/a'
- 表越小,数字列的索引越小;如果数据多且RAM稀缺,则这一点非常重要
“n/A”
→ <代码>空翻译对我来说最合适
- 数值可以作为数字进行合理比较(与
和3
相比,数值更大,25
和3
)25
- 数值可以合理地求和、平均等
- 如果随机垃圾(不是一个数字,不是一个
)潜入您的数据,您会立即看到它'n/a'
- 表越小,数字列的索引越小;如果数据多且RAM稀缺,则这一点非常重要
- 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”存储在声明为real的列中
sqlite> select sum(r) from test;
sum(r)
----------
777.777
聚合无需任何特殊努力即可工作
这是件好事还是坏事值得商榷。但这就是SQLite的工作原理 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”存储在声明为real的列中
sqlite> select sum(r) from test;
sum(r)
----------
777.777
聚合无需任何特殊努力即可工作
这是件好事还是坏事值得商榷。但这就是SQLite的工作原理 关于为什么存储为数字(从而允许值为空)是有道理的,关于为什么存储为数字(从而允许值为空)是有道理的。