数据库概念

三层模式

系统结构:三级模式,内模式、概念模式、外模式。 内模式:管理如何存储物理数据。 概念模式:根据需求划分为一张张的表。 外模式:对应视图级别,将表进行了一次封装处理。

内模式:存储模式,数据库在物理方面的描述,定义记录类型、索引、文件组织方式(概念模式下的一张表,在内模式中可能存储在不同文件中)。 外模式:用户模式、子模式,用户与数据库系统的接口,用户用到的那部分数据的描述,如视图。 概念模式:模式,是数据库中全部数据的逻辑结构的描述,如库、表

两层映射关系

外模式和概念模式有映射关系(逻辑独立性),概念模式与内模式也有映射关系(物理独立性),因此在出现变动时,无关层不会影响。

外模式-概念模式映像:表和视图进行映射,表改了只需要改视图,不用动程序。 概念模式-内模式映像:表和物理存储的映射,DBMS自动管理。

数据模型

ER实体联系图(结构化中用的数据模型,面向对象中用类图表示数据模型),体现了数据之间的关系。

E-R模型: ERD数据图

关系模型

数据库设计_概念模式

目或度:关系模型中属性的个数。

候选键:唯一标识元组,且无冗余(不能有多余)的集合(可以多个属性的组合)。

主键:候选键中任选一个。

主属性与非主属性:组成候选码的属性,就是主属性。

外键:其他表中的主属性。

完整性约束

  1. 实体完整性约束:主属性不能取空值。
  2. 参照完整性:关系与关系间的引用,外键约束。
  3. 用户自定义约束。
  4. 触发器 。
关系表类型

基本关系:实际存在的表,实际存储数据的逻辑表示。查询表:查询结果对应的表。 视图表:虚拟表,其内容由查询定义(仅仅保存SQL查询语句)。

  • 视图能简化用户操作
  • 视图使用对重构数据库提供一定程度的逻辑独立性(表结构改了,只需要调整视图sql,上层应用不用改)
  • 视图对数据提供安全保护(可以设定访问权限之类)
关系代数

并集、交集、差集、笛卡尔积

数据库设计_软考_02


数据库设计

数据库如果设计不合理,往往会成为系统的“瓶颈”。

数据库设计_软考_03

数据库设计主要分为用户需求分析、概念结构、逻辑结构和物理结构设计四个阶段。

其中,在用户需求分析阶段中,数据库设计人员采用一定的辅助工具对应用对象的功能、性能、限制等要求所进行的科学分析,并形成需求说明文档、数据字典和数据流程图。用户需求分析阶段形成的相关文档用以作为概念结构设计(ERD)的设计依据。

输出:需求分析:数据流图、数据字典、需求说明书。 概念结构设计:ER模型图(与数据库无关) 逻辑结构设计:关系模型(由ER图转换而来,注意转换规则和规范化理论),即表。 物理设计:关注索引,等跟硬件、操作系统的特性。

设计规则和指南

  1. 每个基本实体、关联实体和弱实体都被实现成一个独立表(多对多关系必须要单独设计成一个关系模式(表))
  2. 数据完整性和访问完整性约束

函数依赖

规范化

非规范化问题:数据冗余、更新异常(一部分改了,一部分没改到,修改操作一致性问题)、插入异常、删除异常。

// 没有非主属性就不会违反第二、第三范式。

第一范式:属性不可再拆分。

  • 姓名:假如姓名这个属性硬要说不满足第一范式,是因为“姓名”还可以拆成“姓”和“名”。
  • 第二范式:在第一范式之上,表中的候选键能够确定表中其他属性,就存在部分依赖,不属于第二范式。
  • id、名称、名称的英文形式:其中名称就能够确定“名称的英文形式”,那就存在部分依赖,不满足第二范式。
  • 如下图,课程号就能够确定课程名了,因此存在部分依赖。

数据库设计_概念模式_04

第三范式:在第二范式基础上,不存在传递函数依赖。(一般表现为,其他属性可以从非候选键中推导出来,二非候选键又刚好可以从候选键推出来)

BC范式:解决主属性的依赖问题。

反规范化:数据库设计者希望牺牲部分规范化提升性能优点:连接操作减少,查询的表变少,查询、统计变快,检索变容易。 缺点:数据有冗余,存储空间变大。有数据不一致的问题。插入更新变得困难,增删改的异常也会出现。

实现方式: 增加派生性冗余:通过某些属性能够计算得到的其他属性。 增加冗余:已有学号,增加姓名。 重新组表:为了提高效率。 分割表:把表水平切割,长沙地区的存长沙表,其他地区存其他表。

索引

提升查询效率,降低增加、删除、修改效率。一般采用B、B+树结构。

数据库设计_数据库_05

树形结构能够提升查找效率。

视图

虚拟的表,好比已经写好的SQL,可以直接调用(可以转成物化视图)。

物化视图:将SQL语句查询的结果存成表,系统自动维护数据同步。 优点:安全(可以设置权限,只显然若干属性<针对直连数据库的系统,现代系统已经可以控制返回字段显示>)、简化操作(不用写sql)、逻辑独立、不同角度返回数据。

分区分表分库

提升系统性能。

数据库设计_概念模式_06

分区:表数据量很大,从物理文件上划分,下次读取时数据量变小,速度会变快。(数据库底层支持,开发人员不用考虑)范围分区:按表中的字段范围,如记录的id号分区,5000~10000存第二个区。 哈希分区:对key进行哈希运算求余,取余后看落在哪个区,分布会比较均匀。 列表分区:要分的本身是列表,如城市,可以分成上海市、北京。 分表:逻辑上是多张表了,(分区上来看,数据表还是整体)。 分库:多个表打包成一个库,完整数据库分成多个库。


并发控制

// 主要是对事务的处理事务的ACID特性

解决并发方式:封锁协议,X锁(排他性)、S锁(共享性)。

三级封锁协议

数据库设计_软考_07

两阶段加锁协议:2PL,指的是单机事务中的加锁机制,是指所有事务必须分两个阶段对数据项加锁和解锁。事务分为两个阶段,第一阶段是获得封锁,第二阶段是释放封锁

两阶段提交协议:2PC,主要用于分布式事务中,把分布式事务的提交过程分成表决执行两个阶段。


分布式数据库

在原来独立的数据库之上,加盖了全局的数据库管理,把所有库统一管理。 // 集中式数据库:Oacle、sqlserver。

特点:在集中式数据库的架构上,增加了全局的概念,通过全局来控制分片,将分片数据存储到局部数据(原集中式)。数据独立性、集中与自治共享的结合控制结构、适当增加数据冗余度、全局的一致性、可串行、可恢复。

透明性// 表示用户不需要关心数据是怎么分片的 分片透明(水平<南方节点、北方节点>、垂直、混合)、位置透明、局部数据模型透明(表结构,逻辑结构)

分布模式:管数据存在哪里。

  • 位置透明性:不管数据库存哪里。
  • 分片透明性:不管是否分片(水平、垂直),用户没有感知。

NoSQL

不仅仅是SQL,泛指非关系数据库。

数据库设计_架构_08


联邦数据库系统
彼此协作又相互独立的成员数据库的集合。


数据库设计_软考_09


数据库优化

数据库设计_软考_10