关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。
其个实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
规则2.1实体完整性规则若属性a是基本关系r的主属性,则属性a不能取空值。
例如在关系“研究生(导师,专业,研究生姓名)”中,研究生姓名属性为主码(假设研究生不会重名),则“研究生姓名”不能取空值。
实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。例如学生选课关系“选修(学号,课程号,成绩)”中,“学号、课程号”为主码,则“学号”和“课程号”两个属性部不能取空值。
对于实体完整性规则说明如下:
1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如学生关系对应于学生的集合。
2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
3)相应地,关系模型中以主码作为唯一性标识。
4)主码中的属性即主属性不能取空值。所谓空值就是“不知道”或“无意义”的值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。
二、参照完整性(referential integrity)
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就自然存在着关系与关系间的引用。
例:1、学生实体和专业实体可以用下面的关系表示,其中主码用下划线表示:
学生(学号,姓名,专业号,年龄)
专业(专业号,专业名)
这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码“专业号”。显然,学生关系中的“专业号”值必须是确实存在的专业的专业号,即专业关系中有该专业的记录。这也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值。
例2 学生、课程、学生与课程之间的多对多联系可以如下:
学生(学号,姓名,性别,专业,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
规则2.2参照完整性规则若属性(或属性组)f是基本关系是的外码它与基本关系s的主码k相对应(基本关系r和s不一定是不同的关系),则对于r中每个元组在f上的值必须为:
1.或者取空值(f的每个属性值均为空值):
2.或者等于s中某个元组的主码值。
例如,对于例1,学生关系中每个元组的“专业号”值:
1)空值,表示尚未给该学生分配专业;
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中。即被参照关系“专业”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。
对于例2,按照参照完整性规则,“学号”和“课程号”属性也可以取两类值:空值或目标关系中已经存在的值。但由于“学号”和“课程号”是选修天系中的主属性,按照实体完整性规则,它们均不能取空值。
所以选修关系中的“学号”和“课程号”属性实际上只能取相应被参照关系中已经存在的主码值。
三、用户定义的完整性。
任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件,用户定义的完整性就是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满足的语义要求。
例如某个属性必须取唯一值、某些属性值之间应满足一种的函数关系、某个属性的取值范围在0—100之间等。关系模型应提供定义和检验这类完整性的机制,以使用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
前面已经讨论了关系数据库系统的一般概念,介绍了关系数据库的基本概念、关系模型的三个部分,但是还有一个很基本的问题尚未涉及。针对一个具体问题,应该如何构造一个适合于它的数据模式,即应该构造几个关系模式,每个关系由哪些属性组成等。这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题。
实际上设计任何一种数据库应用系统,不论是层次的、网状的还是关系的,都会遇到如何构造合适的数据模式即逻辑结构的问题。由于关系模型有严格的数学理论基础,并且可以向别的数据模型转换,因此,人们就以关系模型为背景来讨论这个问题,形成了数据库逻辑设计的一个有力工具——关系数据库的规范化理论。规范化理论虽然是以关系模型为背景,但是它对于一般的数据库逻辑设计同样具有理论上的意义。
现实世界随着时间在不断地变化,因而在不同的时刻,关系模式的关系也会有所变化。但是,现实世界的许多已有事实限定了关系模式所有可能的关系必须满足一定的完整性约束条件。这些约束或者通过对属性取值范围的限定,或者通过属性值间的相互关连(主要体现于值的相等与否)反映出来。
后者称为数据依赖,它是数据模式设计的关键,关系模式应当刻划这些完整性约束条件。
4.1 函数依赖。
一、数据依赖。
属性之间的联系称为数据依赖。
其中有两种最重要的数据依赖,函数依赖和多值依赖。
1.属性之间的关系。
1) 1:1的关系。
对于两个属性a和b,a属性与b属性的取值是一一对应的。例如学号和学生姓名。如果姓名是唯一的,则它们之间的关系是1:1的关系。
2) 1:m(1 to many)的关系。
若两个属性集合a和b,a中的值只与b中某个值相关,而b的一个取值与a中多个值相对应。例如,班级和学生的关系。
3) m:m(m to many)的关系。
一个实体的两个属性集中任何一个值都与另一个属性集中多个值相对应。例如,学生号与课程号之间,任何一个学生可以选多门课程,任何一个课程可以由多个学生选择。
二、函数依赖。
对于关系两个属性a和b,若a中每一个取值,都有b中唯一的值与之对应,则称b函数依赖于a,也可以说a决定b。a→b
例如,学号和班级,学号→班级。学号决定班级,班级函数依赖于学号。
三、函数依赖和属性的关系。
我们在前面讨论的三种关系,并不是每一种关系都存在函数依赖,设有一个关系r,存在两个属性a和b。则有下列的规则:
1) 若a和b之间是 1:1的关系,则有a→b和b→a,即a和b相互依赖。
2) 若a和b之间是m:1的关系,则有函数依赖a→b。
3)若a和b之间是m:m的关系,则有不存在函数依赖。
如学生关系,可有学号(sno),姓名(sname),系名(sdept)等几个属性。
由于一个学号只对应一个学生,一个学生只在一个系学习。因而当“学号”值确定之后,姓名和该生所在系的值也就被唯一地确定了。
就象自变量x确定之后,相应的函数值f(x)也就唯一地确定了一样,我们说sno函数决定sname和sdept,或者说sname,sdept函数依赖于sno,记为∶
sno→sname
sno→sdept
例如:现在要建立一个数据库来描述学生的一些情况,面临的对象有;学生(用学号sno描述),系(系名sdept描述),系负责入(用其姓名mn描述),课程(用课程名cname描述)和成绩(grade)。于是得到一组属性。
u = 现实世界的已知事实告诉我们∶
1)一个系有若干学生,但一个学生只属于一个系;
2)一个系只有一名(正职)负责人;
3)一个学生可选修多门课程,每门课程有若干学生选修;
3) 每个学生学习每一门课程有一个成绩。
于是得到u上的一组函数依赖:
f = 我们就得到了一个描述学校的数据库模式s〈u,f〉:
u = f =
4.2关系的规范化。
设计一个的关系数据库,首先要定义一组关系,这组关系定义的好,系统的性能就好,定义的差,系统的性能就差。一般的设计原则是:
1) 数据的冗余度尽量低。
2) 不出现插入、删除等操作异常;
3) 能尽量如实反映现实世界的实际情况,而且又易懂。
这些原则要求关系数据库中的关系应满足一定的要求。我们把满足不同要求的关系称为范式。又按照要求条件的宽严的不同逐级分为第一范式、第二范式、第三范式等,并用1nf、2nf、3nf表示。
下面看几个关系:
产品关系:学生选课关系。
学生选课存在如下几个问题:
1)如果一个系刚成立还没有学生,或学生还没有安排课程,则无法将这个系的信息存入数据库,称为插入异常;
2)如果一个系的学生全都毕业了,需要删除学生及学生选课信息,但同时也将该系的信息删除了,这称为删除异常;
3)该关系中有一个学生选课,相关系的信息就要存储一次,冗余太大,容易造成系及系的负责人信息的不一致。
上述问题的出现是因为在学生关系中存在数据依赖。该关系的关键字是sno+cno,但属性dept(所属系)和mn(系主任)仅与sno(学号)有关,而与cno(课程号)无关,即dept和mn仅函数依赖于属性sno。
因此,要设计出一个好的数据库,必须先要搞清楚属性间的数据依赖关系。
要求关系数据库中的关系应满足一定的要求。我们把满足不同要求的关系称为范式。又按照要求条件的宽严的不同逐级分为第一范式、第二范式、第三范式、bc范式等,并用1nf、2nf、3nf、bcnf表示。
关系的规范化,就是将一个低一级的范式,转化为一组高一级范式的过程。这种转化过程就是关系的规范化。
1. 第一范式(1nf)
关系中每一个属性都是原子属性,就是说关系中不允许出现重复的属性,关系中的每个分量必须是不可分割的。
数据库模拟题 4
数据库第四次作业分组查询 习题要求by 邵永成。1 查询病人表,要求显示最大年龄值 最小年龄值 平均年龄值。select max 年龄 as最大年龄,min 年龄 as最小年龄,g 年龄 as平均年龄from病人表。2 查询病人表,要求统计在 太平洋保险公司 投保的病人数。select count ...
数据库第2次作业
第2章高级数据模型。学号 2014112208 姓名 侯正罡班级 软件4班。一。简答题 每小题4分,共40分 1.用erm作为工具去描述现实系统时,现实系统中的数据本身用什么描述,数据联系又用什么去描述?1 数据本身用实体和实体型去表述。2 数据联系用联系和联系型描述。2.erm为何没有数据操纵的内...
数据库第3次作业
二 填空题。1.数据库的设计阶段。2.共享磁盘结构。3.载入 4.数据设计。5.物理设计。6.结构冲突。7.反复性 试探性 分步进行。8.属性和码。三 名词解释题。1.是各类数据描述的集合。对数据库设计来说,数据字典是进行详细的数据收集和数据分析所获得的主要结果,在数据库中占重要地位。数据字典通常包...