1.4 主键和外键
请留意每个表的第1列:即Customers表中的CustomerID和Orders表中的OrderID。这些列通常称为主键(primary key)。主键之所以有用和有必要,有两个原因。首先,它们使你能够唯一地标识表中一个单独的行。例如,如果想要查找Bob Davis这一行,我们可以只使用CustomerID列来获取数据。主键还确保了唯一性。当指定CustomerID列作为主键时,就保证了表中的该列针对每一行都拥有一个唯一的值。即使在数据库中有两个不同的人都叫做Bob Davis,这两行的CustomersID列的值也会不同。
在这个示例中,主键列的值没有任何特殊含义。在Customers表中,CustomerID列在表的3行中的值分别为1、2和3。我们会经常以这样的一种方式来设计数据库的表:当表中增加新的行时,主键列会自动生成顺序的编号。通常,我们把这种设计特性叫做自增型(auto-increment)。
使用主键的第2个原因是,可以很容易地把一个表和另一个表进行关联。在这个例子中,Orders表中的CustomerID列,指向了Customers表中对应的一行。查看一下Orders表的第4行,会发现其CustomerID列的值是3。这就意味着,CustomerID为3的客户下了这个订单,这位客户名为Connie King。在表之间使用共同的列,这是关系型数据库中的一项基本的设计要素。
除了可以指向Customers表,还可以把Orders表中的CustomerID列指定为外键(foreign key)。我会在第18章中详细介绍外键,在这里只需要知道:定义外键是为了要确保这一列有一个有效的值。例如,我们希望Orders表中的CustomerID列的值,必须是Customer表中真正存在的一个CustomerID值。指定一列作为外键,就可以实现这种限制。