第一节 关系数据库概述
- 关系数据库的基本特征是使用关系数据模型组织数据。
- 在商用数据库管理系统中,关系模型逐渐取代早期的网状模型和层次模型,成为主流数据模型。和关系模型相比,网状模型或层次模型均与底层实现的结合更加紧密,而关系模型具有坚实的理论基础。
第二节 关系数据模型
- 关系数据库系统是支持关系模型的数据库系统,关系模型包含3个组成要素,分别是关系数据结构,关系操作集合和关系完整性约束。
一,关系数据结构
-
只包含单一的数据结构,即关系。
-
在关系模型中,现实世界的实体以及实体间的各种联系,均是使用关系来表示。
-
关系数据库是以二维表格的形式组织数据。如下表2.1。
学号 姓名 性别 出生日期 籍贯 民族 班号 身份证号 2021112601 张三 男 2000-01-01 北京 汉 2101 XXXXX111 2021112602 李四 男 2000-01-02 陕西 汉 2102 XXXXX222 2021112603 王五 男 2000-01-03 四川 汉 2103 XXXXX333 … -
关系数据库基本术语
-
表(Table)
- 表,也称为关系,是一个二维的数据结构,由表名,构成表的各个列(如学号,姓名等)及若干行数据(各个学生的具体信息)组成。每个表有一个唯一的表名。
-
关系(Relation)
- 一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行标识。
- 关系可以有三种类型,即基本关系,查询表和视图表。
- 基本关系通常又称为基本表或基表,是实际存在的表,它是实际存储数据的逻辑表示。
- 查询表是查询结果对应的表。
- 视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
-
列(Column)
- 表中的列,也称为字段(Field)或属性(Attribute)。表中的每一列有一个名称,称为列名,字段名或属性名。每一列表示实体的一个属性,具有相同的数据类型。
-
属性(Attribute)
- 表中的一列即为一个属性,给每个属性起一个名称即属性名。与之同义的术语是“列”。
- 表中属性的个数称为关系的元或度。列的值称为属性值;属性值的取值范围称为值域。
-
行(Row)
- 表中的行(Row),也称作元组(Tuple)或记录(Record)。表中的数据是按行存储的。表中的一行数据即为一个元组或一条记录,其每行由若干字段值组成,每个字段值描述该对象的一个属性或特征。
-
元组(Tuple)
- 表中的一行即为一个元组。
- 如上表中(2021112601,张三,男,2000-01-01,北京,汉,2101,XXXXX111)为一个元组。
- 表中的一行即为一个元组。
-
分量(Component)
- 元组中的一个属性值,称为分量。
-
码或键(Key)
- 如果在一个关系中,存在这样的属性(或属性组),使得在该关系的任何一个关系状态中的两个元组,在该属性(或属性组)上值的组合都不相同,即这些属性(或属性组)的值都能用来唯一标识该关系的元组,则称这些属性(或属性组)为该关系的码或键。
-
超码或超键(Super Key)
- 如果在关系的一个码中移去某个属性,它仍然是这个关系的码,则称这样的码或键为该关系的超码或超键。
- 每个关系至少有一个默认的超码或超键,即该关系的所有属性的集合,也是这个关系的最大超码或超键。
- 在上表2.1中(学号,姓名),(学号,姓名,性别,出生日期),(学号,姓名,性别,出生日期,籍贯,民族,班号,身份证号)都是该表的超码或超键。
-
候选码或候选键(Candidate Key)
-
如果在关系的一个码或键中,不能从中移去任何一个属性,否则它就不是这个关系的码或键,称这样的码或键为该关系的候选码或候选键。
-
一个关系的候选码或候选键是这个关系的最小超码或超键。
-
表2.1中学生基本信息中学号和身份证号都是候选键,因为给定学号或身份证号,都可以确定一个学生的全部基本信息。
-
有些情况下,需要几个属性(即属性组或属性集合)才能唯一确定一条记录。如下表,仅仅确定学号或课程号,都不能唯一确定某个学生具体一门课程的成绩。所以,学生成绩表的主键是由学号和课程号两个属性组成的属性集合,即(学号,课程号)。
-
中文字段名 数据类型 宽度 学号 字符型 10 课程号 字符型 6 开课学期 字符型 5 成绩 数值型
-
-
主码或主键(Primary Key)
- 在一个关系的若干个候选码或候选键中指定一个用来唯一标识关系的元组,则称这个被指定的候选码或候选键为该关系的主码或主键。
-
全码或全键(All-Key)
- 一个关系模式的所有属性集合是这个关系的主码或主键,则称这样的主码或主键为全码或全键。
-
主属性(Primary Attribute)和非主属性(Nonprimary Attribute)
- 关系中包含在任何一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中的属性称为非主属性或非码属性。
-
外码或外键(Foreign Key)
- 当关系中的某个属性(或属性组)不是这个关系的主码或候选码,而是另一关系的主码时,称该属性(或属性组)为这个关系的外码或外键。
-
参照关系(Referencing Relation)和被参照关系(Referenced Relation)
- 参照关系也称为从关系,被参照关系也称为主关系,它们是指以外码相关联的两个关系。以外码作为主码的关系称为被参照关系;外码所在的关系称为参照关系。被参照关系与参照关系是通过外码相联系的,这种联系通常是一对多的联系。
-
域(Domain)
- 域表示属性的取值范围。
-
数据类型(Data Type)
- 用于限制(或容许)该列存储的数据。每个字段表示同一类信息,具有相同的数据类型。
-
关系模式(Relation Schema)
- 在关系数据库中,关系模式是型,关系是值,即关系模式是对关系的描述。
- 关系模式是静态的,稳定的,而关系是动态的,随时间不断变化。
-
关系数据库(Relation Database)
- 关系数据库是以关系模型作为数据的逻辑模型,并采用关系作为数据组织方式的一类数据库,其数据库操作建立在关系代数的基础上。在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
- 关系数据库对关系的要求
- 每一个属性都是不可分解的。即不允许表中有表。
- 每一个关系仅仅有一种关系模式,即每一个关系模式中的属性的数据类型以及属性的个数是相对固定的。
- 每一个关系模式中的属性必须命名,在同一个关系模式中,属性名必须是不同的。
- 同一个关系中不允许出现候选码或候选键值完全相同的元组。
- 在关系中元组的顺序(即行序)是无关紧要的,可以任意交换。
- 在关系中属性的顺序(即列序)是无关紧要的,可以任意交换。
-
二,关系操作集合
1,基本的关系操作
- 查询(Query)操作和插入(Insert),删除(Delete),修改(Update)操作两大部分。
- 查询操作可以分为选择,投影,连接,除,并,差,交,笛卡尔积等。其中,选择,投影,并,差,笛卡尔积是5种基本操作,其他操作均可以使用基本操作来定义和导出。
- 关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合(set-at-a-time)的方式。
2,关系数据语言的分类
- 关系操作是通过关系语言来实现的。关系语言的特点是高度非过程化,即:用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择由DBMS的优化机制来完成;用户也不必求助于循环和递归来完成数据的重复操作。
- 关系操作的能力可以用两种方式来表示:
- 代数方式
- 代数方式主要有关系代数,它是通过对关系的操作来表达查询要求的方式。
- 逻辑方式
- 逻辑方式主要有关系演算,它是用谓词来表达查询要求的方式。关系演算又可按谓词变元的基本对象是元组变量还是域变量,分为元组关系演算和域关系演算。关系代数,元组关系演算和域关系演算三种语言在表达能力上是完全等价的。
- 代数方式
- 结构化查询语言(Structured Query Language,SQL)介于关系代数和关系演算之间。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询,数据定义语言(DDL),数据操纵语言(DML)和数据控制语言(Data Control Language,DCL)于一体的关系数据语言。是关系数据库的标准语言。
- 关系数据语言可以分为3类:关系代数语言,关系演算语言以及兼具两者双重特点的语言(如SQL)。共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够独立使用也可以嵌入高级语言中使用。
3,关系代数
- 关系代数是关系操作语言的一种传统表示方式,是以集合代数为基础发展起来的。任何一种操作都是将一定的操作符作用于一定的操作对象上,得到预期的操作结果,因而操作包含三大要素:操作对象,操作符,操作结果。
- 关系代数操作中,操作对象和操作结果均为关系。关系代数直接应用关系的运算来表达操作目的,而代数用到的运算符包括集合运算符和专门的关系运算符两类。
- 关系代数操作经过有限次复合的式子称为关系代数操作表达式,简称为关系代数表达式。
三,关系的完整性约束
-
数据库的数据完整性是指数据库中数据的正确性,相容性和一致性。包含两个方面:
- 与现实世界中应用需求的数据的正确性,相容性和一致性。
- 数据库内数据之间的正确性,相容性和一致性。
-
关系模型中有三类完整性约束,分别是实体完整性约束,参照完整性约束和用户定义完整性约束。
1,实体完整性约束(Entity Integrity Constraint)
- 实体完整性约束是指关系的主属性,即主码的组成不能为空,也就是关系的主属性不能是空值NULL。
2,参照完整性约束(Referential Integrity Constraint)
- 参照完整性约束就是定义外码和主码之间的引用规则,它是对关系间引用数据的一种限制。
- 参照完整性的定义:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应,则对于R中每个元组在F上的值只允许两种可能,即要么取空值(F的每个属性值均为空值),要么等于S中某个元组的主码值。
3,用户定义完整性约束(User-defined Integrity Constraint)
- 用户定义的完整性约束是针对某一应用环境的完整性约束条件,它反映了某一具体应用所涉及的数据应满足的要求。
- 关系模型提供定义和检验这类完整性规则的机制,其目的是用统一的方式由系统来处理它们,不再由应用程序来完成这项工作。
4,关系模型完整性约束的检验
- 在对关系数据库执行插入,删除和更新操作时,需要检验是否满足上述三类完整性约束。
1,执行插入操作
- 检查实体完整性约束,检查插入行在主码属性上的值是否已经存在,若不存在,可以执行插入操作;否则不可以执行插入操作。
2,执行删除操作
- 一般只需要对被参照关系检查参照完整性约束。如果是删除被参照关系中的行,检查被删除行在主码属性上的值是否正在被相应的参照关系的外码引用,若不在被引用,可以执行删除操作;若正在被引用,有三种可能的做法,既不执行该删除操作(拒绝删除)。或将参照关系中相应行在外码属性上的值改为空值(若它允许空值)后再执行删除操作(空值删除),或将参照关系中相应的一行删除(级联删除)
3,执行更新操作
- 是上述两种情况的综合。
第三节 关系数据库的规范化理论
一,关系模式中可能存在的冗余和异常问题
1,数据冗余
- 数据冗余是指同一数据被反复存储的情况。
2,更新异常
- 数据冗余将导致存储空间的浪费和潜在数据不一致性及修改麻烦等问题。
3,插入异常
- 数据的插入操作异常是指应该插入到数据库中的数据不能执行插入操作的情形。
4,删除异常
- 数据的删除异常是指不应该删去的数据被删去的情形。
5,数据依赖
- 数据依赖是可以作为关系模式的取值的任何一个关系所必须满足的一种约束条件,是通过一个关系中各个元组的某些属性值之间的相等与否体现出来的相互关系。这是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
二,函数依赖与关键字
- 函数依赖是指关系中属性间的对应关系,定义如下:
- 设R为任一给定关系,如果对于R中属性X的每一个值,R中的属性Y只有唯一值与之对应,则称X函数决定Y或称Y函数依赖于X,记作X➡Y。其中**,X称为决定因素**。
- 函数依赖根据其不同性质可分为完全函数依赖,部分函数依赖和传递函数依赖。
三,范式与关系规范化过程
- 关系数据库中的关系满足一定的要求,不同程度的要求称为不同的范式(Normal Form,NF)。满足最低要求的称为第一范式,简称1NF,这是最基本的范式;在第一范式的基础上进一步满足一些新要求的称为第二范式(2NF);以此类推,第三范式(3NF)及其改进形式BCNF(Boyce-Codd Normal Form)。
- 一个低一级范式的关系模式通过模式分解(Schema Decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(Normalization)。
1,第一范式
- 设R为任一给定关系,如果R中每个列与行的交点处的取值都是不可再分的基本元素,则R为第一范式。
- 第一范式是一个不含重复组的关系,其中不存在嵌套结构。不满足第一范式的关系为非规范关系。
- 存在的问题:冗余高,插入和删除操作异常。
2,第二范式
- 设R为任一给定关系,若R为1NF,且其所有非主属性都完全函数依赖于候选关键字,则R为第二范式。
- 存在的问题:插入,删除操作异常及修改麻烦等问题。
3,第三范式
- 设R为任一给定关系,若R为2NF,且其每一个非主属性都不传递函数依赖于候选关键字,则R为第三范式。
4,BCNF
- 用于解决3NF有时出现的插入及删除操作异常等问题。
- 设R为任一给定关系,X,Y为其属性集,F为其函数依赖集,若R为3NF,且其F中所有函数依赖X➡Y(Y不属于X)中的X必包含候选关键字,则R为BCNF。