软件工程师——(四)数据库系统(综合题、案例分析题、论文都有可能涉及到其中相关的知识)

366 阅读18分钟

1. 数据库模式

1. 三级模式———两级映射(一般以选择题的形式出现)

img_6_4_1_1.png

  • 图示分析
    • 1、最底层是一个物理数据库(在计算机上面的表示往往就是一个文件)
    • 2、内模式———又称为物理级数据库,其和物理层次的数据库直接关联,主要关注点在于如何存储一系列的数据
    • 3、概念模式———又称为概念级数据库,即我们使用数据库时的数据库表这一级别
    • 4、外模式———对应数据库的视图,更加安全灵活的组织数据的方式
    • 5、外模式-概念模式映射———表和视图之间的一种映射关系,当表发生变化的时候只需要改映射不用改动程序
    • 6、概念模式-内模式映射———内部存储形式表情况的一种映射关系,当存储结构发生改变只需要调整映射关系,而不需要修改用户程序,从而应对此变化
    • 7、用户的应用程序层次用户级数据库

2. 数据库的设计过程

img_6_4_2_1.png

  • 需要掌握的知识
    • 1、整个设计过程的流程如何进行
      • 1)需求分析———看整个系统对数据的要求(用户处收集、转化过程产生的等)
      • 2)概念结构设计———主要做ER模型(一种与数据库管理系统没有关系的模型,是一种数据的表达,看数据的实体包含的属性以及实体之间的联系,可以转化成任意类型`的数据库)
      • 3)逻辑结构设计———ER模型转换为关系模式,即转换成文字表达,一个个表的形式,转化过程中涉及的规范化理论
      • 4)物理设计———融入DBMS(数据库管理系统)特性
    • 2、每个阶段会有不同的产出物
      • 1)需求分析———数据流图数据字典需求说明书
      • 2)概念结构设计———ER模型
      • 3)逻辑结构设计———关系模式

2. ER模型———数据库的设计

img_6_4_2_1.png

  • 集成的方法
    • 多个局部E-R图一次集成
    • 逐步集成,用累加的方式一次集成两个局部E-R图
  • 集成产生的冲突及解决办法
    • 属性冲突———包括属性域冲突和属性取值冲突
    • 命名冲突———包括同名异义和异名同义
    • 结构冲突———包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同
  • ER模型转关系模式 img_6_4_2_2.png
    • 关系模式转换说明
      • 1:1联系———可以将联系合并到任意一方实体(外键)
      • 1:n联系———可以将联系合并到n方实体(子表外键)
      • m:n联系———联系必须转化为一个实体(多对多关系表)
    • 实例分析
      • A\B\C三个实体需要各转换为一个实体(3)
      • 中间的关系为m:n联系,所以也需要转成一个实体(1)
      • 所以至少需要(3+1=4)个实体

3. 关系代数与元祖演算———数据库的设计

1. 关系代数(主要在综合知识题中以选择题的形式出现)

img_6_4_3_1.png

  • 交———典型的集合运算———获取公共部分,形成一个新的集合
  • 并———典型的集合运算———将两个集合的内容并在一起,并且两个集合共有的数据只显示一次

img_6_4_3_2.png

  • 差———典型的集合运算———获取前一个集合有的,而后一个集合没有新集合

img_6_4_3_3.png

  • 笛卡尔积———前面字段来自前者,后面字段来自后者,前者的每一条数据记录依次和后者的每一条记录拼接
  • 投影———对进行选择的过程(选出需要的列),有的时候写属性的时候使用的是属性名,也可以使用序列号(序列号从1开始)
  • 选择———对进行选择的过程(选的是记录),有的时候写属性的时候使用的是属性名,也可以使用序列号(序列号从1开始)

img_6_4_3_4.png

  • 联接———和笛卡尔积的区别是,联接操作会把联接对象都有的字段只保留一个;自然联接(没有标明联接属性时)相同字段做等值联接

4. 规范化理论———数据库的设计

1. 函数依赖

img_6_4_4_1.png

  • 部分函数依赖———A、B组合键确定C,A单独也可以确定C———此时主键的一个部分也可以确定某一个属性,称之为部分函数依赖
  • 传递函数依赖———A可以确定B,B可以确定C,此时可以得到推论A可以确定C———但是B不可以确定A,否则认定A和B是等价的,此时就不存在传递

2. 价值和用途

  • 规范化理论的作用————解决非规范化关系模式存在的一系列问题 img_6_4_4_2.png
    • 数据冗余———DNO已经可以确定DNAME,还存了DNAME
    • 更新异常———只改了一部分的DNAME,此时出现同DNO的DNAEM不一致
    • 插入异常———两个属性的组合作为主键,此时两个关键字的一个不明确时,无法插入数据
    • 删除异常———删除所有数据好,发现不该删除的也被删除了

3. 键(主属性———该属性作为候选键的一部分)

img_6_4_4_3.png

1. 超键(补充了解)

  • 说明
    • 唯一标识元组的键,唯一标识元组可以是单个属性,也可以是属性的组合
      • 例如:学号、姓名、性别属性(学号单独可以确定性别,学号和姓名的组合键也可以确定性别)

2. 候选键(需掌握)

  • 说明
    • 超键的基础上消除多余属性的键
      • 例如:学号和性别的组合键此时也可以称为超键,但是存在冗余属性,其不能称之为候选键
  • 求候选键过程说明(考点)
    • 1、将关系模式的函数依赖关系用“有向图”的方式表示
    • 2、找入度为0的属性,并以该属性集合起点,尝试遍历有向图,若能正常遍历图中的所有结点,则该属性集即为关系模式的候选键
    • 3、若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度、也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键
  • 求候选键实例(考点———画图注意组合键需先融合,再指向) img_6_4_4_3.png
    • 例题1分析:
      • 1)入度为0的属性集合为{A1}
      • 2)通过属性A1可以到A2(A1->A2)
      • 3)通过属性A1可以到A3(A1->A2->A3)
      • 4)通过属性A1可以到A4(A1->A2->A4)
      • 5)所以候选键为{A1}
    • 例题2分析:
      • 1)入度为0的属性集合为{A、B、C、D}
      • 2)通过属性集合{A、B、C、D}可以到E(A、B、D->E)
      • 3)通过属性集合{A、B、C、D}可以到F(B->F)
      • 4)通过属性集合{A、B、C、D}可以到G(A、B->G)
      • 5)通过属性集合{A、B、C、D}可以到H(A、B->G->H)
      • 6)通过属性集合{A、B、C、D}不可以到I,需要加入J(C、J->I)
      • 7)通过属性集合{A、B、C、D}可以到J(C->J)
      • 5)所以候选键为{A、B、C、D、J}
    • 例题3分析:
      • 1)入度为0的属性集合为空
      • 2)通过属性A可以到B(A->B)
      • 3)通过属性A可以到C(A->C)
      • 4)所以候选键包含A
      • 5)通过属性B可以到A(B->A)
      • 6)通过属性B可以到C(B->A)
      • 7)所以候选键包含B
      • 8)通过属性C不可以到A,也不可以到C
      • 9)所以候选键不包含C
      • 10)所以候选键为{A}和{B}

3. 主键

  • 说明
    • 任意一个候选键对可以作为主键
    • 主键只能有一个,但是候选键可以存在多个

4. 外键

  • 说明
    • 其他关系主键
    • 标识出来外键,便于与其他表做关联查询使用

4.范式(常考,需掌握)

img_6_4_4_4.png

1. 第1范式(1NF)

img_6_4_4_5.png

  • 要求解析
    • 属性值都是不可分的原子值(一个属性值不可以拆分成几个属性)
  • 示例 img_6_4_4_6.png
    • 分析说明
      • 1、从表中可以看到包含(系名称、高级职称人数、教授、副教授)属性
      • 2、由于高级职称人数可以细分为教授、副教授,所以不满足1NF
      • 3、可以去掉高级职称人数属性,从而达到1NF

2. 第2范式(2NF)

img_6_4_4_7.png

  • 要求
    • 满足第1范式
    • 消除非主属性候选键部分依赖
  • 示例 img_6_4_4_8.png
    • 分析说明
      • 0、关系表中属性都是独立属性(达1NF要求),CNO(课程号)和SNO(学号)共同组成组合主键
      • 1、CNO(课程号)作为主键的一部分可以确定CREDIT(学分)
      • 2、此时产生如下问题
        • 1)数据冗余———学分被存了好多次
        • 2)更新异常———只修改其中一条记录的学分,出现同一个课程不同学分问题
        • 3)插入异常———新增一门课程,此时还没人选,不存在学号(组合主键的一部分)的数据无法插入该表问题
        • 4)删除异常———删除某一门课所有学生的信息后,导致课程信息丢失问题
      • 3、通过拆分解决(提取CNO和CREDT属性作为新的表,原表中移除CREDT属性),从而达到2NF

3. 第3范式(3NF)

img_6_4_4_9.png

  • 要求
    • 满足第2范式
    • 消除非主属性候选键传递依赖
  • 示例 img_6_4_4_10.png
    • 分析说明
      • 1、单属性组成的主键,则满足了2NF
      • 2、但是也存在,如下问题
        • 1)数据冗余———系名和楼号被存了好多次
        • 2)更新异常———只修改其中一条记录的系名或楼号,出现同一个系号不同系名或楼号问题
        • 3)插入异常———新增一个院系信息,此时还没学生,不存在学号(主键)的数据无法插入该表问题
        • 4)删除异常———删除某一系所有学生的信息后,导致院系信息丢失问题
      • 3、通过拆分解决(提取DNO、DNAME、LOCATION属性作为新的表,原表中移除DNAME、LOCATION属性),从而达到3NF

4、BC范式(BCNF)

img_6_4_4_11.png

  • 要求
    • 满足第3范式
      • 消除主属性候选键传递依赖(写出所有函数依赖,左边部分(即决定因素)必须都是候选键)
  • 示例 img_6_4_4_12.png
    • 分析说明
      • 1、分析可知{S、J}{S,T}是候选键
      • 2、所以此时S、J、T都是主属性(主属性———该属性作为候选键的一部分),没有非主属性,所以此时满足3NF
      • 3、{S、J}->T、T->J,此时{S、J}是候选键T并不是候选键,此时该关系模式不满足BCNF

5. 规范化理论综合例题

img_6_4_4_13.png

  • 解题思路(答案————C、D、A)
    • 0、注意基本原则———选择题找出最接近正确答案
    • 1、表1部门号可以直接充当主键,因此不存在部分函数依赖问题
    • 2、表4结果展示了某个部门员工的销售额,因此表1,2,3缺少部门和员工之间的关系表,以及每个员工的销售额表.
    • 3、又因为员工部门多对一的关系,所以需要在表3(员工表)增加一个部门号,同时新增销售表(A———满足、B———商品号可以确定商品名称,商品名称冗余、C———没有体现销售的商品,且部门号冗余(第二部已经增加部门和职工的关系)、D———没有体现销售的销量,部门号冗余(第二部已经增加部门和职工的关系))

6、模式分解(两个分解,一个要求)

img_6_4_4_14.png

1. 分解模式分类

1. 保持函数依赖分解
  • 1、说明
    • 分解前有哪些函数依赖,分解之后这些函数依赖仍然存在
  • 2、示例说明
    • 存在关系模式R(A,B,C),A->B,B->C,分成两个关系R1(A,B)模式和R2(B,C),这种分解模式满足保持函数依赖分解,因为R1保证了A->B,R2-保证了B->C
2. 无损分解
  • 1、说明
    • 有损———分解后不能还原原关系模式
    • 无损———分解后可以还原原关系模式
  • 2、例题说明 img_6_4_4_15.png
    • 分析思路
      • 1、因存在学号->姓名函数依赖,通过关系模式成绩(学号,课程号,分数)学生(学号,姓名),可得到关系模式成绩(学号,课程号,分数,姓名)
      • 2、再因存在课程号->课程名函数依赖,通过关系模式成绩(学号,课程号,分数,姓名)课程(课程号,课程名),可得到关系模式成绩(学号,课程号,分数,姓名,课程号)
      • 3、因此此分解后可以还原原关系模式,是一种无损分解

2. 判别无损分解的方式

1. 列表法(将拆分的表尝试进行连接操作还原的过程)

img_6_4_4_16.png img_6_4_4_17.png

  • 分析说明
    • 1、初始表———说明
      • 1)第一行描述原关系所拥有的属性
      • 2)第一列描述拆分关系模式
      • 3)a代表当前关系模式拥有该属性,下标代表所处的列
      • 4)b代表当前关系模式不拥有该属性 ,下标代表所处的行和列
    • 2、根据每一个函数依赖,对表进行分析
      • 1)判断在每一行中,依赖关系前者在该行的属性对应的符号为a的,那么将依赖关系后者在该行的属性对应符号改变为a,下标代表所处的列
      • 2)处理完所有的依赖关系
    • 3、只要有一行全部为a,即还原了原关系,那么就是无损分解
2. 公式计算法(局限性比较强———只适合为一分为二的分解)

img_6_4_4_18.png

  • 分析说明
    • 1、分解出来的两个属性集合(R1)(R2)交集(R1∩R2),得到其结果集Rn=R1和R2共有的属性
    • 2、然后互相做差集(R1-R2)和(R2-R1),分别得到其结果集R12=从R1中去除R2包含的属性R21=从R2中去除R1包含的属性
    • 3、如果R12或R21Rn有函数依赖关系,即存在Rn->R12Rn->R21原依赖关系存在,那么就是无损分解

5. 并发控制

img_6_4_5_1.png

1. 事务

  • 1、说明———将多个操作封装起来,当作一个整体来操作(事物中的操作要么全做,要么都不做)
  • 2、事物的特性
    • 1)原子性———将整个事物看作一个不可拆分原子操作
    • 2)一致性———事物执行前后,数据是始终保持一致状态的(类似能量守恒)
    • 3)隔离性———事物之间是独立进行的,互不影响
    • 4)持续性———事物执行之后,结果影响是持续的

2. 并发

  • 1、说明———并发操作有利于提高操作的效率

3. 并发过程中产生的问题

img_6_4_5_2.png

4. 封锁协议———并发问题解决方案

image.png

  • 1、X锁———写锁———写锁加上之后,不能在其基础上加任何的锁
  • 2、S锁———读锁———读锁加上之后,还可以在其基础上加读锁,但是不能加写锁

5. 死锁问题

  • 1、预防法
  • 2、死锁的解除法

6. 数据库完整性约束———提高数据可靠性的一种机制

0. 基本思想———数据有问题不应该被录入进去

1. 分类———如下三种只能应对简单的情况

  • 1、实体完整性约束
    • 即在使用数据库时,给数据表定义主键,来实现数据库的实体完整性约束
  • 2、参照完整性约束
    • 即在使用数据库时,给数据表定义外键,来实现数据库的参照完整性约束
  • 3、用户自定义完整性约束
    • 即在使用数据库时,给数据表对应字段设置自定义的要求,比如:设置该字段数据大于10且小于100,来实现数据库的用户自定义完整性约束

2. 触发器———应对复杂的情况

  • 1、通过写脚本来约束数据库数据的一些要求

3. 数据库安全

image.png

  • 1、说明
    • 在数据库的领域来应用一些安全措施,从而提高数据库的安全性
  • 2、相关措施说明
    • 1、用户标识和鉴定———即身份认证
      • 操作数据库的时候,需要认证身份(用户需要输入账号和口令)
    • 2、存取控制———即对用户进行授权
      • 不同级别的用户有不同的操作权限
    • 3、密码存储和传输———即远程加密传输
      • 对远程终端信息进行加密传输
    • 4、视图的保护———即限定操作局部数据和视图授权
      • 视图可以限定操作局部的数据和对视图进行授权来控制不同权限用户可以使用不同的视图
    • 5、审计——即一种事后的机制,是一种标准的安全机制的手段
      • 可以将用户对数据库的操作,用日志的方式记录下来,对日志记录进行分析

4. 数据库备份与恢复———比较重要

image.png image.png

1. 考点

  • 1、常见备份形式的优缺点
  • 2、常见备份形式的运作方式

2. 分类方式及其优缺点

  • 1、分类方式一———依据备份形式
    • 1、冷备份
      • 优点———简单速度快维护技术要求不高不易出问题复杂度低
      • 缺点———数据库备份阶段,用户无法进行使用文件级别的拷贝,备份单元无法精确到表级别
    • 2、热备份
      • 优点———备份和恢复单元可以精确到表级别恢复速度快(可以有选择性的恢复指定部分)
      • 缺点———复杂度高不能出错,否则后果严重(热备份同时在跑业务,一旦出错恢复很麻烦)
  • 2、分类方式二———依据备份数据量
    • 1、完全备份———备份整个数据库数据
    • 2、差量备份———针对上一次完全备份之后,变化的数据进行备份
      • 优点———备份速度慢
      • 缺点———恢复比较方便,直接恢复上一次完全备份数据,和本次差量备份数据
    • 3、增量备份———针对上一次备份结果之后的变化数据
      • 优点———备份速度快
      • 缺点———恢复比较麻烦,需要按照备份时间顺序,逐个恢复每个增量版本的数据

3. 事务日志文件

  • 1、说明
    • 1、事物日志———记录事物日志的文件
  • 2、运作机制
    • 1、在做增删改操作的时候,会先进行写操作日志(那个表、那个数据、进行何种操作),记录运行的SQL脚本
    • 2、然后写数据文件
    • 3、一旦写数据文件出现故障,可以找出日志,看进行了何种操作,然后重新进行操作

4. 数据库故障与恢复

image.png

7. 数据仓库与数据挖掘

1. 数据仓库

image.png

1. 数据库与数据仓库的差异———从发展历程角度阐述

  • 1、数据库是根据业务的需求,记录业务处理需要记录的数据,就形成了数据库
  • 2、数据库系统运行时间长了之后越来越慢,从而需要优化,此时就提出通过删掉一些历史数据
  • 3、直接删掉,此时就会觉着可惜,于是又提出单独存储起来
  • 4、该单独存储的数据又不会进行频繁的删改操作,而是需要进行大规模的查询统计功能,所以发现在的优化思路上,对于这种存放历史数据的数据库和存放业务数据的数据库是不相同
  • 5、因而对于这种存放历史数据的数据库单独提取出来,叫做数据仓库

2.数据仓库特点

  • 1、面向主题的,而不是面向应用———可以从不同的仓库中按主题组合提取数据
  • 2、集成的———比如周报表、月报表、季度报表等阶段性集成数据
  • 3、相对稳定的(非易失的)———存入的数据不再进行删除和修改操作
  • 4、反映历史变化(随着时间变化)———隔段时间就会导入新的数据

2.数据挖掘

image.png

8. 数据库新理念和新应用

1. 反规范技术

image.png

2. 大数据基本概念

image.png

  • 1、说明
    • 对海量数据处理的相关技术
  • 2、特点(4V)
    • 数据量极大
    • 处理速度要快
    • 数据具备多样性
    • 有一定的价值
  • 3、需要了解的知识点
    • 与传统数据的区别 image.png
    • 大数据处理系统所具备的特征 image.png