系统架构设计师备考第30天——关系数据库

一、 关系数据库基本概念

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. 设计目标
  • 减少冗余:避免数据重复存储(如学生系别存储多次)。
  • 保证一致性:通过完整性约束(如外键参照)维护数据逻辑正确性。
  • 优化性能:平衡范式级别与查询效率(高范式可能增加连接操作)。

典型考点与考题

  1. 概念辨析
    :若关系R(教师, 课程, 学生)中,一个教师可教多门课,一门课可由多个教师教,学生可选不同教师的课,则R的候选码是?
    :全码(All-key),需所有属性组合才能唯一标识元组。

  2. 函数依赖分析
    :关系R(A,B,C,D),FD={A→B, B→C, D→B},求候选码。
    :候选码为AD(A→B→C,D→B,故AD可决定所有属性)。

  3. 范式判断
    :学生表(学号, 姓名, 系名, 系主任)是否满足3NF?
    :不满足(学号→系名→系主任,存在传递依赖)。

  4. 完整性约束
    :外码取值规则是什么?
    :要么为空(未分配),要么等于被参照关系的主码值(如员工表的"部门号"需参照部门表的主码)。


总结 :关系数据库理论是数据库设计的基石,重点掌握术语定义运算规则函数依赖与范式,并通过实例理解完整性约束的应用。设计时需权衡范式等级与实际性能需求,避免过度规范化导致的复杂查询。

相关推荐
小心草里有鬼2 小时前
Linux 数据库 Mysql8 主从复制
linux·运维·数据库·sql·mysql
chen_note2 小时前
Keepalived两个集群实验
linux·服务器·数据库·keepalived·高可用集群
boy快快长大3 小时前
@Transactional 事务注解
数据库·sql·oracle
大白的编程日记.3 小时前
【MySQL学习笔记】数据库的CURD(一)
数据库·学习·mysql
不剪发的Tony老师4 小时前
RedisFront:一款免费开源的跨平台Redis客户端工具
数据库·redis·redisfront
什么半岛铁盒5 小时前
C++项目:仿muduo库高并发服务器--------Any类的实现
linux·服务器·数据库·c++·mysql·github
love530love5 小时前
EPGF 架构为什么能保持长效和稳定?
运维·开发语言·人工智能·windows·python·架构·系统架构
努力学习的小廉5 小时前
初识MYSQL —— 数据库基础
android·数据库·mysql
禁默5 小时前
MySQL 表约束实战指南:从概念到落地,守护数据完整性
数据库·mysql