文档库

最新最全的文档下载
当前位置:文档库 > 关系数据模型1

关系数据模型1

2.1 关系数据模型 2.2 E-R 模型到关系模型的转换 2.3 关系模型的三类完整性约束

2.4 案例1:活期储蓄管理系统数据库设计

2.1.1 关系模型的结构

关系(relationship)

关系是满足一定条件的二维表。表中的一行称为关系的一个元组,用来存储事物的一个实例;表中的一列称为关系的一个属性,用来描述实体的某一特征。表是由一组相关实体组成的集合。所以,表和实体集这两个词常常可以交替使用。

关系数据模型1

关系是一个行与列交叉的二维表,每一列(属性)的所有数据都是同一种数据类型的,每一列都有惟一的列名,列在表中的顺序无关紧要;表中的任意两行(元组)不能相同,行在表中的顺序也无关紧要。

关系的特点:

?关系的每一行定义实体集的一个实体,每一列定义实体的一个属性。

?每一行必须有一个主码,主码是一个属性组(可以是一个属性),它能惟一的标识一个实体。

?每一列表示一个属性,且列名不能重复。

?列的每个值必须与对应属性的类型相同。

?列有取值范围,称为域。

?列是不可分割的最小数据项。

?行、列的顺序对用户无关紧要。

关系中的术语

?候选码(Candidate Key)

若关系中的某一属性组(或单个属性)的值能惟一的标识一个元组,则称该属性组(或属性)为候选码。

选择一个候选码作为关系的主码。

?主属性(Prime Attribute)和非主属性

关系中包含在任何一个候选码中的属性称为主属性。不包含在任何一个候选码中的属性称为非主属性。

E-R模型可以向现有的各种数据库模型转换,对不同的数据库模型有不同的转换规则。这里只讨论E-R模型向关系模型的转换方法。E-R模型向关系模型转换的规则是:

实体

一个实体类型转换成一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。

E-R模型向关系模型转换时,除了将实体转换为关系外,还要考虑如何将实体之间的联系正确的转换为关系。

一对一联系(1:1)

一般是将联系与任意一端实体所对应的关系模式合并,需要在该关系模式的属性中加入另一个实体的码和联系本身的属性。

一对多(1:n)联系

一般是将该联系与n端实体所对应的关系模式合并。合并时需要在n端实体的关系模式的属性中加入1端实体的码和联系本身的属性。

2.3.1 实体完整性

实体完整性规则:若属性A是关系R的主属性,则A不能取空值。

2.3.2 参照完整性规则

外码和参照关系

设F是基本关系R的一个或一组属性,但不是关系R的主码(或候选码)。如果F与基本关系S的主码KS相对应,则称F是基本关系R的外码,并称基本关系R为参照关系,称基本关系S为被参照关系。

例如:在授课系统的关系模型中:

课程(课号,课名,学分)课号关系课程的主码

教师(工号,姓名,职称,课号)课号是关系教师的外码

参考书(书号,书名,课号)

关系教师是参照关系,关系课程是被参照关系。

参照完整性规则

参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码KS相对应,则对于R中的每个元组在F上的值必须满足:或者取空值(F的每个属性均为空值),或者等于S中某个元组的主码值。

例如,在授课系统的关系模型中,关系教师中的外码“课号”只能是下面两类值:

(1) 空值。表示还未给该教师安排课。

(2) 非空值,但此值必须为被参照关系课程中某一门课程的“课号”。

注意:在实际应用中,外码不一定与对应的主码同名。

在关系数据库中,表与表之间的联系是通过公共属性实现的。这个公共属性往往是一个表的主码,同时是另一个表的外码。

2.3.3 用户定义的完整性

用户定义的完整性就是针对某一具体要求来定义的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。

例如,某个属性必须取惟一值;某些属性之间应满足一定的函数关系;某个属性的取值范围在0—400之间等。关系模型应提供定义和检验这类完整性的机制,以便系统用统一的方法处理它们,而不需要由应用程序来承担这一功能。

所以,用户定义的完整性通常是定义属性取值的约束,即对属性的值域的约束。对属性的值域的约束也称为域完整性规则是指对关系中属性取值的正确性限制。包括数据类型、精度、取值范围、是否允许空值等。

2.3.4 完整性规则检查

为了维护数据库中数据的完整性,在对关系数据库执行插入、删除和修改操作时,就要检查是否满足以上三类完整性规则。

当执行插入操作时

首先检查实体完整性规则,插入行的主码属性上的值,是否已经存在。若不存在,可以执行插入操作;否则不可以执行插入操作。

再检查参照完整性规则,如果是向被参照关系插入,不需要考虑参照完整性规则;如果是向参照关系插入,插入行在外码属性上的值是否已经在相应被参照关系的主码属性值中存在。若存在,可以执行插入操作;否则不可以执行插入操作,或将插入行在外码属性上的值改为空值后再执行插入操作(假定该外码允许取空值)。

最后检查用户定义完整性规则,检查被插入的关系中是否定义了用户定义完整性规则,如果定义了,检查插入行在相应属性上的值是否符合用户定义完整性规则。若符合,可以执行插入操作;否则不可以执行插入操作。

当执行删除操作时

一般只需要检查参照完整性规则。如果是删除被参照关系中的行,则应检查被删除行在主码属性上的值是否正在被相应的参照关系的外码引用,若没被引用,可以执行删除操作,若正在被引用,有三种可能的做法:不可以执行删除操作(拒绝删除),或将参照关系中相应行在外码属性上的值改为空值后再执行删除操作(空值删除),或将参照关系中相应行一起删除(级联删除)。

当执行修改操作时

因为修改操作可看成先执行删除操作,再执行插入操作,因此是上述两种情况的综合。