知识回顾
1.三级模式和两级映像
三级模式:
- 外模式→ (程序员)
- 模式 → ( DBA )
- 内模式→ (DBMS)
两级映像:
- 外模式-模式映像
- 模式-内模式映像
2.数据库系统的数据结构
层次结构——层次模型、网状结构——网状模型、关系结构——关系模型
关系模型是数据模型中最重要的模型。用二维表格结构表示实体与实体之间的联系的数据模型称为关系模型。在关系模型中,操作的对象和操作结果都是二维表。
支持关系模型的数据库管理系统称为关系数据库管理系统。
一、关系的定义
1.关系的数学定义
域:一组具有相同数据类型的值的集合。
笛卡尔积:设D1,D2,…,Dn为任意域,定义D1,D2,…,Dn的笛卡尔积为:D1×D2×…×Dn={(d1,d2,…,dn)|di Di, i=1,2,…,n}
2.关系
关系:D1×D2×…×Dn中有关系的行形成的子集叫做D1×D2×…×Dn上的一个关系(Relation),用R(D1,D2 ,…,Dn)表示。(R表示关系名,n表示关系的目或度,关系中有N个域,我们称之为N元关系)
二、关系的性质(常考)
关系数据库要求关系必须是具有以下性质:
- (1)在同一个关系中,同一个列的数据必须是同一种数据类型。(动物的集合、食物的集合)
- (2)在同一个关系中,不同的列的数据可以是同一种数据类型,但各属性名必须是互不相同。
- (3)同一个关系中,任意两个元组(行)都不能完全相同。
- (4)在同一个关系中,列的次序无关紧要,即列的排列顺序是不分先后的。
- (5)在同一个关系中,元组的位置无关紧要,即行的排行不分先后。
- (6)关系中的每个属性必须是单值,即不可再分,这就要求关系的结构不能嵌套。
- 这是关系应满足的最基本的条件。
例题:
1.在下列选项中,( A )不是基本关系的性质。
A.不同列应有不同的数据类型 B.不同列应有不同的列名
C.行的顺序可以任意 D.列的顺序可以任意
2.关系数据库中对关系的性质表述正确的是( C )。
A.联系紧密的数据项可嵌套表示
B.同一列数据项不一定有相同的数据类型
C.行的顺序不必有序排列
D.行的内容可以完全相同
三、关系模型中的重要概念(术语)
内容:关系、元组、属性、域、关系模式、关键字或码、主键或主码、主属性和非主属性、外键或外码等
1.关系
一个关系就是一张二维表,每个关系都有一个关系名,在计算机里,一个关系可以存储为一个文件。
2.元组
二维表中的行称为元组,每一行是一个元组。元组对应存储文件中的一个记录。
3.属性
二维表的列称为属性,每一列有一个属性名,属性值是属性的具体值。属性对应存储文件中的一个字段,属性的具体取值就形成表中的一个个元组。
4.域
域是一组具有相同数据类型的值的集合。(属性的取值范围)
例如:性别(ssex):“男”或“女”(约束);
5.关系模式*
对关系的信息结构及语义限制的描述称为关系模式,用关系名和包含的属性名的集合表示。
例如,学生表的关系模式是:学生(学号,姓名,性别,年龄,入学时间,专业,年级)。
6.关键字或码
在关系的属性中,能够用来唯一标识元组的属性(或属性组合)称为关键字或码(Key)。
7.候选关键字或候选码
如果在一个关系中,存在多个属性(或属性组合)都能用来唯一标识该关系中的元组,这些属性(或属性组合)都称为该关系的候选关键字或候选码,候选码可以有多个。
8.主键或主码
在一个关系的若干候选关键字中,被指定作为关键字的候选关键字称为该关系的主键或主码(Primary Key),一般,我们习惯选择号码作为一个关系的主码。(学号、身份证号、课程号……)
9.主属性和非主属性
在一个关系中,包含在任何候选码中的各个属性称为主属性(对唯一标识元组必不可少);不包含在任一候选码中的属性称为非主属性(对唯一标识元组没有任何帮助)。
10.外键或外码
一个关系的某个属性(或属性组合)不是该关系的主码或只是主码的一部分,却是另一个关系的主码,则称这样的属性为该关系的外键或外码(Foreign Key)。外码是表与表连接的纽带。
四、关系模式的定义
关系数据库中,关系模式是型,关系是值;关系模式是对关系的描述。
1. 关系模式的定义
关系模式可以形式化地表示为:R(U,D,dom,F)
其中:R是关系名;U是组成该关系的属性名集合;D 是属性所来自的域;dom 是属性间域的映象集合;F是属性间的数据依赖关系集合。
关系模式通常可以简记为*:R (U) 或 R (A1,A2,…,An)
其中: R 是关系名,A1,A2,…,An 为属性名。
2.关系、关系模式、关系数据库
1)关系是关系模式在某一时刻的状态或内容。
2)关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
实际应用中,我们常常把关系模式和关系统称为关系
3)关系数据库就是采用关系模型的数据库。在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
例题:
1、在关系模型中,一个候选码( C )。
A.只能由两个以上的属性组成 B.至多包含一个属性
C.可以由一个或多个属性组成 D.必须包含关系的全部属性
2、关系和关系数据库之间是什么关系?( D )。
A.关系数据库是型,关系是它的值
B.关系是型,关系数据库是它的值
C.关系是关系数据库的集合
D.关系数据库是关系的集合
注:关系数据库是抽象的,没有型。
五、关系的完整性约束
关系模型允许定义三类完整性约束:
-
1、实体完整性规则
(1)实体完整性规则要求关系的主码中属性不能取空值。
2、参照完整性约束
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(基本关系R和S可能是同一个关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值*。
参照完整性是用来定义外码与主码之间引用规则的,从而保证数据的一致性
【例1】学生实体和专业实体可以用下面的关系表示(单一属性)。
学生(学号,姓名,性别,年龄,学院号(为外键))——参照关系
学院(学院号,系名)——被参照关系
“学院号”属性是学生关系的外码,是学院关系的主码。学院关系是被参照关系,学生关系为参照关系。(找外键)
所以,学生关系中的每个元组的“学院号”属性只能取下面两类值:空值或学院关系中已经存在的学院号值。
3、用户自定义的完整性约束。
用户定义的完整性规则由用户根据实际情况对数据库中数据的内容进行的规定,也称为域完整性规则* 。(用约束来实现)
例题:
1.关系和关系模式之间的关系是( D )。
A.关系是关系模式的集合 B.关系是型,关系模式是它的值
C.关系模式是关系的集合 D.关系模式是型,关系是它的值
2. 若F是关系R的外码,指向关系S,则F只能取( B )
A.空值 B.空值或者取关系S中存在的主码值
C.关系S中存在的主码值 D.关系R中存在的主码值
3.关系的完整性指的是( C )
A.任何数据都必须完整地用关系表示
B.任何关系都必须完整地包含所有数据
C.关系中数据的正确性和一致性
D.必须用关系完整地描述具体问题
六、关系代数
关系代数是以关系为运算对象的一组高级运算的集合;关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式。
注意:关系代数的运算对象是关系,运算结果也是关系。
关系运算
关系代数中的操作可以分为两类:
a.传统的集合操作:并、差、交、笛卡儿积 b.专门的关系操作:投影、选择、连接、除法等
1、传统的关系运算符:
并(U)、差(-)、交(∩)、笛卡儿积(×)
2、两类辅助操作符:
(1) 比较运算符:
>、 ≥、 <、 ≤、 =、 ≠。
(2) 逻辑运算符:
∨(或)、 ∧(与)、 ┐(非)。
a.传统的集合操作
1.传统的集合运算-并
1、并(Union)
设关系R和S具有相同的关系模式,R和S是n元关系,R和S的并是由属于R或属于S的元组构成的集合,记为R∪S。形式定义如下:
R∪S={t|t∈R∨t∈S},
其含义为: 任取元组t,当且仅当t属于R或t属于S时,t属于R∪S。
R∪S依然是一个n元关系。注意:并运算会取消某些元组(避免重复行)
2.传统的集合运算-差
2、差(Difference)
关系R和S具有相同的关系模式,R和S是n元关系,R和S的差是由属于R但不属于S是元组构成的集合,记为R-S。形式定义如下:
其含义为:当且仅当t属于R并且不属于S时,t属于R-S。
R-S也是一个n元关系。
3.传统的集合运算-交
3、交(Intersection)
关系R和S具有相同的关系模式,R和S是n元关系,R和S的交是由属于R且属于S是元组构成的集合,记为R∩S。形式定义如下:
R∩S={t | t∈R∧t∈S}
其含义为: 任取元组t,当且仅当t既属于R又属于S时,t属 于R∩S。
R∩S也是一个n元关系。
4.传统的集合运算-交
4、笛卡儿积*
设关系R和S的元数(属性个数)分别为r和s,定义R和S的笛卡儿积是一个(r+s)元的元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个元组,记为R×S。
若R有m个元组,S有n个元组,则R×S有m×n个元组
小练习:
1.关系代数是一种抽象的查询语言,关系代数运算的特点是( D )。
A.运算对象和结果都是元组
B.运算对象是元组,运算结果是关系
C.运算对象是关系,运算结果是元组
D.运算对象和结果都是关系
2.下列式子中,不正确的是( D )
A.R-S = R–(R ∩ S) B.R = (R-S) U(R ∩ S)
C.R ∩ S = S-(S-R) D.R ∩ S = S-(R-S)
b.专门的关系操作
1、选择(Selection)-where
选择运算是在关系R中选择满足给定条件的诸元组(行),记作
σF(R)={t | t∈R∧F(t)=‘真’} (F为给定条件)
2、投影(Projection)-select
关系R上的投影是从R中选择出若干属性列组成新的关系。记作
πA(R)={t[A]|t∈R}
其中,A为R中的属性列。
实例:
- 设教学数据库中有三个关系,学生关系:S(SNO,SN,AGE,SEX)、学习关系:SC (SNO,CNO,SCORE)、课程关系:C (CNO,CN,TEACHER)
- (1)检索学习课程号为C3的学生学号和成绩
- (2)检索学习课程号为C1或C3的学生学号
3、连接(Join)
在实际的应用过程中(表的操作),单一关系中的属性往往不能满足复杂的现实需求,需要将多个关系联合使用。 如何将多个关系正确、有效地联系起来,形成满足现实需求的新的关系?
(1)连接运算的含义:
连接也称θ连接, 是从两个关系的笛卡尔积中选取满足某规定条件的全体元组,形成一个新的关系,记为:θ为条件运算符
(2)两类常用连接运算
①等值连接(equi-join)(常用)
θ为“=”的连接运算称为等值连接,它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。等值连接为:
②自然连接(Natural join)
若A、B是相同的属性组,就可以在结果中把重复的属性去掉。这种去掉了重复属性的等值连接称为自然连接。自然连接可记作:
实例:
- 设教学数据库中有三个关系,学生关系:S(SNO,SN,AGE,SEX)、学习关系:SC (SNO,CNO,SCORE)、课程关系:C (CNO,CN,TEACHER)
- (1)检索学习课程号为C4的学生学号和姓名
- (2)检索学习课程名为MATHS的学生学号和姓名
- (3)检索没有学习课程号为C2的学生的姓名和年龄
拓展:在表的操作过程中,“连接”可分为内连接、自连接、外连接、交叉连接。
七、函数依赖
实体的联系有两类,一类是实体与实体之间的联系;另一类是实体内部各属性间的联系。
关系模式中各个属性之间的相互关联,就是数据依赖,它是规范化理论中一个最重要、最基本的概念,是数据库模式设计的关键。
数据依赖共有三种: 函数依赖(Functional Dependency,简称FD)、多值依赖(Multivalued Dependency,简称MVD)和连接依赖(Join Dependency,简称JD),其中最重要的是函数依赖。
1.概念
所谓函数依赖是指在关系R中,X、Y为R的两个属性或属性组,如果关系R存在:对于X的每一个具体值,Y都只有一个具体值与之对应,则称属性Y函数依赖于属性X。记作X→Y。
如果知道X的值,就可以获得Y的值。
所以X→Y也可以叫做X函数决定Y,或X决定Y。
2.平凡函数依赖和非平凡函数依赖
设关系模式R(U), X、 Y⊆ U;(X、Y为属性或属性组合)
如果X→Y, 且Y ⊆ X, 则称X→Y为平凡的函数依赖。
如果X→Y, 且Y不是X的子集, 则称X→Y为非平凡的函数依赖。
3.完全函数依赖和部分函数依赖
定义:设关系模式R(U),X,Y⊆U;(X、Y为属性或属性组合)
如果X→Y, 并且对于X的任何一个真子集Z, Z→Y都不成立, 则称Y完全函数依赖于X。
若X→Y, 但对于X的某一个真子集Z, 有Z→Y成立, 则称Y部分函数依赖于X
4.传递函数依赖
设关系模式R(U),X ⊆ U, Y ⊆ U,Z ⊆ U。 如果X→Y, Y →X ,Y→Z成立,则称X→Z为传递函数依赖。
例如:学生关系(学号,姓名,性别,年龄,所在学院,院长),其上的函数依赖集F={学号→姓名,学号→性别,学号→年龄,学号→所在学院,所在学院→院长},则学号→院长为传递函数依赖。
八、关系规范化
关系规范化的重要性就是能够解决关系模式中存在的数据冗余、插入和删除异常以及更新异常等问题。
基本思想:消除数据依赖中的不合适部分,即模式分解。
关系数据库中的关系必须满足一定的规范化要求,对于不同的规范化程度可用范式来衡量。
范式(Normal Form)是符合某一种级别的关系模式的集合,是衡量关系模式规范化程度的标准,达到的关系才是规范化的。
目前主要有6种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。
范式之间存在联系:1NF⊃2NF⊃3NF⊃BCNF ⊃4NF⊃5NF。最重要的是3NF和BCNF。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程称为规范化。*
(1)第一范式(1NF)
定义:设R是一个关系模式。如果R的每个属性的值域都是不可分的简单数据项(原子)的集合, 则称这个关系模式属于第一范式, 简记作R∈1NF。
简单表述:如果关系模式R的每一个属性都是不可分解的,则R ∈1NF 。
1NF是规范化最低的范式,在任何一个关系数据库系统中,关系至少应该是第一范式。
(2)第二范式(2NF)
定义:如果关系模式R是第一范式,且每个非主属性都完全函数依赖于码,则称R为满足第二范式的模式,记为:R∈2NF。
(1)主关键字只有一个属性的关系一定是第二范式。
例:关系R(学号,姓名,性别,出生日期,成绩)中主属性为学号;非主属性为姓名、性别、出生日期、成绩。
其中存在下列最小函数依赖集:
学号→姓名,学号→性别,学号→出生日期,学号→成绩
由于每个非主属性都完全函数依赖于码,所以该关系R∈2NF。
又例如:关系S(学号,姓名,性别,课程号,成绩),其中学号和课程号为主属性;姓名、性别、成绩为非主属性。
存在下列最小函数依赖集:
学号→姓名,学号→性别,(课程号,学号)→成绩
存在非主属性部分函数依赖于码:
(课程号,学号)→姓名,(课程号,学号)→性别
多加一个课程号也可推出姓名、性别,故关系S不属于2NF。
(2)主关键字是属性的组合,这样的关系模式可能不是第二范式。
根据最小函数依赖集,对上述关系模式进行分解,分解为两个关系:
S1(学号,姓名,性别) S2(学号,课程号,成绩) S1∈2NF;S2∈2NF
(3)第三范式(3NF)
定义:如果关系模式R是第二范式,且没有一个非主属性是传递函数依赖于码,则称R为满足第三范式的模式,记为:R∈3NF。
例:有关系模式,学生(学号,姓名,学院,院长)
存在的最小函数依赖集是:
学号→学院,学号→姓名,学院→院长。
所以院长传递函数依赖于学号。
分解:(1)学生(学号,姓名,学院)
(2)学院(学院,院长)
推论1:
如果关系模式R∈1NF,且它的每一个非主属性既不部分依赖、 也不传递依赖于码 ,则R∈3NF。
推论2:
不存在非主属性的关系模式一定为3NF。
关系模式规范化的基本步骤总结:
(1) 对1NF关系进行投影,消除原关系中非主属性对码的部分函数依赖,从而产生若干个2NF的关系。
(2) 对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,从而产生若干个3NF的关系。
(3) 对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖和传递函数依赖,得到一组BCNF的关系。
问题:有一个学生关系,学生(学号,姓名,学院,院长,课程号,课程名,成绩)规范化到第三范式。
(1)此关系模式满足第一范式,因为其所有属性都不可再分。
(2)不满足第二范式,因为存在非主属性“姓名”对主码“学号+课程号”的部分函数依赖:学号→姓名。
分解为2NF,得到3个关系:
学生(学号,姓名,学院,院长) 课程(课程号,课程名) 成绩(学号,课程号,成绩)
(3)分解后的学生关系不满足第三范式,因为存在非主属性“院长” 对主码“学号”的传递函数依赖:学号→学院,学院→院长。
学生关系分解为两个关系达到3NF:
学生(学号,姓名,学院)和学院(学院,院长)
最终得到4个关系:
- 学生(学号,姓名,学院)
- 学院(学院,院长)
- 课程(课程号,课程名)
- 成绩(学号,课程号,成绩)
关系规范化的作用:
优点:减少了冗余数据,节省了空间,避免了不合理的插入、删除、修改等操作,保持了数据的一致性。
缺点:信息放在不同表中,查询数据时有时需要把多个表连接在一起,增加了操作的难度,降低了操作效率。