系统架构设计师备考第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. 完整性约束
    题 :外码取值规则是什么?
    答:要么为空(未分配),要么等于被参照关系的主码值(如员工表的"部门号"需参照部门表的主码)。


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

相关推荐
用户8662978480082 小时前
抓包看 KingbaseES 内部协议?官方给了个现成工具
数据库
wefg12 小时前
【Redis】安装与启动
数据库·redis·缓存
大圣编蚕2 小时前
常见的 Redis 面试题(高频整理)
数据库·redis·缓存
派小心.3 小时前
网站统计采样数据的误差核对
大数据·服务器·前端·数据库·人工智能·小程序·数据分析
龙腾AI白云3 小时前
数字孪生、具身智能、世界模型三者交叉
数据库·人工智能·机器学习·flask·pygame
SelectDB技术团队4 小时前
Apache Doris 基于 Lance 的向量检索深度解析
数据库·数据仓库·数据分析·湖仓一体·apache doris·lakehouse·多模湖仓
这个DBA有点耶4 小时前
从INDEX到JOIN_ORDER:MySQL 8.0 Hint语法体系与五类实战场景
数据库·mysql·架构
数字新视界4 小时前
机房动环监控助力智能管理
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
梅菲塔亚4 小时前
博客_Redis入门到实战
数据库·redis·缓存
abcyuu4 小时前
用友 U8 Cloud 生产制造模块深度解析:从 BOM 建立到成本核算的技术实现
前端·数据库·制造