SQL Server2000 表关系
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
可以在数据库关系图中的表间创建关系以显示某个表中的列如何链接到另一表中的列。
在关系数据库中,关系能防止冗余的数据。例如,如果正在设计一个数据库来跟踪有关书的信息,而每本书的信息(如书名、出版日期和出版商)都保存在一个名为 titles 的表中。同时还有一些想保存的有关出版商的信息,例如出版商的电话号码、地址和邮政编码。如果将所有这些信息都保存在 titles 表中,则对于某个出版商出版的每本书,出版商的电话号码将是重复的。 一个更好的解决方案是,单独在一个名为 publishers 的表中只保存一次出版商信息。然后在 titles 表中设置指针,以引用 publishers 表中的项。 若要确保数据同步,可以在 titles 表和 publishers 表之间强制引用完整性。引用完整性关系能确保某个表中的信息与另一个表中的信息相匹配。例如,titles 表中的每个书名必须和 publishers 表的特定出版商相关联。不能在数据库中添加数据库中不存在的出版商的书名。 1.表关系类型 关系是通过匹配键列中的数据而工作的,而键列通常是两个表中具有相同名称的列。在大多数情况下,关系将一个表中为每个行提供唯一标识符的主键与另一个表中外键内的项相匹配。例如,通过在 titles 表的 title_id 列(主键)和 sales 表的 title_id 列(外键)之间创建一个关系,可以使销售额与特定的销售书名相关联。 表与表之间存在三种类型的关系:一对多关系、多对多关系、一对一关系。所创建的关系类型取决于相关联的列是如何定义的。 一对多关系 一对多关系是最常见的关系类型。在这种关系类型中,表 A 中的行可以在表 B 中有许多匹配行,但是表 B 中的行只能在表 A 中有一个匹配行。例如,publishers 表和 titles 表是一对多的关系:每一个出版商可出版许多书,但每一本书只能有一个出版商。 如果在相关列中只有一列是主键或具有唯一约束,则创建的是一对多关系。 一对多关系中的主键方由一个键符号表示。关系中的外键方由一个无穷大符号表示。 多对多关系 在多对多关系中,表 A 中的一行可与表 B 中的多行相匹配,反之亦然。通过定义称为连接表的第三方表创建这样的关系,该连接表的主键包括表 A 和表 B 中的外键。例如,authors 表和 titles 表是多对多关系,该关系通过从这些表中的每个表与 titleauthors 表的一对多关系定义。titleauthors 表的主键由 au_id 列(authors 表的主键)和 title_id 列(titles 表的主键)组成。 一对一关系 在一对一关系中,表 A 中的一行最多只能与表 B 中的一行相匹配,反之亦然。如果两个相关列都是主键或具有唯一约束,则创建的是一对一关系。 这种关系不常见,因为这种方式的大部分相关信息都在一个表中。使用一对一关系可以是为了: ·分割一个含有许多列的表。 ·出于安全考虑而隔离表的某一部分。 ·存储可以很容易删除的临时数据,只需删除表即可删除这些数据。 ·存储只应用于主表子集的信息。 一对一关系的主键方由键符号表示。外键方也由键符号表示。 2.引用完整性概述 引用完整性是一种规则系统,这些规则可确保相关表中各行间关系的有效性,并确保不会意外删除或更改相关的数据。 在强制引用完整性时必须遵循以下规则: ·如果在相关表的主键中不存在某个值,则不能在相关表的外键列中输入该值。但是,可以在外键列中输入空值。例如,在 employee 表中没有包括某职员,则不能指明分配给该职员的工作,但是可在 employee 表的 job_id 列输入空值来指明没有给该职员分配工作。 ·如果在相关表中存在与某行匹配的行,则不能从主表中删除该行。例如,如果在 employee 表中给多个职员分配了由 jobs 表中某行所代表的工作时,则不能删除该行。 ·当主表的某行有相关行时,则不能更改主键值。例如,如果将 jobs 表中的一项工作分配给某职员,则不能从 employee 表中删除该职员。 当满足下述所有条件时,可以设置引用完整性: ·主表中相匹配的列是主键或具有唯一约束 。 ·相关列具有相同的数据类型和长度。 ·两个表属于同一个数据库。 该文章在 2011/3/14 13:55:31 编辑过 |
关键字查询
相关文章
正在查询... |