关系模式由一组关系组成,每个关系的数据结构为一张规范化的二维表
一、关系模型的相关定义
关系:关系相当于一张二维表。
例如:学生信息表(students
)
学号 (student_id) | 姓名 (name) | 性别 (gender) | 年龄 (age) | 所在院系 (department) |
---|---|---|---|---|
2023001 | 张三 | 男 | 20 | 计算机科学 |
2023002 | 李四 | 女 | 19 | 电子工程 |
2023003 | 王五 | 男 | 21 | 数学系 |
元组:表示二维表中的一行
例如:
2023001 | 张三 | 男 | 20 | 计算机科学 |
属性:表中的一列即为一个属性,,每列属性的名称即为属性名
例如:学生信息表中有5列即5个属性
学号 (student_id) | 姓名 (name) | 性别 (gender) | 年龄 (age) | 所在院系 (department) |
---|
码:有叫码键或键,是表中的一个属性或则一组属性,码能够唯一确定一个元组。
例如:学号能够唯一确定一个学生,所以“学号”可以做这个关系的码。
域:用来描述属性的取值范围。
例如:年龄的域,可以是(18,22)即表示年龄的取值范围:18岁到22岁。
分量:表示元组中的一个属性值。
例如:
2023001 | 张三 | 男 | 20 | 计算机科学 |
其中张三,20232001,男,20,计算机科学都分量。
关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,属性3.....属性n)。
例如:学生(学号,姓名,性别,年龄,所在院系)
二、关系模型的数据操作
关系模型的数据操作可以用关系代数(数学理论)或SQL(实际数据库语言)描述:
操作类型 | 关系代数 | SQL |
---|---|---|
选择 | σ条件(R) | SELECT * FROM R WHERE 条件; |
投影 | π属性(R) | SELECT 属性 FROM R; |
连接 | R⋈S | SELECT * FROM R JOIN S ON R.key = S.key; |
并 | R∪S | SELECT * FROM R UNION SELECT * FROM S; |
差 | R−S | SELECT * FROM R EXCEPT SELECT * FROM S; |
交 | R∩S | SELECT * FROM R INTERSECT SELECT * FROM S; |
此外还有一个除运算
定义:已知有两个关系R(A,B),S(B,C),其中A,B,C为属性列,R中的B同S中的B可以有不同的属性名但是必须得来自同一个属性域。R与S的除运算得到关系P(A),P是R的一个投影,元组在A上的分量值的象集包含S在B上的投影的集合。
数学表示:
R÷S
例如:选修表÷必修课程表
-
表
选修(学生, 课程)
:记录学生选修的课程。 -
表
必修课程(课程)
:记录所有必修课程。 -
查询:找出选修了所有必修课程的学生。
数据示例
学生 | 课程 |
---|---|
张三 | 数学 |
张三 | 英语 |
李四 | 数学 |
王五 | 数学 |
王五 | 英语 |
课程 |
---|
数学 |
英语 |
除运算结果
学生 |
---|
张三 |
王五 |
张三的象集:(数学,英语);王五的象集:(数学,英语);李四的象集:(数学)。
三、关系模型的完整性约束
-
实体完整性:主属性不可以为空值。
已知一个关系(二维表)中,如果一个属性或则一组属性能够唯一确定一个元组,且它的真子集不能唯一确定一个元组的即少了任何一个属性都不能唯一确定一个元组,则称这个属性或则这一组属性为候选码,而候选码的属性为主属性。主属性不能为空(NULL)。
-
参照完整性:外键的值只有两种可能,一种是为空,另一种是来自被参照关系相应属性的域
已知有两个关系A和B,A有一个(一组)属性a(不是码),关系B的主码为 b ,且 a 和 b 相对应。那么称a是关系A的外键,A是参照关系,B是被参照关系。a的值要么为空,要么来自属性b某一个值相等。注意关系A和B不一定是不同的关系
-
自定义完整性:用户自己定义的约束条件
例如:设置年龄属性的取值范围(域)大于18;设置出生日期属性大于2000-1-1等
四、关系模型的优缺点
优点:
- 关系模型的概念单一
- 关系模型的存储路径对用户隐蔽,
- 关系模型建立在严格的数据概念之上
缺点:
- 查询效率比层次模型和网状模型低