<数据库原理>DB2 关系数据库
本文最后更新于:2024年4月3日 晚上
DB2 关系数据库
DB2.1 关系模型
#基本术语
关系模型:用二维表格表示实体集,用关键码表示实体集关系的模型。
关系模式:对关系模型的语义描述。
例 2.1.1
如下关系模型
学号(sNo) 姓名(sName) 性别(Sex) 年龄(Age) 出生日期(dtBirthDate) 身份证号(ID) 1320001 乐正绫 F 16 2014-08-26 …… 1320002 绛雨 F 27 2016-09-29 …… 1320003 胡桃 F 16 2021-03-02 …… 对应的关系模式为
学生模式(sNo, sName, Sex, Age, dtBirthDate, ID)
-
属性:实体的字段。关系模型中,一列就是一个属性。属性的个数称为 元数(列数)
-
记录(元组):一个具体的实体。关系模型中,一行就是一个记录。记录的个数称为 基数
-
关系(实例):记录的集合
-
键(关键码,Key):能唯一标识元组的一个或多个属性。
有以下几种键:
-
超键
能唯一标识元组的属性或属性集。超键不是唯一的。
例 2.1.1 中, 均为超键
-
候选键
没有多余属性的超键。候选键中的属性称为 主属性,否则为 非主属性
-
主键
用户指定的,元组唯一标识符的候选键。
候选键可能不唯一,但主键只能有一个。
-
外键
若关系模式 的属性 是另一关系模式 的主键,则该属性 为 的外键。此时 称为主表, 称为附表。
-
#关系模型的完整性规则
任何数据模型都有三个要素:数据结构、数据操作、数据约束。对于关系模型来讲:
-
数据结构:数据库中全部数据及其相互联系,被表示为 **关系(二维表格)**的形式
-
数据操作:关系模型提供一组完备的高级关系运算
-
数据约束:
关系模型的完整性规则包括
-
实体完整性原则
关系中的主键不能为空,否则主键将不能唯一标识元组
-
参照完整性原则
关系中的外键要么为空,要么为主表中的某个主键值,以体现实体间的 关系
-
用户定义的完整性原则
根据应用环境的不同,定义各自的特殊约束条件
-
DB2.2 关系数据库语言 SQL
SQL 是 R-DBMS(关系数据库管理系统)的一个组成部分,是用户与 DBMS 通信的工具。
graph LR
A[SQL 请求]
C[数据]
RDBMS[R-DBMS]
OS((OS))
DB[(数据库)]
A-->RDBMS-->OS-->DB
C---RDBMS
DB-->OS-->RDBMS
(SQL 与 R-DBMS 的交互方式)
SQL 数据库的体系结构,其术语与传统关系模型术语有所不同,区别如下表:
关系模型 | SQL 数据库 |
---|---|
关系模式:属性、元组 | 基本表:列、行 |
存储模式、Schema | 存储文件、Database |
子模式 | 视图 |
核心的 SQL 主要由四部分组成,也称 SQL 的四大功能
-
数据定义功能
SQL 通过数据定义语言(Data Define Lanuage,DDL)来定义 数据库(Database)、基本表(Table)、视图(View)、**索引(Index)**等结构,并执行 创建(Create)、修改(Alter)、**删除(Drop)**等操作
-
数据操纵功能
SQL 通过数据操纵语言(Data Manipulation Language,DML)实现 查询 和 更新 两种操作。其中,更新包括 插入(Insert)、更新(Update)、删除(Delete)。
-
数据控制功能
SQL 通过数据控制语言(Data Control Language,DCL)实现四大保护功能:数据库恢复、完整性、并发、安全性控制
-
嵌入式 SQL 使用规则
涉及 SQL 嵌入宿主语言程序中使用的规则
#SQL 数据定义功能
包括对数据库、基本表、视图、索引的定义。
操作对象 | 创建 | 修改 | 删除 |
---|---|---|---|
数据库 | Create Database 数据库名 |
Alter Database 数据库名 |
Drop Database 数据库名 |
基本表 | Create Table 表名 |
Alter Table 表名 |
Drop Table 表名 |
视图 | Create View 视图名 |
- | Drop View 视图名 |
索引 | Create Index 索引名 |
- | Drop Index 索引名 |
视图是基本表的虚拟表,而索引依附于基本表,故 SQL 不提供二者的修改功能。想修改时,可先删除,再新建。
下略
DB2.3 关系数据库规范化设计
#数据依赖
数据依赖指数据间存在的各种联系,其通过一个关系中间值的相等与否进行体现。
通常,一个关系模式由三元组组成:。其中, 为关系名, 为 的所有属性的集合, 为属性间的函数依赖集
设计失当时,数据依赖会产生诸多问题:
-
数据冗余。同一数据在数据库系统中多次出现。其必定导致操作异常、操作数不一致。
-
数据操作异常。由于数据冗余,操作数据时必定发生异常。
包括:插入异常、修改异常、删除异常
-
数据不一致。由修改异常导致,本应相同的数据却不一致。
模式分解 是解决数据冗余的有效方法。规范化的准则之一:关系模式若有冗余,就分解它
#函数依赖
-
函数依赖(functional dependency,FD)、函数决定
对于关系模式 ,其关系集 存在两个子集 , 为 的任一当前关系。
若 中任意两元组 ,满足 时,都必有 ,则称 函数决定 ,或 依赖
记为
函数依赖又分为以下几种:
-
部份依赖、完全依赖
对于 ,若存在 ,且 ,则称 为 部份依赖。否则,称其为 完全依赖
-
传递依赖
若 ,且 ,则称 为 传递依赖
-
-
候选键、超键
对于关系模式 ,其关系集 存在两个子集
若 在 上成立,则称 为 的 超键
若超键 的任意真子集都不是超键,则 为 的 候选键
-
平凡依赖、非平凡依赖
对于 ,若 ,则称 为 平凡依赖,否则为 非平凡依赖
-
多值依赖(multi-valued dependency,MVD)
对于关系模式 ,其关系集 存在两个子集 ,另有 , 为 的任一当前关系。
若 对于 的任一给定值,必有多个 的值与之对于,且该组 取值与 无关,则称 多值决定 ,或 多值依赖
记为
#关系模式的范式
**范式(Normal Forms)**是评价关系模好坏的标准。共有 6 种范式:1NF、2NF、3NF、BCNF、4NF、5NF。级别越高的范式,其要求也更高。
低一级范式的关系模式,通过模式分解,化为几个高一级范式的关系模式,这样的过程称为 关系模式的规范化
-
第一范式(1NF)
若关系模式 的每个关系,其属性值都是不可分的原子值,则称 为第一范式
-
第二范式(2NF)
若关系模式 为 1NF,且 的每个非主属性都完全函数依赖于候选键,则称 为第二范式
不满足 2NF 的关系模式,必定存在非主属性对主键的局部依赖,进而存在数据冗余
-
第三范式(3NF)
若关系模式 为 1NF,且 的每个非主属性都不传递依赖于候选键,则称 为第三范式
可见,若 是 3NF,则其必然为 2NF。
证明过程如下
若 不是 2NF,则存在非主属性 ,其部份依赖于主键
即,存在 使得
此时必有
则 存在传递依赖
-
BCNF
若关系模式 为 1NF,且 的每个属性都不传递依赖于候选键,则称 为 BCNF
-
第四范式(4NF)
若关系模式 为 1NF, 为 上函数依赖、多值依赖的集合。
若 中任一平凡的多值依赖 的左部 都是 的超键,则称 为第四范式
-
第五范式(5NF)
与链接依赖有关,多数情况不必考虑第五范式