系统架构设计师(三):数据库系统

系统架构设计师(三):数据库系统

引言

本文对应《系统架构设计师教程》(以下简称官方教材 )第二章 2.3.3 数据库及第六章**数据库设计基础知识 **的内容。本文重点聚焦在第六章。

数据库概念

数据:数据库存储的基本对象,是描述事物的符号记录。数据种类包括:文本、图形、图像、音频、档案记录等。

数据库DB:长期存储在计算机内、有组织、可共享的大量数据的集合。

数据库基本特征

  • 数据按一定的数据模型组织、描述和存储。
  • 可为用户共享。
  • 冗余度小。
  • 数据独立性高。
  • 易扩展。

数据库系统

数据库系统DBS:采用数据库技术,有组织、动态存储大量相关数据,方便用户访问,由以下四部分组成:

  1. 数据库:统一管理、长期存储在计算机内,有组织的相关数据的集合。
  2. 硬件:构成计算机系统包括存储数据所需要的外部设备。
  3. 软件:操作系统、数据库管理系统及应用程序。
  4. 人员:系统分析和数据库设计人员、应用程序员、最终用户、数据库管理员DBA。

数据库管理系统DDMS

实现对共享数据有效的组织、管理和存取,包括数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。

数据库三级模式与两级映像

数据库三级模式

  • 外模式:对应数据库视图层,将表进行一定的处理后提供给用户使用。
  • 模式:对应逻辑层,又称逻辑模式,根据应用、需求将物理数据划分成一张张表。
  • 内模式:对应物理层,管理如何存储物理的数据。

数据库两级映像

  • 外模式-模式映像:是表和视图之间的映射,存在于概念级和外部级之间。如果表中的数据发生了修改,只需要修改此映射关系,而无需修改应用程序。
  • 模式-内模式映像:是表和数据的物理存储直接的映射,存在于概念级和内部级之间。如果修改了数据存储方式,只需要修改此映射关系,而无需修改应用程序。

数据库设计

  1. 需求分析:获得用户对系统的三个要求:信息要求、处理要求、系统要求。产出物有:数据流图数据字典需求说明书
  2. 概念结构设计:设计E-R图,即实体-联系图,工作步骤包括:选择局部应用逐一设计分E-R图E-R图合并 。产出物:E-R图
  3. 逻辑结构设计:将E-R图转成关系模式,工作步骤包括:确定数据模型E-R图转为指定的数据模型确定完整性约束和确定用户视图 。产出物:关系模式
  4. 物理设计:确定数据该如果存储到物理空间,工作步骤包括:确定数据分布存储结构访问方式 。产出物:数据存储方式与访问方式
  5. 数据库实施阶段:根据逻辑设计和物理设计阶段的结果,建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
  6. 数据库运行和维护阶段:数据库应用系统经过试运行即可投入运行,该阶段需要不断对系统进行评价、调整与修改。

E-R图合并冲突

  • 属性冲突:同一实体的同一个属性在不同的分E-R图中,取值或者数据类型不一样。例如学号在一个分E-R图中用的是数值类型,在另一个分E-R图中用的是字符串类型。解决方式:协商统一。
  • 命名冲突:同一实体的相同意义的属性,在不同的分E-R图有不同的意义,包含同名异议和异名同义。例如手机号在一个分E-R图中用的是"手机号",在另一个分E-R图中用的是"联系方式"。解决方式:协商统一。
  • 结构冲突:同一个实体,在不同的分E-R图中属性个数和属性排列次序不完全相同。解决方式:个数不同:保留较多的结构,缺省部分补充。

键和属性

  • 超键:能唯一标识表中属性的组合
  • 候选键:超键中去掉冗余的属性,剩余属性就是候选键,候选键可以有一个,也可以有多个。
  • 主键:任选一个候选键,即可作为主键。
  • 外键:其他表中的主键。
  • 主属性:候选键内的属性为主属性,其他属性为非主属性。
  • 简单属性:属性不可拆分。
  • 复合属性:属性可拆分,例如地址信息,可拆分为省市区。
  • 派生属性:可以通过计算得出的属性,例如年龄,可以通过出生日期计算。
  • 多值属性:一个属性取值有多个,如一个人可以有多个联系方式。

候选键判定

  1. 将关系模式的函数依赖关系用"有向图"的方式表示。
  2. 找入度为0的属性,并以该属性集合为起点,遍历有向图,如果能正常遍历图中所有节点,则该属性为关系模式的候选键。
  3. 如果入度为0的属性集合不能遍历所有节点,则需要尝试将中间节点并入属性集合中,直到该集合能遍历所有节点。

完整性约束

  • 实体完整性约束:即主键约束,主键值不能为空,不可重复。
  • 参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。
  • 自定义完整性约束:根据用户需求自定义,如性别只能是男、女。

