数据库系统

发布于:2022-11-09 ⋅ 阅读:(6) ⋅ 点赞:(0) ⋅ 评论:(0)

数据库系统

数据库模式

三级模式,两级映射

  • 三级模式:外模式、概念模式、内模式
  • 两级映射:外模式-概念模式映射、概念模式-内模式映射
  • 逻辑独立性:外模式与概念模式之间具有逻辑独立性
  • 物理独立性:概念模式与内模式之间具有物理独立性
  • “逻辑结构”-概念模式

关系表类型

  • 基本关系表:又称为基本表或基表,实际存在的表,存储数据的逻辑表示

  • 查询表:查询结果对应的表

  • 视图表:也叫虚表,由基表或其他视图表导出的表,本身不独立存储,数据库仅存放它的定义

    • 视图性能不高,要优化性能可以采用物化视图
    • 视图简化用户操作
    • 视图提供了一定程度的逻辑独立性
    • 视图能对机密数据提供安全保护
    • 物化视图:实体化视图,本身会存储数据的视图,当原始表中数据更新时,物化视图也会更新,查询性能会有所改善,适用于多查询少更新的情况

解决数据不一致的三种方式

  • 应用程序实现

    • 在基础表变化时,控制对统计表进行操作,以保障数据的一致性
  • 触发器实现

    • 当基础表变化时,将更新的内容同步更新到对应的统计表中
  • 物化视图实现

    • 建立物化视图,物化视图会将相应的数据物理存储起来,基础表发生变化时,会自动更新

分布式数据库

集中式数据库和分布式数据库区别

特点

  • 数据独立性:除了数据的逻辑独立性和物理独立性外,还有数据分布独立性,即分布透明性
  • 集中于自治共享结合的控制结构:各局部DBMS可以独立管理局部数据库,具有自治功能。同时,系统又有集中管理机制,协调各分部DBMS的工作,执行全局应用
  • 适当增加数据冗余度:在不同的场地存储同一数据的不同副本,在提供系统可靠性和可用性的同时,也能提高系统性能
  • 全局的一致性、可串行和可恢复性

分布式数据库管理系统

  • 组成

    • LDBMS-局部数据库管理系统
    • GDBMS-全局数据库管理系统
    • 全局数据字典
    • 通信管理
  • 结构类型

    • 全局控制集中的DDBMS
    • 全局控制分散的DDBMS
    • 全局控制部分分散的DDBMS

分布透明性

  • 分片透明性:
    用户不需要知道数据的分片方式

    • 水平分片,全字段数据,按部分分片
    • 垂直分片,全量数据,按字段分片
    • 混合分片,兼容上述两种分片方式,维护较为复杂
  • 复制透明性:系统自动完成被复制数据的更新

  • 位置透明性:
    用户不需要知道数据的存储位置和节点

  • 局部数据模型透明性:最低层次的透明,用户不必关心局部DBMS支持哪种数据模型、使用哪种数据操纵语言,数据模型和操纵语言的转换是由系统完成的

事务的两阶段提交协议

  • 阶段分类

    • 表决阶段

      • 形成共同的决定
    • 执行阶段

      • 实现协调者的决定
  • 提交规则

    • 只要一个参与者撤销事务,协调者必须全局撤销决定
    • 所有参与者都同意提交事务,协调者提交全局决定

数据库设计过程

1.概念结构设计-ER模型

实体与联系

联系类型判断

  • 一对一
  • 一对多
  • 多对多

集成的方法:

1、多个局部ER图一次性集成
2、采取累加的方式逐步集成

可能产生的冲突:
1、属性冲突:属性域冲突和属性取值冲突
2、命名冲突:针对同一实体,存在同名同义和异名同义
3、结构冲突:同一对象在不同应用中具有不同的抽象,以及同一个十一的ER结构包含的属性个数及属性排列次序不完全一致

2.逻辑结构设计-关系模式

关系模型基本概念

  • 三要素:数据结构、数据操作、数据的约束条件

  • 分类

    • 层次模型:父节点包含多个子节点,子节点只从属于一个父节点

    • 网状模型:节点与节点之间扁平连接

    • 面向对象模型:已对象为单位组织的数据模型

    • 关系模型:关系-特征,二维关系-特征

      • 几个基本概念

        • 目/度:属性的个数
        • 候选码/键:唯一标识元组且无冗余的一个或多个属性的集合
        • 主码/键:候选键中任选一个即可
        • 主属性与非主属性:候选键对应的属性称为主属性,其他为非主属性
        • 外码/键:其他关系的主键
        • 全码:关系模式的所有属性组是这个关系的候选码
      • 完整性约束

        • 实体完整性约束:主属性唯一且非空
        • 参照完整性约束:外键要么是其他关系的主键,要么是空值,体现关系与关系之间的引用
        • 用户自定义的完整性约束:由程序人员自己定义
        • 触发器:复杂的完整性约束

