第9章 数据库技术基础
第9章 数据库技术基础
参考完整性约束

关系型数据库的
参考完整性约束可以通过外码来实现
| 选项 | 定义 | 与参考完整性约束关系 | 备注 |
|---|---|---|---|
| 主码 | 表示唯一标识每一行记录的字段或字段组合,不能为NULL | 被外码引用,确保引用的唯一性和存在性 | 主码是外码引用的目标,但不直接实现约束 |
| 候选码 | 表中能够唯一标识每一行记录的所有字段和字段组合 | 可以作为外码的引用目标,提供多种选择 | 主要用于选择主码 |
| 超码 | 包含主码在内的,能够唯一标识表中记录的一个或多个字段的集合 | 可以作为外码的引用目标,但可能包含冗余字段 | 广义概念,包含候选码和主码 |
| 外码 | 在一个表中引用另一个表的主码或候选码的字段或字段组合 | 直接用于实现参考完整性,通过外码约束确保数据一致性 | 实现表间关联和数据完整性 |
关系模式和关系代数
数据库规范化
-
1NF(第一范式) —— 消除重复字段,原子性**
举个例子(不满足1NF):
学号 姓名 电话号码 001 张三 13800000000,13900000000 上面的“电话号码”字段存了两个电话号码,用逗号隔开,不满足 1NF,因为字段不是“原子值”
满足1NF
学号 姓名 电话号码 001 张三 13800000000 001 张三 13900000000 -
2NF(第二范式) —— 消除部分依赖
要求:在1NF的基础上,消除对主键的 “部分依赖” (只依赖主键的一部分,而不是整个主键)
适合于 复合主键(由多个字段组成的主键)的情况
✅ 举个例子(不满足 2NF):课程编号 学号 学生姓名 C001 S001 张三 C002 S001 张三 主键是(课程编号, 学号)—— 一个复合主键
“学生姓名”只依赖于 “学号” ,而不是整个主键 → 部分依赖 → 不满足 2NF。
✔️ 满足 2NF(拆表):
学生表
学号 姓名 S001 张三 选课表
课程编号 学号 C001 S001 C002 S001 -
3NF(第三范式) ——消除传递依赖
要求:在2NF的基础上,消除非主属性对主键的传递依赖
✅ 举个例子(不满足 3NF):
学号 姓名 班级编号 班级名称 S001 张三 B01 计算机一班 - 主键:学号
- “班级名称” 依赖于 “班级编号”, 而 “班级编号” 又依赖于 “学号” → 转递依赖 → 不满足 3NF
✔️ 满足 3NF(拆表):学号 姓名 班级编号 S001 张三 B01 ✔️ 满足 3NF(拆表):
班级编号 班级名称 B01 计算机一班 -
4NF:将实体的码分别和每个多值属性独立构成一个关系模式




总结:范式一览
| 范式 | 核心要求 | 解决问题 |
|---|---|---|
| 1NF | 属性是原子值,不能有集合/重复字段 | 消除非原子字段 |
| 2NF | 所有非主属性完全依赖主键 | 消除部分依赖 |
| 3NF | 非主属性不传递依赖于主键 | 消除传递依赖 |
| BCNF | 主属性之间没有传递依赖和函数依赖 | |
| 4NF | 表中的一个属性组合可以独立地生成两个属性集合的所有组合,就可能违反4NF | 消除多值依赖 |

BCNF主属性之间没有传递依赖和函数依赖


由于EM可以推出其他所有属性,因此EM是主键,又因为,EM -> Q,而E -> N, M -> L 可以得出 N和L 都部分依赖于 主键,不符合2NF