数据模型

数据模型分类

关系模型二维表形式表示的实体-联系模型,是将实体-联系模型转换而来的,经过开发人员设计的。
概念模型:从用户的角度进行建模的,是现实世界到信息世界的第一抽象,是真正的实体-联系模型。
网状模型:实体类型及其实体之间的联系,一个事物和另外几个事物都有联系,形成一张网。
面向对象模型:采用面向对象的方法设计数据库,以对象为单位,每个对象包括属性和方法,具有类和继承等特点。

数据模型三要素

  • 数据结构:所研究的对象类型的集合。
  • 数据操作:对数据库中各种对象的实例允许执行的操作的集合。
  • 数据的约束条件:一组完整性规则的集合。

E-R图

E-R图用来描述概念数据模型,使用椭圆表示属性长方形表示实体、嵌套长方形表示弱实体(一般没有)、菱形表示联系,联系两端要写联系类型(1对11对多多对多 )。如下图学生选课E-R图:

关系代数

集合运算

集合运算:将每一行都作为一个整体进行计算,包含并运算(∪)、交运算(∩)、差运算(-),它们要求运算对象和运算结果结构相同。

并运算(∪)

并运算:S1∪S2:结果是两张表中所有记录数合并,相同记录只显示一次。

交运算(∩)

交运算:S1∩S2:结果是两张表中相同的记录。

差运算(-)

差运算:S1-S2:结果是S1表中有而S2表中没有的那些记录。

一元运算

一元运算:针对单张表或单个关系模式结果的运算,包括投影(π)和选择(δ)。

投影(π)

投影:类似查询语句中的Select后面的数据列,按条件选择某关系模式中的某列,列也可以用数字表示。例如从S1中选择Sno列和Sname列:

从上述结果可以看出,投影会改变表结构。

选择(δ)

选择:类似查询语句中的Where条件,按条件选择某关系模式中的某条记录。例如从S1中选出学号为N001的数据行:

复杂运算

复杂运算:主要包含笛卡尔积(*)和自然连接(⨝),它们允许运算对象和运算结果结构不同。

笛卡尔积(*)

笛卡尔积:S1*S2:类似查询语句中的联合查询(S1,S2),结果包括S1和S2的所有属性列,并且S1中的每条记录依次和S2中的所有记录组合成一条新的记录,最终属性列为S1+S2属性列,记录数为S1的记录数*S2的记录数。

自然连接(⨝)

自然连接:显示全部的属性列,去除重复属性列,显示两个关系模式中属性相同且值相同的记录,即所有同名属性列取值相等。

上述自然连接结果,相当于:
S 1 ⨝ S 2 = π 1 , 2 , 3 , 5 ( δ 1 = 4 ( S 1 ∗ S 2 ) ) S1⨝S2 = π_{1,2,3,5}(δ_{1=4}(S1*S2)) S1⨝S2=π1,2,3,5(δ1=4(S1∗S2))
关系代数中,自然连接的性能优于笛卡尔积。

规范化理论

函数依赖

函数依赖:给定一个X,能确定唯一一个Y,就称X确定Y,或者说Y依赖于X。函数依赖又分为部分函数依赖和传递函数依赖:

  • 部分函数依赖:A可以确定C,(A, B)可以确定D,(A, B)中的一部分A可以确定C,则称为部分函数依赖。
  • 传递函数依赖:当A和B不等价时,A可以确定B,B可以确定C,则A可以确定C,称为传递函数依赖。

函数依赖定律

  • 自反律:若Y⊆X⊆U,则X → Y。
  • 增广律:若X → Y,且Z⊆U,则XZ → ZY。
  • 传递律:若X → Y,Y →Z,则X → Z。
  • 合并律:若X → Y,X → Z,则X → YZ。
  • 伪传递律:若X → Y,WY → Z,则XW → Z。
  • 分解律:若X → Y,Z⊆Y,则X → Z。

范式

第一范式1NF

关系中每个属性不可再分,即每个属性都只能是简单属性,不能是复合属性。

上图不满足第一范式,因为地址属性可以再分,无法在数据库中建表。

第二范式2NF

在第一范式的基础上,消除非主属性对候选键的部分函数依赖,则属于第二范式。

上图不满足第二范式,因为候选键为(学号, 课程号),而学生姓名依赖于学号,存在非主属性对候选键的部分函数依赖。

如果想解决上述问题,则需要把学号和学生姓名拆成一张表:S1(学号, 课程号, 成绩);S2(学号, 学生姓名)。

如果候选键有且仅有一个,且满足第一范式,则一定也满足第二范式,因为候选键不可拆分,不存在部分函数依赖。

