• 十一 数据库系统


    目录

    1、数据库模式

    2、关系代数

    3、规范化理论

    4、并发控制

    5、数据库完整性约束

    6、数据库安全、备份、故障与恢复

    7、分布式数据库、NoSQL、性能优化、大数据分区分表


    1、数据库模式

    三级模式-两层映射

    • 外模式。用户视图、视图级,用户程序调用。
    • 概念模式。基本表。
    • 内模式。物理模式,存储模式,文件级。

    外模式和概念模式之间映射,保证逻辑独立性。

    概念模式和内模式之间映射,保证物理独立性。

    视图

    • 视图优点:简化用户操作,重构数据提供一定的逻辑独立性,数据安全保护,用户以多种角度看待同一数据。缺点:查询之后再展示,效率比较低。
    • 物化视图。实体化视图,会存储数据,更新原始数据时,需更新物化视图。只适合查询较多的数据,修改性较多的不适合物化视图。

    数据库设计过程

    • 需求分析。得到数据流图,数据字典,需求说明书。
    • 概念结构设计。得到ER模型。用户数据模型。
    • 逻辑结构设计。关系模型,视图,完整性约束及应用处理说明书。转换规则,规范化理论。
    • 物理设计。硬件,os,聚簇索引。

    ER模型

    联系类型:

    1: 1 一对一

    1: n 一对多

    n: n 多对多

    实体转关系模式

    一个实体集至少一个关系模式。

    多对多必须转成一个关系模式。

    1对多n 可以转为一个关系模型,也可以与n端关系模式合并。

    2、关系代数

    笛卡尔积 X。属性列数是二者之和。元组行行数是二者乘积。

    选择 ∂。现在列是否相等,筛选条件。

    投影 π。选择需要的列。

    例如: Select 投影 from 表1,表2 where 选择。

    自然连接 ▷◁: 属性列二者之和减去重复的列数。元组行数同名属性列取值相等的元素。

    自然连接和笛卡尔积转换。先选择(做where),再投影

    1、一般任务自然连接性能优于笛卡尔积。

    2、尽量先将操作的对象压缩。

    3、规范化理论

    非规范化关系模式可能存在问题:数据冗余、更新异常、插入,删除异常

    函数依赖

    • 主键唯一标识元组的属性集合。可以决定所有其他属性。主键可以是组合。
    • 部分函数依赖:元素依赖主键中的一部分。针对组合主键。
    • 传递函数依赖:。

    键概念

    • 候选键:唯一标识元组,且无冗余。就是可以做主键的属性值,可以是组合键。
    • 主键:候选键任选一个
    • 外键:其他关系主键。

    如何求候选键?

    1、找到入度为0的值,即没其他属性指向它。也就是没在右边出现过的属性

    2、如果都没有入度为0的,找中间属性(有入有出)。

    候选键包含的属性叫做主属性,其他叫非主属性。

    第一范式。属性值都是不可分的原子值。属性不能划分为其他小属性,即是满足一个二维表

    第二范式。再上一基础,不存在非主属性对候选键的部分依赖

    第三范式。再上一基础,不存在非主属性对候选键的传递依赖

    BCNF。每个依赖的决定因素必定包含某个候选码。

    分解表拆分

    是否保持函数依赖分解。分解之后还能找到之前的函数依赖关系,即可以找到之前的关系模式。

    无损分解:可以还原

    有损分解:不能还原

    无损分解表格法:有一排是勾就是无损分解。

    无损连接分解,都是能推所有属性,所以,只要是包涵候选关键字的,都是无损连接。

    1、初始表。画出所有属性,根据关系给存在的属性打√。

    2、表格中需要相同的那一列开始,作为左侧决定因素,找到对应的关系,如果存在打√。

    案例:

    反规范化 : 希望牺牲部分规范化提高性能,从规范化设计的回退方法

    由于规范化导致数据表过多,虽然减少了数据冗余,但是增加了增删改的效率。根据业务,在表中新增一部分冗余字段,以提高性能。

    益处 降低连接操作的需求,降低外码和索引数目,还可以减少表的数目,能够提高查询效率。

    技术手段:

    • 增加派生性冗余列(计算总和,平均值)
    • 增加冗余列。(复制某一列数据)
    • 重新组表。多表组合形成一个表。
    • 分割表。水平分割(按照字段行不同的取值放不同表,一年或者10年一个表),垂直分割(按列,不常用的数据重新放一个表)。

    出现的问题 : 数据冗余,重复存储浪费了磁盘空间;可能出现数据的完整性问题,还有数据性一致性问题,增加数据维护的复杂度,会降低修改速度

    触发器或应用程序解决。

    解决一致性的方法主要有三种

    1. 使用事物方式(应用程序自己去维护)

    2. 使用批处理即定时器。(写个脚本定时去同步,适合数据不实时更新)

    3. 使用触发器(数据库触发器可以在修改时自动更新)。

    4、并发控制

    事务:原子性(要么做,要么不做),一致性(数据一致性),隔离性(事务之间隔离),持续性(修改后数据保持数据持续性)。

    并发产生的问题: 丢失更新(修改);不可重复读问题;脏数据读出。

    解决方案:

    S锁: 读锁,共享锁。

    X锁: 写锁,排他锁,独占锁。

    读锁可以多个,但是写锁有了之后不能加其他锁。

    一级封锁协议:在修改之前加x锁,事务结束后释放,防止丢失修改。

    二级封锁协议:一级封锁协议加上读取数据之前加s锁,读完后释放防止丢失修改和读脏数据

    三级封锁协议:一级封锁协议加上读取数据之前加s锁,事务结束后释放防止丢失修改和读脏数据,防止数据重复读。

    两段锁协议,可以串行化,但可能发生死锁。准备阶段(请求阶段)和提交阶段(执行阶段)。

    5、数据库完整性约束

    实体完整性主键,唯一且非空

    参照完整性引用其他表的主键(外键),其他关系的主键或者为空。

    用户自定义完整性约束。check。

    触发器

    6、数据库安全、备份、故障与恢复

    数据库安全:

    • 用户标识和鉴定。主要是身份认证。
    • 存取控制。主要是权限。
    • 密码存储和传输。对远程终端信息用密码传输。加密和摘要。
    • 视图的保护。对视图进行授权。
    • 审计。日志记录,事后审查,可追溯。

    数据备份:

    冷备份(静态备份):停止状态下,将数据库文件备份下来。

    热备份(动态备份):数据库正常状态下,备份数据库。

    完全备份:备份所有数据。

    差量备份:仅备份上一次完全备份之后变化的数据。

    增量备份:备份上一次备份之后变化的数据。

    日志文件:对于数据库,先写日志再写数据。

    各种备份相互用:全备-增备-增备-差备-增备。还原效率高。

    数据库故障和恢复

    7、分布式数据库、NoSQL、性能优化、大数据分区分表

    分布式数据库

    NoSQL

    数据库性能优化

    大数据

    分区分表

  • 相关阅读:
    前端常用的CDN
    [附源码]SSM计算机毕业设计校园疫情防控管理系统JAVA
    【知识网络分析】 一模网络(one node)
    MyCat主从数据库集群搭建
    HCIP VLAN实验
    【Java系列】Java 基础
    数据库概述05(数据库查询及修改操作)
    C++知识精讲9——sqrt函数函数基本使用方法以及实战讲解
    工业互联网行至深水区,落地的路要怎么走?
    vscode用户代码片段的配置与使用
  • 原文地址:https://blog.csdn.net/eternal_tc/article/details/127648738