数据库基础 关系数据模型
概叙
关系数据库的基本特征是使用关系模型的组织数据,20世纪80年代以后,在商用DBMS中,关系模型逐步取代早期的网状模型和层次模型。
关系数据模型
作为数据模型,关系模型包含三个组成要素:关系数据结构、关系操作集合和关系完整性约束。
关系数据结构
结构只包含单一的数据结构(关系),现实世界的实体与实体间的各种联系均用关系来表示。关系模型是吧数据库表示为关系的集合,并以二维表格的形式组织数据。
录入一张二维表格如:
学号 | 姓名 | 性别 | 籍贯 | 民族 | … |
---|---|---|---|---|---|
001 | 张三 | 男 | 陕西 | 汉 | … |
002 | 李四 | 男 | 湘西 | 苗 | … |
003 | 王五 | 男 | 河北 | 汉 | … |
004 | 赵六 | 男 | 东北 | 汉 | … |
… | … | … | … | … | … |
基本术语
-
表(Table)
:也称为关系,是二维数据结构,由表名、构成表的各列及若干行数据组成,每个表由唯一的表名,每一行数据描述一条具体的记录值。 -
关系(Relation)
:一个关系逻辑上对应一张二维表,可以为每个关系取一个名称来标识。关系有三种类型:基本关系(基表,实际存在的表,是实际存储数据的逻辑表示)、查询表(查询结构对应的表)和视图表(由基本表或其他视图导出的表,不对应实际存储的数据)。 -
列(Column)
:称为字段(Field)或属性(Attribute)。每一列有一个名称,表示实体属性,具有相同数据类型。在一个数据库中,表名,字段名必须唯一,不同的表可以有相同的字段名,且命名须有意义,简单。 -
属性(Attribute)
:表列即属性,给属性起名即属性名。属性的个数称为关系的元或度。列值为属性值;取值范围为值域。 -
行(Row)
:称为元组(Tuple)或记录(Record)。表中的数据按行存储,一行数据即一条记录或元组,每行又若干个字段值组成。 -
分量(Component)
:元组的属性值为分量 -
码/键(key)
:在一个关系中,有一个属性或属性组,能用来标识该关系的元组,则为该关系的码或键。 -
超码或超键(Super Key)
:从码中去除某个属性,它仍然是对应关系的码,则为超码;每个关系至少有一个默认的超码(所有属性的集合)。 -
候选码或键(Candidate Key)
:关系中的一个码或键中,不能去除任何一个属性,否则它就不是对应关系表的码或键,则此码为候选码(键),它是关系表中最小的超码或超键。 -
主键/码(Primary Key)
:在一张关系表中的若干候选键中指定一个用来唯一标识该关系的元组,则该候选键为主键。 -
全键/码(All-Key)
:一个关系中所有的属性集合是是这个关系是主键/码,则为全键/码。 -
主/非属性(Primary Attribute/Nonprimary Attribute)
:关系中包含任何一个候选键/码的属性为主/码属性,不包含任何一个候选码的属性为非主/码属性。 -
外键/码(Foreign Key)
:关系中的某个属性或属性组不是这个关系的主键或候选键,而是另一个关系的主键,则该属性(属性组)为关系的外键/码。 -
参照关系(Referencing Relation)/被参照关系(Referenced Relation)
:参照关系也称从关系,被参照关系又称主关系,它们指以外码相关联的两个关系。而以外码为主码的关系为被参照关系;外码所在的关系为参照关系,这种联系通常是一对多关联。 -
域(Domain)
:指属性取值范围。 -
数据类型(Data Type)
:每列(元关系)都有相应的数据类型,用于限制该列中存储的数据。 -
关系模式(Relation Schema)
:通数据模型一样,数据库也有型和值,在关系数据库中关系模式是型,关系是值,关系模式是对关系的描述。
中文字段名 | 数据类型 | 宽度 | … |
---|---|---|---|
学号 | 字符类型 | 8 | … |
姓名 | 字符类型 | 10 | … |
身份证 | 字符类型 | 18 | … |
… | … | … | … |
上表是学生基本星系登记表关系的结构定义,关系则是元组的集合,是关系模式在某一时刻的状态或内容
实际工作中关系模式和关系统称为关系。
18.关系数据库(Relation Database)
:以关系模型作为数据的逻辑模型,并采用关系作为数据组织方式的一类数据库,其数据库操作建立在关系代数的基础上。在给定的应用领域中,所以关系的集合构成一个关系数据库。
在实际的数据库应用系统中,一般使用英文作为表名、字段名等。因为在编写数据库应用程序时,表名、字段名会作为变量名,使用中文不方便标识,且有些DBMS不能很好的兼容中文。
因此上表应该变更为:
含义 | 字段名 | 数据类型 | 宽度 | … |
---|---|---|---|---|
学号 | studentNo | 字符类型 | 8 | … |
姓名 | sutdentName | 字符类型 | 10 | … |
身份证 | studentId | 字符类型 | 18 | … |
… | … | … | … | … |
关系数据库对关系的限定:
- 每个属性都不可分解,是关系数据库对关系的最基本的限定,要求关系的每个分量必须是一个不可分的数据项,即不允许表中有表
- 一个关系对应一种关系模式,模式中的属性的数据类型及属性的个数是相对固定的
- 每个关系模式中的属性必须命名,在同一模式中,属性名必须是不同的
- 同一关系中不允许出现候选码或键值完全相同的元组
- 关系中的元组顺序是可任意交换
- 关系中的属性顺序可以任意交换
关系操作集合
基本的关系操作
增(插入 Insert)、删(Delete)、改(Update)、查(Query)。关系的查询表达能力是关系操作最主要的部分。查又可分为选择、投影、连接、除、并、差、交、笛卡尔积。集合操作方式(操作的对象和结果都是集合)。又称为一次一集合(set-at-a-time)
关系数据语言的分类
通过关系语言实现关系操作。用户不必请求DBM为其建立特殊的存取路径,由 DBMS 的优化机制来完成。
- 代数方式:主要有关系代数,通过对关系的操作来表达查询要求
- 逻辑方式:主要有关系演算,是用谓词来表达查询要求,关系演算又按谓词变元的基本对象(元组变量或域变量),分为元组关系演算和域关系演算。
- 介于前两者之间的结构化查询语言(Structured Query Language,SQL):SQL具有丰富的查询功能、数据定义和数据控制功能。集查询、数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(Data Control Language, DCL)于一体;是关系数据库的标准语言。
关系代数
关系代数是关系操作语言中的传统表示方式,以集合代数为基础发展而来。任何一种操作都是将一定的操作符作用域一定的操作对象上,得到预期的操作结果。
而对象和结果均为关系。关系代数直接应用关系的运算来表达操作的目的,运算符包括集合运算符和专门的关系运算符。
{% raw %}
运算符 | 含义 | |
---|---|---|
集合运算符 | ∪ | 并 |
− | 差 | |
∩ | 交 | |
× | 笛卡尔积 | |
专门的关系运算符 | σ | 选择 |
π | 投影 | |
⋈ | 连接 | |
÷ | 除 | |
比较操作符 | > | 大于 |
≥ | 大于等于 | |
< | 小于 | |
≤ | 小于等于 | |
= | 等于 | |
≠ | 不等于 | |
比较操作符 | ¬ | 非 |
∧ | 与 | |
∨ | 或 |
{% endraw %}
关系代数操作经过有限次复合的式子称为关系代数操作表达式(关系代数表达式),可使用表达式表示所需要执行的各种数据查询和修改处理,所有关系代数是一种抽象的查询语言,通过对关系的操作来表达查询。
按运算符分类,关系代数操作可分为:传统的集合运算和专门的关系运算
集合运算
传统集合运算是二目运算,将关系看成元组集合,运算从行的角度来进行,具有 并、差、交、迪卡尔积四种运算。
Example:
表 T1
学号(SNO) | 姓名(SNAME) | 性别(SSEX) | 宿舍(SROOM) |
---|---|---|---|
0001 | 张三 | 男 | N101 |
0002 | 王二 | 男 | N101 |
0003 | 李梅 | 女 | C101 |
表 T2
学号(SNO) | 姓名(SNAME) | 性别(SSEX) | 宿舍(SROOM) |
---|---|---|---|
0004 | 刘八 | 男 | D101 |
0005 | 赵二 | 男 | B201 |
0003 | 李梅 | 女 | C101 |
并(UNION)
表T1 和 表T2 使用并运算产生一个新表T3,(T3 = T1 ∪ T2)它是由T1和T2所有不同元组所组成,且 T1和T2属性个数、值域相同。下表为 T1 ∪ T2的结果
表 T3
学号(SNO) | 姓名(SNAME) | 性别(SSEX) | 宿舍(SROOM) |
---|---|---|---|
0001 | 张三 | 男 | N101 |
0002 | 王二 | 男 | N101 |
0003 | 李梅 | 女 | C101 |
0004 | 刘八 | 男 | D101 |
0005 | 赵二 | 男 | B201 |
差(DIFFERENCE)
表T1 和 表T2 使用差运算产生一个新表T4,(T4 = T1 – T2)它有T1的所有元组但不包含T2的元组,且 T1和T2属性个数、值域必须相同。下表为 T1 – T2的结果
表 T4
学号(SNO) | 姓名(SNAME) | 性别(SSEX) | 宿舍(SROOM) |
---|---|---|---|
0001 | 张三 | 男 | N101 |
0002 | 王二 | 男 | N101 |
交(INTERSECTION)
表T1 和 表T2 使用交运算产生一个新表T5,(T5 = T1 ∩ T2)它同时包含T1和T2相同的所有元组,且 T1和T2属性个数、值域必须相同,交运算可由差运算表示(T1∩T2 = T1-(T1-T2))。下表为 T1 ∩ T2的结果
表 T5
学号(SNO) | 姓名(SNAME) | 性别(SSEX) | 宿舍(SROOM) |
---|---|---|---|
0003 | 李梅 | 女 | C101 |
笛卡尔积(CARTESIAN PRODUCT)
表T6 和 表T7 使用笛卡尔积运算产生一个新表T8,(T8 = T6 × T7)它是T6和T7的所有元组连接而成,即将两张表的元关系合并,且T6的每一元组都对应T7所有的元组
下表为 T6 × T7的结果
表 T6
学号(SNO) | 姓名(SNAME) |
---|---|
0001 | 张三 |
0002 | 王二 |
表 T7
课程号(CNO) | 课程名(CNAME) | 教室(SSEX) |
---|---|---|
1 | 数据库 | C-101 |
2 | 操作系统 | C-102 |
表 T8
学号(SNO) | 姓名(SNAME) | 课程号(CNO) | 课程名(CNAME) | 教室(SSEX) |
---|---|---|---|---|
0001 | 张三 | 1 | 数据库 | C-101 |
0001 | 张三 | 2 | 操作系统 | C-102 |
0002 | 王二 | 1 | 数据库 | C-101 |
0002 | 王二 | 2 | 操作系统 | C-102 |
专门的关系运算
此运算即涉及行,又涉及列,分为一元专门关系操作和二元专门关系操作
- 一元关系操作:对单个关系进行垂直分解的投影运算和进行水平分解选择运算
- 二元关系操作:对两个关系进行操作,包括连运算和除运算
选择(SELECT)
选择运算( $σ_F(R)$ ),F为条件表达式,R为指定的被运算关系名。 从指定关系中选取满足条件的若干元组组成一个新关系
SELECT 关系名 WHERE 条件语句(表达式)
条件语句:由常数、属性名或列名、比较操作符及逻辑操作符组成
Example:
SELECT T8 WHERE 姓名 = "张三"
表 T9
学号(SNO) | 姓名(SNAME) | 课程号(CNO) | 课程名(CNAME) | 教室(SSEX) |
---|---|---|---|---|
0001 | 张三 | 1 | 数据库 | C-101 |
0001 | 张三 | 2 | 操作系统 | C-102 |
投影(PROJECTION)
投影运算( $π_A(R)$ ), R为被运算关系,A为属性序列,从指定关系中选取指定的若干属性值组成新关系
PROJECTION 关系名 ( 属性名1, 属性名2 ,... )
组成的新关系自动去重
Example:
PROJECTION T8 (课程号,课程名)
表 T10
课程号(CNO) | 课程名(CNAME) |
---|---|
1 | 数据库 |
2 | 操作系统 |
θ连接(JOIN)
连接运算($R\cfrac{⋈}{xθy}S$),其中,R和S 代表两个不同的关系;
x 和 y 分别表示R中的第x列和S中的第y列属性;
θ表示比较运算符(>、≥、<、≤、=、≠)
从笛卡尔积 R × S 中选取R的第x列属性值与S的第y列属性值满足θ 的那些元组组成一个新关系。
JOIN 关系1 AND 关系2 WHERE 条件语句
条件语句:由比较操作符和属性名或列名组成的表达式
- 等值连接:θ值为 “=”,从R和S的笛卡尔积中选取 x、y 属性值相等的元组
Example:
表 T11
A | B | C |
---|---|---|
a | b | c |
d | e | f |
表 T12
D | E | A |
---|---|---|
g | h | a |
b | c | d |
JOIN T11 AND T12 WHERE C = E
T11 × T12
T11.A | B | C | D | E | T12.A |
---|---|---|---|---|---|
a | b | c | g | h | a |
a | b | c | b | c | d |
d | e | f | g | h | a |
d | e | f | b | c | d |
等值结果为:
表 T13
T11.A | B | C | D | E | T12.A |
---|---|---|---|---|---|
a | b | c | b | c | d |
- 自然连接:是一种特殊的等值连接,要求两个关系中比较的分量必须是 相同的属性组,且结果中去除重复的属性列
JOIN T11 AND T12 WHERE A = A
表 T14
T11.A | B | C | D | E | T12.A |
---|---|---|---|---|---|
a | b | c | g | h | a |
d | e | f | b | c | d |
表 T14.2
A | B | C | D | E |
---|---|---|---|---|
a | b | c | g | h |
d | e | f | b | c |
自然连接是构造新关系的有效方法,投影和选择是分解关系的有效方法,自然连接中如果两个关系没有公共属性则变成笛卡尔积
除(DIVISION)
除运算(R÷S) R和S代表两个不同的关系。
假如被除关系R 为 m 元关系,除关系S 为 n 元关系,则运算结果的新关系为 m-n元关系。
Example 1:
表 T15
A | B | C | D | E | F | G |
---|---|---|---|---|---|---|
a | b | c | d | e | f | g |
h | i | j | k | l | m | n |
a | b | c | d | e | c | d |
a | c | e | f | b | m | n |
a | b | c | d | e | b | h |
a | b | c | d | e | g | h |
表 T16
H | F | G |
---|---|---|
b | f | g |
c | m | n |
b | c | d |
c | b | h |
T15 ÷ T16
运算步骤:
- 被除关系R对除关系S不同的属性 X 进行投影
X 投影
A | B | C | D | E |
---|---|---|---|---|
a | b | c | d | e |
h | i | j | k | l |
a | b | c | d | e |
a | c | e | f | b |
a | b | c | d | e |
a | b | c | d | e |
// 列出 x 集合中的值 和对应象集
{
"a,b,c,d,e":{(f,g),(c,d),(b,h),(g,h)},
"h,i,j,k,l":{(m,n)},
"a,c,e,f,b":{(m,n)}
}
// 列出 表 T16 中与 T15相同的列的投影
{
(f,g),(c,d),(b,h)
}
通过对比发现 只有a,b,c,d,e值对应的象集包含关系T16的投影集,所以结果接
A | B | C | D | E |
---|---|---|---|---|
a | b | c | d | e |