逻辑结构设计

  • ER图向关系模式的转换(*)

  • 关系模式的规范化

  • 确定完整性约束,保证数据正确

  • 用户视图的确定,提高数据的安全性和独立性

    • 根据数据流图确定处理过程使用的视图
    • 根据用户类别确定不同用户使用的视图
  • 应用程序设计

关系代数

(☆☆☆☆)

属性列,目/度

元组行/记录,实例

同构数据表

  • 并:集合的全集,重复记录会去除,记作∪
  • 交:仅重复的记录会被记录,记作∩
  • 差:从被减数的集合移除减数集合的元素,记作-

笛卡尔积

  • 不要求两个表同构还是异构
  • 属性列是两表之和
  • 元组行是两表元组行乘积拼接
  • (表名+“.”)表示引用区分
  • 记作X

投影:垂直方向,选出有限个列,形成投影,记作π

选择:水平方向,选出某个或某些记录,形成选择集合,记作σ

自然连接:两表列集合的和去重,两表行的主键相等,垂直分表的依据,与笛卡尔积存在等价表示的方法,记作⋈

性能问题:自然连接稍优于笛卡尔积,尽可能压缩运算表

规范化理论(☆☆☆☆☆)

非规范化存在的问题:数据冗余(浪费存储空间)、更新异常(部分修改)、插入异常(未分配主键不能插入)、删除异常(删除了不该删除的数据)

基本概念

  • 函数依赖-语义联系,例如:学号–>系号–>系名,反之则无法确定
  • 码/键 关系:根据入度为0原则,求取得到候选码/键(仅出现在左侧,不可能出现在右侧,可以有继承推导)
  • 部分函数依赖:如:(AB->D,A->C)
  • 传递函数依赖:如:(A->B,B->C)

Armstrong公理系统

  • 推理规则:
  • 基于推理规则的推理:

范式判断

  • 逐步优化,以解决:插入异常、删除异常、数据冗余等问题
  • 规范化理论可能会引起查询效率低的问题,这时需要非规范化思想解决查询效率低的问题
  • 关系模式分析,确定非主属性与主属性的依赖关系

模式分解

  • 将关系模式中的属性拆分形成新的关系模式

  • 考虑的依据

    • 拆分后是否保持了原有的函数依赖关系

      • 不需要考虑冗余函数依赖
    • 能否保持无损

      • 通过自然连接和投影等运算仍能还原到原来的关系模式
  • 无损还原

    • 条件

      • 首先要存在同名属性列
      • 其次,以同名属性列为左侧决定因素的函数依赖一定要有所保留
    • 分析方法

      • 表格法

        • 通用

          • 一定要掌握
        • 建立初始表,初始表包含所有列(去重),将分解后的函数依赖对应的属性列打√,然后根据分解的依赖关系,对能推导得到的属性列也打√,最后,只要有一排能完全打√,则称这个分解是无损的

      • 公式法

        • 适用于分解为两个函数依赖的情况
        • 如果R的分解为ρ={R1,R2},F为R所满足的函数依赖集合,分解ρ具有无损连接性的充要条件是:
          R1 ∩ R2 -> (R1 - R2) 或 R1 ∩ R2 -> (R2 - R1),
          其中:∩ 表示属性列求交集;- 表示属性列求差集

逆(反)规范化

  • 目标:解决满足规范化理论带来的统计、查询性能降低的问题

  • 技术手段

    • 1、增加派生性冗余列,比如:已有“数量”和“单价”列,增加“总价”列
    • 2、增加冗余列,比如:已有“学号”列,增加“姓名”列
    • 3、重新组表,比如:把垂直拆分的表重组产生宽表
    • 4、分割表,比如:将用户表做水平拆分,长沙注册的存在长沙,上海注册的存在上海
  • 优点:连接操作少,检索快,统计快

  • 缺点:数据冗余需要更大的空间存储,插入、更新、删除等操作更复杂,可能产生新增、更新、删除异常,可能造成数据不一致问题

    • 针对数据不一致的问题,可以增加触发器数据同步机制或应用程序数据同步机制以解决
      其他问题,几乎无解

控制技术

并发控制

  • 事务ACID

    • 原子性A:整体全部Commit,或Rollback
    • 一致性C:一个一致性状态到另一个一致性状态,例如:转账操作
    • 隔离性 I:事务之间不应该相互影响,事务同时执行与事务串行执行的结果一致
    • 持久性D:无论发生任何情况,事务一旦被提交,对数据库中数据的改变就是永久性的
  • 并发可能产生的问题

    • 丢失更新

      • T1对数据执行+10操作,T2对同一数据同时执行+20操作,事务之间执行的数据被覆盖
    • 不可重复读

      • T1执行读取过程中,T2对数据更新写回,导致T1前后两次读取结果不一致
    • “脏”读

      • T1在修改数据过程中,T2读到了尚未提交成功的中间数据,然后T1发生回滚,相当于T2读到了“脏”的数据
  • 解决方案

    • 添加封锁协议

      • S锁:读锁,或共享锁

      • X锁:写锁,或独占锁,具有排它性

      • 一级封锁协议

        • 事务T在修改数据R前必须加X锁,直到事务结束才能释放。

