ChⅡ-数据库关系模型
关系及其基本概念 Relation and Basic Concepts
实体(entity)指包含有数据特征的事物对象在概念模型世界中的抽象名称。
关系(relation)指具有关系特征、用于存放实体数据的二维表。关系也常被称为关系表。
- 表中每行存储实体的一个实例数据(record)
- 表中每列包含实体的一项属性数据(attribute)
- 表中单元格只能存储单个值
- 不允许有重复的行列
- 行列顺序可任意
在关系中,可以用来唯一标识元组的属性列,称为键(Key),其它属性列都为非键列。
复合键(Compound Key)指关系中用来唯一标识元组的多列作为键。例如(学号,课程号)作为学生选课表的复合键。
候选键(Candidate Key)关系中可能有多个列均适合作为键,将其中每个都称为候选键。例如(学号)和(身份证号)都可以作为学生表的候选键。
主键(Primary key)是关系表中最有代表性的一个候选键,每个关系表中只能定义一个主键。
代理键(Surrogate Key)采用 DBMS 自动生成的数字序列作为关系表的主键,可替代复合主键,以便获得更高性能数据访问操作处理。
关系模式语句中主键表示方法: RELATION_NAME(主键属性,属性 1,属性 2,…)
主键作用:
- 唯一标识关系表的每个元组 tuple
- 与关联表的外键建立联系,实现关系表之间连接
- 数据库文件使用主键值来组织关系表的数据存储
- 数据库使用主键索引快速检索数据
关系模型原理 Relation Model Principles
关系模型(Relation Model)——是一种基于二维表结构存储数据实体及实体间联系的数据模型。
集合运算操作包括选择(select)、投影(project)、连接(join)、交(intersection)、并(union)、差(difference)等。
专门针对元组的关系操作包括数据行插入(Insert)、 修改(Update)、删除(Delete)操作。
关系模型中的完整性约束 Integrity Constraint
完整性约束作用
- 消除关系表的元组重复存储
- 保持关联表的数据一致性
- 实现业务数据规则
关系模型完整性约束
- 实体完整性(Entity Integrity):保证关系中的每个元组都是可识别的和唯一的。 关系表中的主键列不允许为空值,不允许重复
- 参照完整性(Referential Integrity):关系表中的外键列值必须是另一关系表中的主键列值,或者为空值
- 用户定义完整性(User-defined Integrity):用户自定义的数据约束,如属性列取值范围、取值类型、取值唯一性等
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段的数据不能为 null | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
检查约束(8.0.1 版本后) | 保证字段值满足某一个条件 | CHECK |
外键约束 | 用来让两张图的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
关系模型数据操作 Relation Model Data Operation
Select
选择 (Select):$\sigma_{p}(R) = {t | t \in R , \text{且} , p(t) , \text{为真}}$
$\sigma_F(table)$ 根据 F 的判断条件,对 table 表进行选择
等同于SELECT * FROM table WHERE F
;例如$\sigma_{age<20>}(Student)$
Project
投影 (Project):$\pi_{A}(R) = {t[A] | t \in R}$
从 R 中选择出若干属性列组成新的关系
$\pi_{(Sname,Sgender)}(Student)$,等同于SELECT Sname,Sgender FROM Student
Join
连接 (Join):$R \bowtie S = {t | t \in R , \text{且} , t \in S}$
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
连接运算从 R 和 S 的广义笛卡尔积 R×S 中选取(R 关系)在 A 属性组上的值与(S 关系)在 B 属性组上值满足
比较关系的元组。
- 条件连接 cross join
$R \bowtie_{c} S = \sigma_c(R \times S)$ - 等值连接 equi join
$R \bowtie_{R.B=S.B} S = \sigma_{R.B=S.B}(R \times S)$
条件连接的特例。从关系 R 与 S 的广义笛卡尔积中选取 A、B 属性值相等的那些元组等同于SELECT * FROM R, S WHERE R.A = S.B
- 自然连接(Natural join)
自然连接是等值连接的特例,根据两个表中的所有相同属性列进行连接,连接后多个的相同属性列只保留一个SELECT * FROM R NATURAL JOIN S
- 外连接(Outer join)
外连接-自然连接的特例:自然连接只有相同属性列的值相同才返回,外连接中若有一方的行的共同属性列没有找到与之匹配的行,则也保留该行,以 NULL 填充。其可分为左外连接、右外连接、全外连接[[DataBase03#外连接查询 Outer Join]]
Others
交集 (Intersection):$R \cap S = {t | t \in R , \text{且} , t \in S}$
并集 (Union):$R \cup S = {t | t \in R , \text{或} , t \in S}$
差集 (Difference):$R - S = {t | t \in R , \text{且} , t \notin S}$
除操作 (Division):$R ÷ S $,笛卡尔积的逆操作