4. 关系数据理论
4.1 问题的提出
### 如何构造适合的数据库
- 应该构造几个关系模式
- 每个关系由哪些属性组成
- 这是关系数据库逻辑设计问题
- 关系数据库的规范化理论
### 关系模式的定义
- 五元组 $R(U, D, DOM, F)$
- 关系名 $R$ 是符号化的元组语义
- $U$ 为一组属性
- $DOM$ 为属性到域的映射
- $F$ 为属性组 $U$ 上的一组数据依赖
- 本章使用三元组 $R(U, F)$
- 当且仅当 $R$ 上的一个关系 $r$ 满足 $F$ 时, $r$ 称为关系模式 $R(U)$ 的一个关系
### 第一范式 (1NF)
- 关系的每一个分量必须是不可分的数据项
- 这样的关系模式属于第一范式 (1NF)
### 数据依赖
- 一个关系内部属性与属性之间的一种约束关系
- 通过属性间值的相等与否体现
- 是现实世界属性间相互联系的抽象
- 是数据内在的性质
- 是语义的体现
- 函数依赖 (Functional Dependency, FD)
- 多值依赖 (Multi-Valued Dependency, MVD)
### 函数依赖
- 某个属性或属性组确定其他属性或属性组
- 例如学号确定姓名, 系名
- 即 Sno 函数决定 Sname,Sno 函数决定 Sdept
- 记作 $Sno \to Sname, Sno \rightarrow Sdept$
- 或 Sname 函数依赖于 Sno, Sdept 函数依赖于 Sno
### 例 1
- 关系模式 Student 包含Sno, Sdept, Mname, Cno, Grade
- 记作 $U = \lbrace Sno, Sdept, Mname, Cno, Grade \rbrace$
- 一个系有若干学生
- 一个学生只属于一个系
- 一个系只有一名负责人
- 一个学生可以选修多门课程
- 每门课程有若干学生选修
- 每个学生学习每一门课程有一个成绩
### 例 1 实例
- $r = \lbrace Sno, Sdept, Mname, Cno, Grade \rbrace$
- $r_1 = \lbrace S1, 计算机系, 张明, C1, 95 \rbrace$
- $r_2 = \lbrace S2, 计算机系, 张明, C1, 90 \rbrace$
- $r_3 = \lbrace S3, 计算机系, 张明, C1, 88 \rbrace$
- $r_4 = \lbrace S4, 计算机系, 张明, C1, 70 \rbrace$
- $r_5 = \lbrace S5, 计算机系, 张明, C1, 78 \rbrace$
### 例 1 函数依赖
- $Sno \to Sdept$
- $Sdept \to Mname$
- $(Sno, Cno) \to Grade$
### 例 1 关系模式
- $Student(U, F)$
- $U = \lbrace Sno, Sdept, Mname, Cno, Grade \rbrace$
- $F = \lbrace Sno \to Sdept, Sdept \to Mname,$
- $(Sno, Cno) \to Grade \rbrace$

#### Example 1
### 该关系模式的问题
- 数据冗余: 系主任重复出现
- 更新异常: 更换系主任
- 插入异常: 一个系刚成立
- 删除异常: 某系学生全部毕业
### 例 1 改善
- $S ( Sno, Sdept, Sno \to Sdept )$
- $SC ( Sno, Cno, Grade, ( Sno, Cno ) \to Grade )$
- $DEPT ( Sdept, Mname, Sdept \to Mname )$

### 4.1 问题的提出
- 什么是第一范式?
- 什么是函数依赖?
- 列出你设计的关系模式中的函数依赖.
- 根据本课内容, 列出你的关系模式中存在的问题.
----
[ 3.6 视图](dbds-3-6.html#/overview)
[| 练习 |](dbds-exec.html)
[ 4.2 规范化](dbds-4-2.html#/overview)