可防止丢失修改

  • 二级封锁协议

  • 一级封锁协议加上事务T在读取数据R之前,先对其加S锁,读完之后可释放S锁。

可防丢失修改,还可防读到“脏”数据

  • 三级封锁协议

  • 一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。

可防丢失修改,防止读到“脏”数据,防止数据不可重复读

  • 两段锁协议

  • 可串行化,但可能发生死锁

数据库的安全

数据库备份与恢复

  • 数据备份

    • 冷备,也叫静态备份,即在数据库停止状态下,将数据库文件全部备份下来

      • 低维护,高安全,有延迟
    • 热备,也叫动态备份,即在数据库正常运行状态下,将数据库的数据文件备份出来

      • 快速备份,不能出错,实时备份
  • 按备份量划分

    • 完全备份

    • 差量备份

      • 基于上次完全备份后到这次备份前产生的变化的数据
    • 增量备份

      • 基于上次不完全备份后到这次备份前产生的变化的数据
  • 数据库日志文件

    • 先写日志,再写数据,也可通过日志文件进行备份,基本会和备份结合起来用
  • 故障和恢复

数据库性能优化

  • 集中式数据库优化

    • 硬件系统

      • CPU、内存、IO、硬盘、网络等因素
    • 系统软件

      • 参数,进程优先级,CPU使用权,内存使用等
    • 数据库设计

      • 数据库索引

        • 提升查询效率,降低了添加、修改、删除的效率

          • 采用B树、B+树等
      • 表与视图的优化

        • 规划表的设计,建立视图
      • 索引优化,对常查询的列建索引,对常修改的列避免索引

      • SQL优化:Explain执行计划,SQL索引合规,仅检索需要的列,联合查询先筛选再连接,减少多表查询,加锁粒度要小,尽早释放锁,不相干的子查询替代相干子查询,带in的语句替换or语句等等…

      • 有可能会违反数据库的规范化理论

    • 应用软件

      • 数据库连接池优化,提高访问集中式数据库的效率
  • 分布式数据库优化

    • 单节点上按集中式数据库优化方案进行优化

    • 通信代价

      • 全局查询树的变换、多副本策略(就近副本查询)、查询树的分解、半连接与直接连接(减小查询表格,减少通讯代价)

分区、分库和分表

分区和分表的区别

  • 分区针对的是一张表,分表针对的是从一张父表派生而来的多张表

分库

  • 逻辑相关的一些表分配在同一个数据库中去

分区的常见方式

  • 范围分区

    • 按照某字段的取值范围
  • 哈希分区

    • 按照某个key的hash值对N取余

      • 数据分配较为均匀
  • 列表分区

    • 列表的范围是固定的,例如,将每个省份分一个区

分区的优点

  • 分区存储更多的数据
  • 数据管理数据比较方便
  • 规避了全表扫描,提高检索效率
  • 支持夸多分区查询,增加查询的吞吐量
  • 聚合查询时,很容易进行数据合并

NoSQL

Not-only SQL,泛指非关系型的数据库

特征

  • 特定的应用领域

  • 海量的数据存储

  • 非结构化的数据

  • 高并发,高性能

  • 事务性支持低

  • 向外扩展的能力

    • 集群的能力

分类

  • 键值(k-v)数据库

    • 查找快,内容缓存,无结构化
    • Redis、Tokyo Cabinet、Voldemort等
  • 列存储数据库

    • 分布式文件系统,查找快,分布式扩展能力强
    • HBase、Cassandra、Riak
  • 文档型数据库

    • 数据结构可变
    • MongoDB、CouchDB
  • 图形数据库

    • 利用图结构相关算法、常用在社交网络、推荐系统等
    • Neo4J、infoGrid

联邦数据库系统

彼此协作又相互独立的各个数据库的集合,各个成员数据库之间按不同程度进行集成,相当于一个中间件,起到对接各成员数据库的作用

特点

  • 分布性
  • 异构性
  • 自治性
  • 透明性

分类

  • 紧耦合
  • 松耦合

大数据

特征

1、数据量大,PB及以上
2、读写、计算、分析速度要快
3、数据种类多样,结构化、非结构化
4、伴随深度的数据分析
5、集群平台,低成本构建
6、向下兼容性,高容错性