代码之家  ›  专栏  ›  技术社区  ›  user113476

为什么在创建数据库表时需要这样的特定数据类型?

  •  3
  • user113476  · 技术社区  · 15 年前

    采用以下create table语句:

    create table fruit
    {
      count int,
      name varchar(32),
      size float
    }
    

    为什么不使用“string”、“number”、“boolean”或更好的数据类型,而不必指定任何数据类型。

    有这种特定数据类型的技术原因是什么?(与一般或无数据类型相反)

    10 回复  |  直到 15 年前
        1
  •  4
  •   womp    15 年前

    想象一下,一张表中有2000万行,其中有一个int列,所有的数字都是1到10。

    如果你用耳鸣的话,它会 1字节 . 如果使用常规int,则需要 4字节 . 这是磁盘空间的四倍, 磁盘空间增加60 MB .

    理论上,您可以设计一个数据库引擎来“智能配置”一个表,但是想象一下我们的理论表,突然数据库决定需要为列中的数据分配更多的字节。整个表需要重新分页,当引擎重新构造表时,性能可能会慢到爬行几个小时。 有太多的边缘情况和方法可以让它出错,因此保持在自动配置之上比首先正确地设计应用程序要做更多的工作。

        2
  •  3
  •   Daniel A. White    15 年前

    它设置了一个排序和索引策略,并强制数据完整性。

    想象一下。

    MyNumberField作为通用字段:“1234”,13,35,“1234afgas”

    为什么这些字符串中有一些,为什么“1234afgas”中有字母?

    对于类型约束,不允许这样做。

        3
  •  3
  •   SQLMenace    15 年前

    因为尺寸和存储空间不同

    tinyint=1字节

    smallint=2字节

    int=4字节

    bigint=8字节

    因此,如果您知道只需要存储到一个特定的范围,那么就不需要使用bigint,并且每行存储额外的字节会产生开销。

    字符串(char、varchar等)的保存方式相同

    还有内置的约束…无法将字母A存储在in t中…数据将是干净的。

        4
  •  2
  •   rayd09    15 年前

    您不仅告诉数据库系统如何使用数据:字符串、布尔值、数字。您还将告诉数据库要使用哪种内部表示。这对于空间、索引和性能来说很重要。

        5
  •  2
  •   mynameiscoffey    15 年前

    为了增加其他人发布的内容,数据完整性也存在一个巨大的问题。假设您将值“1”存储到数据库中,如果将其视为真,则数值为1,字符串“1”…

    如果两列的值为“1”,那么col1+col2等于数字2还是字符串“11”?

        6
  •  1
  •   Gabriel Magana    15 年前

    除了已经说过的以外,还有一些数据库不需要数据类型,例如sqlite( http://www.sqlite.org/ )

        7
  •  0
  •   Bill    15 年前

    有一些数据库没有输入,想到的是IBM的Universe DB(又名pick)。使用该数据库,所有字段都是字符串类型,您可以通过“字典”定义它们的使用方式。

    在广泛使用了强类型数据库和Universe之后,从编程的角度来看,我偏向于强类型数据库。

        8
  •  0
  •   Arthur Thomas    15 年前

    同样的问题基础可以在任何地方提出。为什么在课堂上有类型?这是对数据的限制和期望。您希望得到X类型,这样您就可以处理X类型。您不希望处理无限的可能性,并且在每次处理一段数据时都要进行大量的类型检查。

    类型(无论是基元类型还是创建的类型)用于定义要保留的结构。也就是说,n是x型,你可以做x型能做的所有事情。

    例如,你是说,我正在处理一个整数,它可能在某个数字范围内——X到X,而大整数可能在更大的数字范围内——Z到Z(作为一个具体的例子)。使用预期将在这些范围内下降。

    正如其他人提到的,您还定义了如何在较低的级别存储信息。表示您有整数的事件在某种程度上是从机器抽象出来的。

        9
  •  0
  •   Peter Booster    15 年前

    除了存储之外,某些数据类型也是 约束类型 例如,如果您知道某个帐号正好可以容纳8个字符,那么在类型中定义该帐号是您能做的最符合逻辑和性能的事情。(例如NChar(8)

    您正以这种方式立即在字段类型中设置域(或域的一部分,可以通过其他约束进一步细化)。

        10
  •  0
  •   Tyler McHenry    15 年前

    数据库的主要功能之一是能够高效地对大量数据执行操作。对于数据类型非常具体会增加数据库引擎对其存储的数据所能承担的事情的数量。因此,它必须执行较少的计算,运行速度更快,并且可以避免分配不需要的存储,这使得数据库更小,因此速度更快。

    数据库的另一个主要功能是确保数据完整性。指定字段中应存储的数据类型越精确,意外存储错误数据的可能性就越小。这类似于为什么C编译器对您编写的代码如此挑剔:您应该更喜欢处理编译时错误而不是运行时错误。