1.2 关系数据库
关系数据库是基于关系模型的数据库,现实世界的实体及实体间的各种联系均用单一的结构类型即关系来表示。
1.2.1 关系术语
1.基本的关系术语
(1)关系 一个关系就是一张二维表,每个关系有一个关系名,也称为表名。如图1.8所示,其中有“系部”、“学生”、“课程”和“选课”4个关系。
(2)元组 表中的一行就是一个元组,也称为一条记录。如图1.8所示,“学生”关系中包含6条记录。
(3)属性 表中的一列就是一个属性,也称为一个字段。如图1.8所示,“学生”关系中包含“学号”、“姓名”、“性别”和“系号”4个字段。
(4)域 属性的取值范围。例如,“性别”的域是“男”或“女”,“成绩”(百分制)的域是0~100分。
(5)关系模式 对关系的描述称为关系模式,它对应一个关系的结构。其格式为:
关系名(属性1,属性2,…,属性n)
例如,图1.8所示的“学生”关系表的关系模式为:
学生(学号,姓名,性别,系号)
(6)主关键字 在表中能够唯一标识一条记录的字段或字段组合,称为候选关键字。一个表中可能有多个候选关键字,从中选择一个作为主关键字。主关键字也称为主键。
例如,“学生”关系表中的“学号”字段在每条记录中都是唯一的,因此学号就是主键。在“选课”关系表中,“学号”和“课程号”两个字段构成一个主键。
(7)外部关键字 如果表A和表B中有公共字段,且该字段在表B中是主键,则该字段在表A中就称为外部关键字。外部关键字也称为外键。
例如,“学生”关系表和“系部”关系表中都有“系号”字段,且“系号”在“系部”关系表中是主键,则“系号”在“学生”关系表中就是外键。
在关系数据库中,主键和外键表示了两个表之间的联系。例如,在图1.8所示的关系模型中,“系部”关系表和“学生”关系表中的记录可以通过公共的“系号”字段相联系,当要查找某位学生所在系的系主任时,可以先在“学生”关系表中找出相应的系号,然后再到“系部”关系表中找出该系号所对应的系主任。
2.关系数据库的主要特点
(1)关系中的每个属性是不可分割的数据项,即表中不能再包含表。如果不满足这个条件,就不能称为关系数据库。例如,表1.1所示的表格就不符合要求。
表1.1 不符合规范化要求的表格
(2)关系中每一列元素必须是同一类型的数据,来自同一个域。
(3)关系中不允许出现相同的字段。
(4)关系中不允许出现相同的记录。
(5)关系中的行、列次序可以任意交换,不影响其信息内容。
1.2.2 关系的完整性
关系模型由关系数据结构、关系完整性约束和关系操作集合3部分组成。
关系模型的完整性规则是对关系的某种约束条件,以保证数据的正确性、有效性和相容性。关系模型中有3类完整性约束。
1.实体完整性
实体完整性规则要求关系中的主键不能取空值或重复的值。所谓空值就是“不知道”或“无意义”的值。
例如,在“学生”关系表中,“学号”为主键,则学号就不能取空值,也不能有重复值。在“选课”关系表中,“学号”和“课程号”构成主键,则这两个字段都不能取空值,也不允许表中任何两条记录的学号和课程号的值完全相同。
2.参照完整性
参照完整性规则定义外键和主键之间的引用规则,即外键或者取空值,或者等于相应关系中主键的某个值。
例如,“系号”在“学生”关系表中为外键,在“系部”关系表中为主键,则“学生”关系表中的“系号”只能取空值(表示学生尚未选择某个系),或者取“系部”表中已有的一个系号值(表示学生已属于某个系)。
实体完整性和参照完整性是关系模型必须满足的完整性约束条件。
3.用户定义的完整性
用户定义的完整性是指根据某一具体应用所涉及的数据必须满足的语义要求,自定义的完整性约束。
例如,在“选课”关系表中,如果要求成绩以百分制表示,并保留一位小数,则用户就可以在表中定义成绩字段为数值型数据,小数位数为1,取值范围为0~100。
1.2.3 关系运算
要在关系数据库中访问所需要的数据,就要进行关系运算。关系运算分为两类:传统的集合运算和专门的关系运算。关系运算的对象是一个关系,运算结果仍是一个关系。
1.传统的集合运算
传统的集合运算包括并(∪)、交(∩)、差(−)、广义笛卡儿积(×)4种。图1.9所示为关系R和关系S的4种集合运算示例(R与S具有相同的结构)。
图1.9 集合运算示例
2.专门的关系运算
专门的关系运算包括选择、投影和连接。
(1)选择(Selection)从一个关系中找出满足条件的记录的操作称为选择。选择是从行的角度进行的运算,其结果是原关系的一个子集。例如,从图1.8所示的“学生”关系表中选择所有女生的记录,结果如表1.2所示。
表1.2 选择运算
(2)投影(Projection)从一个关系中选出若干字段组成新的关系称为投影。投影是从列的角度进行的运算,相当于对关系进行垂直分解。例如,从图1.8所示的“学生”关系表中找出所有学生的系号、姓名和性别,结果如表1.3所示。
表1.3 投影运算
(3)连接(Join)连接是指把两个关系中的记录按一定的条件横向结合,生成一个新的关系。
在连接操作中,以两个关系的字段值对应相等为条件进行的连接称为等值连接。去掉重复字段的等值连接称为自然连接,它利用两个关系中的公共字段(或语义相同的字段),把字段值相等的记录连接起来。自然连接是最常用的连接运算。例如,将图1.8中的“系部”关系表和“学生”关系表进行自然连接,结果如表1.4所示。
表1.4 连接运算
利用关系运算或几个基本关系运算的组合,可以实现对关系数据库的查询,找出用户感兴趣的数据。
1.2.4 关系规范化
所谓关系规范化,就是对数据库中的关系模式进行分解,将不同的概念分散到不同的关系中,使得每个关系的任务单纯而明确,达到概念的单一化。例如,一个关系只描述一个概念、一个实体或者实体间的一种联系。
满足一定条件的关系模式称为范式(Normal Form,NF)。根据满足规范条件的不同,分为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)和第五范式(5NF)。常用的是前3 种范式,级别越高,满足的要求越高,规范化程度也越高。
在关系数据库中,任何一个关系模式都必须满足第一范式,即表中的每个字段必须是不可分割的数据项(表中不能再包含表)。将一个低级范式的关系模式分解为多个高一级范式的关系模式的过程,称为规范化。
关系的规范化可以避免大量的数据冗余,节省存储空间,保持数据的一致性。但由于信息被存储在不同的关系中,在一定程度上增加了操作的难度。