4NF:将实体的码分别和每个多值属性独立构成一个关系模式
自然链接和笛卡尔积
自然连接(Natural Join)符号:
- 符号:⨝
- 例如,R⋈S 表示关系 R和 S 之间的自然连接。
- 自然连接是基于共享属性的等值连接,即自动匹配两个关系中具有相同名称的属性,并去除重复的列。
笛卡尔积(Cartesian Product)符号:
- 符号:×
- 例如,R×S 表示关系 R 和 S 之间的笛卡尔积。
- 笛卡尔积会生成所有可能的元组组合,即每个 R 中的元组与 S 中的每个元组两两配对,生成的结果集的列是 R和 S 所有列的并集。
假设关系 R(A, B, C, D) 和 S(C, D, E) 具有以下数据:
关系 R(A, B, C, D):
| A | B | C | D |
|---|---|---|---|
| a1 | b1 | c1 | d1 |
| a2 | b2 | c2 | d2 |
关系 S(C, D, E):
| C | D | E |
|---|---|---|
| c2 | d2 | e1 |
| c3 | d3 | e2 |
其中:
- A, B, C, D, E 是属性(列名)
- a1, a2, b1, b2, c1, c2, d1, d2, e1, e2 是属性对应的值(元组中的数据)。
在 笛卡尔积 中,每个 RRR 的元组会和 SSS 的每个元组 两两组合:
| A | B | C ( R) | D ( R) | C (S) | D (S) | E |
|---|---|---|---|---|---|---|
| a1 | b1 | c1 | d1 | c2 | d2 | e1 |
| a1 | b1 | c1 | d1 | c3 | d3 | e2 |
| a2 | b2 | c2 | d2 | c2 | d2 | e1 |
| a2 | b2 | c2 | d2 | c3 | d3 | e2 |
在 自然连接 中,只保留 C 和 D 相同的元组:(根据C,D相同的属性,相同的值进行连接)
| A | B | C | D | E |
|---|---|---|---|---|
| a2 | b2 | c2 | d2 | e1 |



解析: R x S (笛卡尔积) 分别用 R 和 S 组合,一共有16个元组,比较 1列小于6列,再取 345 列。
注意 3、4、 5 列对应的是 C(R)、A(S)、B(S)
第二空 属性列个数3,元组个数0(因为没有能自然连接上的)

R x S 在SQL中表示为 R,S

因为投影运算的本质是选择关系的特定属性列,生成新关系。
在关系R(A, B, C, D)中,属性A、B、C、D分别对应第1、2、3、4列。
运算π1,3®表示选取第1列和第3列,即属性A和C。
因此,π1,3®完全等价于πA,C®,两者都表示在属性A和C上的投影。
选项A. πA=1,C=3( R):错误。该写法混淆了投影和选择操作。符号“A=1”和“C=3”表示条件判断(选择行),而投影只涉及属性列的选择,不包含值过滤。迷惑性在于使用了属性名和数字,易被误读为“选择A列和C列”


元关系可以看做列数,元组个数可以看做行数




o
1=5 是R(A)=S(A),
2>8 是R(B)> S(F)
4=6 是 R(D)= S(D)
候选健、主属性、非主属性



候选键={
AB,AC}

| 概念 | 定义 | 本题中的情况 |
|---|---|---|
| 候选键 (Candidate Key) | 能唯一标识元组且最小的属性集 | {AB, AC} |
| 主键 (Primary Key) | 从候选键中选出的一个作为实际使用的唯一标识 | AB 或 AC(二选一) |
| 备用键 (Alternate Key) | 没被选作主键的其他候选键 | 如果主键=AB,则备用键=AC(反之亦然) |
| 主属性 (Prime Attribute) | 出现在任意一个候选键中的属性 | {A, B, C} |
| 非主属性 (Non-prime Attribute) | 不出现在任何候选键中的属性 | ∅(无) |

10 主码A3A5没有单独出现在剪头左边,所以肯定满足2NF 但存在伪传递率的传递函数依赖,讲解起来很麻烦,给出技巧:主码X–>属性Y。在主码X里找任意一个属性W,如果存在(属性W,属性Y)–>属性Z,则说明存在传递函数依赖。
主码A3A5没有单独出现在剪头左边,所以肯定满足2NF。若单独出现即是1NF。A3A5相当于联合主键


无损连接

第一问 CE 是能推导出所有属性的最小集属性集
第二问:
无损链接的求法:先找出候选码即CE,然后无损连接的定义是:分解后的关系模式可以还原出原关系模式。套入公式:R1交R2交R3 只有D选项得AC。所以AC可以还原原关系
关系运算


- 选择是选择 行
- 投影是选择 列
- 并 相当于自然连接
- 笛卡尔积 混合列
数据库设计

数据库设计主要分为用户需求分析、概念结构、逻辑结构和物理结构设计四个阶段。
需求分析阶段形成说明文档、数据字典和数据流程图作为概念结构设计的依据

