理解列的最好办法是将数据库表想象为一个网格。网格中每一列存储着一条特定的信息。例如,在顾客表
中,一个列存储着顾客编号,另一个列存储着顾客名,而地址、城市、州以及邮政编码全都存储在各自的
列中。
分解数据 正确地将数据分解为多个列极为重要。例如,城市、
州、邮政编码应该总是独立的列。通过把它分解开,才有可
能利用特定的列对数据进行分类和过滤(如,找出特定州或
特定城市的所有顾客)。如果城市和州组合在一个列中,则
按州进行分类或过滤会很困难。
数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,如果列中存储的为数
字(或许是订单中的物品数),则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、
金额等,则应该用恰当的数据类型规定出来。
数据类型(datatype) 所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存
储的数据。
数据类型限制可存储在列中的数据种类(例如,防止在数值字段中录入字符值)。数据类型还帮助正确地
分类数据,并在优化磁盘使用方面起重要的作用。因此,在创建表时必须对数据类型给予特别的关注。
数据类型兼容 数据类型及其名称是 SQL 不兼容的一个主要
原因。虽然大多数数据类型得到一致的支持,但许多更为高
级的数据类型却不是这样。更糟的是,我们偶然会发现相同
的数据类型在不同的 DBMS 中具有不同的名称。对此用户毫
无办法,重要的是在创建表结构时要记住这些差异。
1.1.4 行
表中的数据是按行存储的;所保存的每个记录存储在自己的行内。如果将表想象为网格,网格中垂直
的列为表列,水平行为表行。
例如,顾客表可以每行存储一个顾客。表中的行编号为记录的编号。
行(row) 表中的一个记录。
是记录还是行? 你可能听到用户在提到行(row)时称其为
数据库记录(record)。在很大程度上,这两个术语是可以互
相交换使用的,但从技术上说,行才是正确的术语。
1.1.5 主键
表中每一行都应该有可以唯一标识自己的一列(或一组列)。一个顾客表可以将顾客编号用于此目的,
而包含订单的表可以使用订单 ID。雇员表可以使用雇员 ID 或雇员社会保险号。