Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 定义表格:允许为空或使用“保留”;不适用;_Sql_Sqlite - Fatal编程技术网

Sql 定义表格:允许为空或使用“保留”;不适用;

Sql 定义表格:允许为空或使用“保留”;不适用;,sql,sqlite,Sql,Sqlite,我有一个定义表的简单设计问题。我必须读取字符串,这些字符串是数值,但也可以是“n/a”。现在我有两个选择。我可以将列定义为varchar并允许“n/a”,或者将此类列定义为numeric(float)并允许null 因为我想进行聚合,所以我倾向于将值存储为浮点数,而不是一直强制转换它们。您的意见是什么?一个数字列和“n/A”→ 空翻译对我来说最合适 数值可以作为数字进行合理比较(与3和25相比,数值更大,3和25) 数值可以合理地求和、平均等 如果随机垃圾(不是一个数字,不是一个'n/a')潜

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


因为我想进行聚合,所以我倾向于将值存储为浮点数,而不是一直强制转换它们。您的意见是什么?

一个数字列和
“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的工作原理

      关于为什么存储为数字(从而允许值为空)是有道理的,关于为什么存储为数字(从而允许值为空)是有道理的。