一、 关系数据库基本概念
1. 关系模型组成
- 关系数据结构:用二维表表示实体及联系。
- 关系操作集合:包括查询(选择、投影、连接等)和更新(插入、删除、修改)。
- 关系完整性规则:实体完整性、参照完整性、用户定义完整性。
2. 核心术语
术语 | 定义 | 示例 |
---|---|---|
属性(Attribute) | 描述实体的特征 | 学生表的"学号""姓名""性别" |
域(Domain) | 属性的取值范围,需满足原子性(第一范式要求) | 学号域:6位整数;性别域:{男, 女} |
候选码(Candidate Key) | 能唯一标识元组的属性或属性组 | 学生表的"学号" |
主码(Primary Key) | 从候选码中选定的唯一标识符 | 选课表的复合主码(学号+课程号) |
外码(Foreign Key) | 本关系非主码,但为其他关系的主码 | 选课表的"学号"参照学生表的主码 |
全码(All-key) | 所有属性组合才能唯一标识元组 | 教学关系R(T教师, C课程, S学生)需全码区分 |
3. 关系的数学基础
- 笛卡尔积 :
设 ( D_1, D_2, \ldots, D_n ) 为域,笛卡尔积为:
( D_1 \times D_2 \times \cdots \times D_n = { (d_1, d_2, \ldots, d_n) \mid d_i \in D_i } )- 每个元素为 n元组,如 (学号, 课程号, 成绩)。
- 基数计算:若域 ( D_i ) 基数为 ( m_i ),则总元组数为 ( \prod_{i=1}^n m_i ).
二、 关系运算
1. 关系代数
-
传统集合运算 (需并相容性):
- 并(Union) 、交(Intersection) 、差(Difference) 、笛卡尔积(Cartesian Product)。
-
专门关系运算 :
运算 符号 功能 示例 选择(σ) σ 按条件筛选行 σ_{年龄>20}(学生) 投影(π) π 选取指定列 π_{姓名, 系别}(学生) 连接(⋈) ⋈ 组合两表相关元组 学生 ⋈_{学号} 选课 除(÷) ÷ 查找"全部满足"条件的元组 选课 ÷ π_{课程号}(课程) → 选所有课的学生
2. 关系演算
- 元组关系演算:以元组为变量,如 ( { t \mid t \in 学生 \land t.年龄 > 20 } )。
- 域关系演算:以域变量为对象,如 ( { (x,y) \mid \exists z (学生(x,y,z) \land z > 20) } ).
三、关系数据库设计基本理论
1. 函数依赖(Functional Dependency, FD)
- 定义 :若关系R中任意两元组在属性集X上相等,则在Y上也相等,则称 X → Y 。
- 非平凡依赖:Y ⊄ X(常见讨论对象)。
- 完全依赖:X → Y,且X的任意真子集不能决定Y(记作 ( X \stackrel{f}{\rightarrow} Y ))。
- 部分依赖:X → Y,但存在真子集X' → Y(记作 ( X \stackrel{p}{\rightarrow} Y ))。
- 传递依赖:X → Y, Y → Z,且Y ⊄ X, Z ⊄ Y(记作 ( X \stackrel{t}{\rightarrow} Z ))。
示例:
- 选课表SC(学号, 课程号, 成绩):
- (学号, 课程号) → 成绩(完全依赖,单属性无法决定成绩)。
- 若存在"学号 → 系别",则为部分依赖(违反2NF)。
2. 范式(Normalization)
范式 | 要求 | 问题解决 |
---|---|---|
1NF | 属性值不可再分(原子性) | 消除嵌套结构(如集合、数组) |
2NF | 满足1NF,且非主属性完全依赖候选码(消除部分依赖) | 减少数据冗余(如学号→系别拆分) |
3NF | 满足2NF,且非主属性不传递依赖候选码(消除传递依赖) | 避免更新异常(如系名→系主任) |
BCNF | 满足3NF,且主属性不部分/传递依赖候选码(所有决定因素含候选码) | 强化主属性约束 |
3. 设计目标
- 减少冗余:避免数据重复存储(如学生系别存储多次)。
- 保证一致性:通过完整性约束(如外键参照)维护数据逻辑正确性。
- 优化性能:平衡范式级别与查询效率(高范式可能增加连接操作)。
典型考点与考题
-
概念辨析
题 :若关系R(教师, 课程, 学生)中,一个教师可教多门课,一门课可由多个教师教,学生可选不同教师的课,则R的候选码是?
答:全码(All-key),需所有属性组合才能唯一标识元组。 -
函数依赖分析
题 :关系R(A,B,C,D),FD={A→B, B→C, D→B},求候选码。
答:候选码为AD(A→B→C,D→B,故AD可决定所有属性)。 -
范式判断
题 :学生表(学号, 姓名, 系名, 系主任)是否满足3NF?
答:不满足(学号→系名→系主任,存在传递依赖)。 -
完整性约束
题 :外码取值规则是什么?
答:要么为空(未分配),要么等于被参照关系的主码值(如员工表的"部门号"需参照部门表的主码)。
总结 :关系数据库理论是数据库设计的基石,重点掌握术语定义 、运算规则 、函数依赖与范式,并通过实例理解完整性约束的应用。设计时需权衡范式等级与实际性能需求,避免过度规范化导致的复杂查询。