需求分析确定系统边界,逻辑设计,关系规范化


正确步骤:
1抽象数据 - 2设计局部视图 -3合并取消冲突 - 4修改重构消除冗余
抽象最前,重构最后


规范化在逻辑设计阶段

命名冲突:
在考勤管理子系统中称为“员工”,而在档案管理子系统中称为“职工”,这属于名称不一致。
命名冲突的定义是:相同意义的属性或实体在不同分E-R图中有不同的命名
结构冲突:
结构冲突涉及实体属性数量或抽象层次不一致(如员工在A系统有5个属性,在B系统只有3个
SQL

Where是针对单条记录的判断条件Having是针对分组之后的判断条件Distinct是去掉重复 (项目号有可能重复)

ROLLBACK语句只能回滚未提交的事务,而COMMIT已经提交了

在
GRANT语句种,权限后必须使用ON关键字来连接对象
函数依赖



因为
分解保持函数依赖要求原函数依赖集F中的所有依赖都能在分解后的子模式中保留或推导出来。
原函数依赖集F = {A→B, A→C, C→D, AE→G}。
对于选项B,子模式R1(A,B,C,D)包含属性A,B,C,D,其函数依赖集F1可推导出A→B、A→C和C→D,因为这些依赖的左部和右部均在R1中。
子模式R2(A,E,G)包含属性A,E,G,其函数依赖集F2可推导出AE→G,因为A,E,G均在R2中。
因此,F = F1 ∪ F2,所有原依赖都被完整保持,分解满足条件。

函数依赖集等价的定义基于它们的闭包相等:
函数依赖集的闭包(如F+)表示所有能从该集合推导出的函数依赖的集合
如果F+ = G+,则F和G能推导出完全相同的函数依赖集,因此两者等价
事务的特性

- 隔离性: 并发事务之间相互隔离,一个事务的未提交操作对其他事务不可见
- 原子性: 事务中的所有操作作为一个不可分割单元,要么全部成功,要么全部失败
- 一致性:事务执行后,数据库必须从一种状态转换到另一种一致状态(如满足完整性约束)
- 持久性:事务提交后,其对数据库的修改是永久性的,即使系统发生故障
数据库的 内模式、模式、外模式

因为聚簇索引直接改变了数据的物理存储顺序,而数据库的三级结构中,内模式负责定义物理存储细节
| 概念 | 定义 | 关键特征 |
|---|---|---|
| 外模式 | 用户或应用看到的局部数据视图 | 通过外模式/模式映像与逻辑模式隔离 |
| 模式 | 全局逻辑结构(如ER模型、表关系) | 独立于存储细节、是数据库设计的核心 |
| 内模式 | 数据物理存储方式(如文件组织、索引) | 直接管理存储效率、聚簇索引归属此层 |
Armstrong公理系统

| 规则名称 | 定义 | 说明 |
|---|---|---|
| 自反律 | 若Y ⊆ X ⊆ U,则X→Y | 描述平凡函数依赖(如部分属性决定自身) |
| 增广率 | 若X→Y,则XZ→YZ(Z为任意属性集) | 允许在依赖两侧添加相同属性 |
| 传递律 | 若X→Y且Y→Z,则X→Z | 基础传递关系,类似逻辑推理 |
| 合并规则 | 若X→Y且X→Z,则X→YZ | 由增广律和传递律推导,用于合并右部 |
| 伪传递规则 | 若X→Y且WY→Z,则XW→Z | 本题核心,是传递律的泛化(引入W) |
| 分解规则 | 若X→Y且Z ⊆ Y,则X→Z | 自反律的逆应用,用于分解右部 |

定理:自反、传递、增广;推到规则:合并、伪传递、分解
数据库安全

存储过程时是预编译SQL集合、通过名称和参数调用
数据库视图

数据字典是数据库管理系统存储元数据的核心组件,负责保存所有数据库对象的定义信息。
视图作为一种虚拟表,其本质是一个查询定义的映射,数据字典中会记录该视图的完整定义(包括创建视图的SQL语句)。
因此,当创建user1视图时,数据字典保存的是视图的定义内容,而非临时数据或基本表实体。
E-R图多对多关系转换

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)