如何定义数据库表之间的关系(上)

文章作者 100test 发表时间 2007:03:14 13:54:11
来源 100Test.Com百考试题网


 在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据表中。一旦完成了对这些数据元素的分类,对于数据的操作将依赖于这些数据表之间的关系,通过这些数据表之间的关系,就可以将这些数据通过某种有意义的方式联系在一起。例如,如果你不知道哪个用户下了订单,那么单独的订单信息是没有任何用处的。但是,你没有必要在同一个数据表中同时存储顾客和订单信息。你可以在两个关系数据表中分别存储顾客信息和订单信息,然后使用两个数据表之间的关系,可以同时查看数据表中每个订单以及其相关的客户信息。如果正规化的数据表是关系型数据库的基础的话,那么这些数据表之间的关系则是建立这些基础的基石。

 出发点
  下面的数据将要用在本文的例子中,用他们来说明如何定义数据库表之间的关系。通过boyce-codd normal form(bcnf)对数据进行正规化后,产生了七个关系表: MeAK*r3Z%L!P$[本资料来源于贵州学习网IT认证ORACLE/CIW认证 http://Www.gzu521.com]MeAK*r3Z%L!P$

books: {title*, isbn, price}
authors: {firstname*, lastname*}
zipcodes: {zipcode*}
categories: {category*, description}
publishers: {publisher*}
states: {state*}
cities: {city*}

 现在所需要做的工作就是说明如何在这些表之间建立关系。

 关系类型
  在家中,你与其他的成员一起存在着许多关系。例如,你和你的母亲是有关系的,你只有一位母亲,但是你母亲可能会有好几个孩子。你和你的兄弟姐妹是有关系的——你可能有很多兄弟和姐妹,同样,他们也有很多兄弟和姐妹。如果你已经结婚了,你和你的配偶都有一个配偶——这是相互的 ——但是一次只能有一个。在数据表这一级,数据库关系和上面所描述现象中的联系非常相似。有三种不同类型的关系:

 一对一:在这种关系中,关系表的每一边都只能存在一个记录。每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录。这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要么你没有结婚没有配偶。大多数的一对一的关系都是某种商业规则约束的结果,而不是按照数据的自然属性来得到的。如果没有这些规则的约束,你通常可以把两个数据表合并进一个数据表,而且不会打破任何规范化的规则。

 一对多:主键数据表中只能含有一个记录,而在其关系表中这条记录可以与一个或者多个记录相关,也可以没有记录与之相关。这种关系类似于你和你的父母之间的关系。你只有一位母亲,但是你母亲可以有几个孩子。

 多对多:两个数据表里的每条记录都可以和另一个数据表里任意数量的记录(或者没有记录)相关。例如,如果你有多个兄弟姐妹,这对你的兄弟姐妹也是一样(有多个兄弟姐妹),多对多这种关系需要引入第三个数据表,这种数据表称为联系表或者连接表,因为关系型系统不能直接实现这种关系。



相关文章


Oracle回滚段表空间文件丢损的处理
忘却Oracle的5个方面
利用数据库效用给UNIX命名管道
如何定义数据库表之间的关系(下)
如何定义数据库表之间的关系(上)
Oracle10G数据库软硬件环境的要求(2)
小心,Oracle数据库访问限制绕过漏洞
诊断性能问题:使用扩展SQL跟踪数据(3)
详细介绍:Oracle9i的各技术特征(1)(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