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

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


要记住,authors数据表里的主键是一个基于姓和名两个字段的复合关键字。所以你必须要把这个两个字段都添加到books数据表里。要注意,外键字段名的结尾包含有fk这个后缀。加入这个后缀有助于提高可读性和自我归档。通过名称这种方式来区别外键会使得追踪它们更简单。如果主键和外键的名称不同,这没有关系。

 这里出现了三种关系:books和authors、books和categories,以及books和publishers。这三种关系中所存在的两种问题可能没有那么明显:

 books和authors之间的关系:一本书可以有多个作者。
  books和categories之间的关系:一本书可以被归入多个类。

 这两者的关系是多对多的关系。先前我告诉过你,数据表不能直接实现这样的关系,而需要第三个联系表来实现。(books和publishers的关系是一对多的关系,就像现在所说的,这样是没有问题的。)

 这两个新发现的多对多关系将需要一个联系表来包含来自每个数据表的主键,并将其作为外键。新的联系表是:

booksauthorsmmlink
titlefk (fk) books.title one-to-many
isbnfk (fk) books.isbn one-to-many
firstnamefk (fk) authors.firstname one-to-many
lastnamefk (fk) authors.lastname one-to-many

bookscategoriesmmlink
titlefk (fk) books.title one-to-many
isbnfk (fk) books.isbn one-to-many
categoryfk (fk) categories.category one-to-many

 没有必要更改categories、authors或者publishers数据表。但是,你必须把firstnamefk、lastnamefk和categoryfk这三个外键从books里移走:

books
title (pk)
isbn (pk)
price
publisherfk (fk) publishers.publisher one-to-many

 现在,让我们转到authors数据表上来,它现在有两个字段。每个作者都和zipcodes数据表中的邮政编码的值相关。但是,每个邮政编码会和多个作者相关。要实现这种一对多的关系,就要把zipcodes数据表中的主键添加进authors数据表作为外键:

authors
firstname (pk)
lastname (pk)
zipcodefk (fk) zipcodes.zipcode one-to-many


相关文章


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