第三范式3NF

在第二范式的基础上,消除非主属性对候选键的传递函数依赖,则属于第三范式。

上图不满足第二范式,因为候选键为(学号),班级名称依赖于班级号,班级号依赖于学号,存在非主属性对候选键的传递函数依赖。

如果想解决上述问题,则需要把班级号和班级名称拆成一张表:S1(学号, 学生姓名, 班级号);S2(班级号, 班级名称)。

BC范式BCNF

在第三范式的基础上,消除主属性对候选键的部分和传递函数依赖,则属于第BC范式。

不是所有的关系都能拆分到BC范式。

假设存在关系模式R(S, T, J)存在关系F={(SJ→ T),(T → J) },其中候选键为(ST, SJ),所有属性都为主属性,不存在非主属性,则满足第三范式;存在(T → J)的部分函数依赖,因此不满足BC范式。

第四范式4NF(了解即可)

不允许存在多值函数依赖。

模式分解

保持函数依赖

定理:如果关系模式 R分解为 R1、R2...Rn,则保持函数依赖要求:

原模式 R中的所有函数依赖(FD),可以由分解后各子模式 Ri中的函数依赖逻辑蕴含(即通过子模式的 FD 推导得出)。

例1:关系模式R(A,B,C),F={A→B, B→C},将其拆分成R1(A,B),R2(B, C),属于函数依赖。

例2:关系模式R(A,B,C),F={A→B, B→C, A→C},将其拆分成R1(A,B),R2(B, C),属于函数依赖:因为R1(A,B),R2(B, C),A→B, B→C,逻辑蕴涵A→C。

可以通过推导得出的函数依赖,称为冗余函数依赖,在考虑是否保存函数依赖时,可以将其忽略,如例2中的A→C。

无损分解

将一个关系模式分解成若干个关系模式,通过自然连接和投影等运算,仍然能还原到原来的关系模式,称为无损分解。

如果两个关系模式没有同名属性列,则一定是有损分解。

定理:如果关系模式R分解为R1、R2,则R1、R2无损分解的充分必要条件是:

R1∩R2 → (R1 - R2) 或 R1∩R2 → (R2 - R1)。

R1∩R2结果为∅,则一定是有损分解。

数据控制

安全性

措施 说明
用户标识和鉴定 最外层的安全保护措施,可以使用用户账户、口令及随机数检验等方式。
存取控制 对用户授权,包含操作类型(如增、删、改、查等)和数据对象(主要是数据范围)的权限。
密码存储和传输 对远程终端信息用密码传输。
视图保护 对视图进行授权(视图不可修改)。
审计 使用一个专用文件或数据库,自动将用户对数据的所有操作记录下来。

故障恢复

  • 冷备份:也称静态备份,将数据库正常关闭,在停止状态下,将数据库文件全部备份下来,是最简单、高度安全的。
  • 热备份:也称动态备份,利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来,恢复速度最快,但一旦备份失败,备份可能完全不可用,难以维护。
  • 完全备份:备份所有数据
  • 差量备份:仅备份上一次完全备份之后变化的数据。
  • 增量备份:备份上一次备份后变化的数据。
故障关系 故障原因 解决方法
事物本身的可预期故障 本身逻辑 在程序中预先设置Rollback语句。
事物本身的不可预期故障 算术溢出、违反存储保护 由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态。
系统故障 系统停止运转 使用检查点法。
介质故障 外存被破坏 使用日志重做业务。
相关推荐
l1t17 分钟前
psql 中的流水线操作(PostgreSQL 18)
数据库·人工智能·postgresql
enfpZZ小狗19 分钟前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
Geek攻城猫20 分钟前
深入理解 SQL 多字段排序:从基础到高级技巧
数据库·sql
洛_尘25 分钟前
MySQL 7:数据库设计
数据库·mysql
heze0932 分钟前
sqli-labs-Less-22
数据库·mysql·网络安全
墨雨晨曦8844 分钟前
如何保证redis和mysql数据一致性方案对比
数据库·redis·mysql
鱼跃鹰飞1 小时前
面试题:Kafka的零拷贝的底层实现是什么?是MMAP还是sendFile还是其他的?
分布式·kafka·系统架构
Ulyanov1 小时前
PyVista战场可视化实战(三):雷达与目标轨迹可视化
开发语言·人工智能·python·机器学习·系统架构·tkinter·gui开发
Ankie Wan1 小时前
AUTOSAR: Automotive Open System Architecture(汽车开放系统架构)
系统架构·汽车·ecu·autostar
枷锁—sha1 小时前
【Vulhub】Discuz! 7.2 faq.php SQL 注入深度复现手册 (转义逃逸篇)
数据库·sql·php