特别说明
数据库的正规化是关系型数据库理论的基础。随着数据库的正规化工作的完成,数据库中的各个数据表中的数据关系也就建立起来了。
在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据表中。一旦完成了对这些数据元素的分类,对于数据的操作将依赖于这些数据表之间的关系,通过这些数据表之间的关系,就可以将这些数据通过某种有意义的方式联系在一起。例如,如果你不知道哪个用户下了订单,那么单独的订单信息是没有任何用处的。但是,你没有必要在同一个数据表中同时存储顾客和订单信息。你可以在两个关系数据表中分别存储顾客信息和订单信息,然后使用两个数据表之间的关系,可以同时查看数据表中每个订单以及其相关的客户信息。如果正规化的数据表是关系型数据库的基础的话,那么这些数据表之间的关系则是建立这些基础的基石。
出发点
下面的数据将要用在本文的例子中,用他们来说明如何定义数据库表之间的关系。通过Boyce-Codd Normal Form(BCNF)对数据进行正规化后,产生了七个关系表:
Books: {Title*, ISBN, Price}
Authors: {FirstName*, LastName*}
ZIPCodes: {ZIPCode*}
Categories: {Category*, Description}
Publishers: {Publisher*}
States: {State*}
Cities: {City*} |
现在所需要做的工作就是说明如何在这些表之间建立关系。
关系类型
在家中,你与其他的成员一起存在着许多关系。例如,你和你的母亲是有关系的,你只有一位母亲,但是你母亲可能会有好几个孩子。你和你的兄弟姐妹是有关系的——你可能有很多兄弟和姐妹,同样,他们也有很多兄弟和姐妹。如果你已经结婚了,你和你的配偶都有一个配偶——这是相互的——但是一次只能有一个。在数据表这一级,数据库关系和上面所描述现象中的联系非常相似。有三种不同类型的关系:
一对多:主键数据表中只能含有一个记录,而在其关系表中这条记录可以与一个或者多个记录相关,也可以没有记录与之相关。这种关系类似于你和你的父母之间的关系。你只有一位母亲,但是你母亲可以有几个孩子。