8.1.5 键

我们必须有一个能够识别每一个特定客户的方法。通常,名称并不是一个很好的方法——如果名字很普通,我们就会明白为什么。以Customers表中的Julie Smith客户为例,当打开电话本的时候,会发现里面同样的名字不计其数。

我们可以通过几种不同的方法来区分Julie。例如,如果Julie Smith所住的地方只有一个Julie Smith,可以用"Julie Smith,of 25 Oak Street,Airport West"来识别。但是,它太冗长,听起来像法律措辞,而且当在表中显示时,也需要几列的宽度。

在这个例子中我们已经做的,以及可能要在应用程序中做的就是为每个客户分配一个唯一的CustomerID。其原则与我们拥有唯一的银行账号或俱乐部会员号一样,它使得将详细信息存到数据库的操作更为方便。手动分配的身份标识号能够保证唯一性。对于一些真实信息的组合,同样也具有这个特性。

表中的标志列称为键或主键。一个键可能由几列组成。例如,如果选择将"Julie Smith,of 25 Oak Street,Airport West"来标识Julie,那么该键包含名字、地址、城市3列,而且这样还不能保证其唯一性。

通常,数据库由多个表组成,可以使用键作为表格之间的引用。在图8-2中,我们在原数据库中增加了一个表格。这个表格存储了客户的订单。Orders表中每一行表示一个订单,该订单由一个客户所预订。我们知道客户是谁,因为存储了他们的CustomerID。例如,我们可以在Orders表中OrderID值为2的行中看到该订单,进而看到订购该订单的客户的CustomerID值为1。如果再查看Customers表,可以看到CustomerID值为1的行表示Julie Smith。

8.1.5 键 - 图1

图 8-2 Orders表格中每个订单都对应于Customers表中的一个客户

这种关系用关系数据库术语来描述就是外键。CustomerID是Customers表的主键,但当它出现在其他表,例如Orders表中的时候,我们就称它为外键。

读者可能会奇怪为什么会有两个不同的表,为什么不将Julie的地址和订单放到一个表中呢?下面,我们将详细探讨这个问题。