架构师知识梳理(三):数据库

数据库基本概念

基本概念

数据

是数据库中存储的基本对象,是描述事物的符号记录。

数据的种类包括:文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等

数据库

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

其基本特征包括:

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

数据库系统

数据库系统包括:数据库系统(DBS)数据库管理系统(DBMS)

  • 数据库系统(DBS):是一个采用了数据库技术,有组织地、动态地存储大量相关数据,方便多用户访问的计算机系统。其由下面四个部分组成
    • 数据库(统一管理、长期存储在计算机内的,有组织的相关数据的集合)
    • 硬件(构成计算机系统包括存储数据所需的外部设备)
    • 软件(操作系统、数据库管理系统及应用程序)
    • 人员(系统分析和数据库设计人员、应用程序员、最终用户、数据库管理员DBA)。
  • 数据库管理系统(DBMS):
    • 实现对共享数据有效的组织、管理和存取。
    • 包括数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。

三级模式两级映射

三级模式 

  • 内模式:管理如何存储诸物理的数据,对应具体物理存储文件。(对应数据库物理层面)
  • 模式:又称为概念模式,就是我们通常使用的基本表,根据应用、需求将物理数据划分成一张张表。(对应为数据库中表)
  • 外模式:对应数据库中的视图这个级别,将表进行一定的处理后再提供给用户使用。

两级映射 

  • 外模式一模式映射:是表和视图之间的映射,存在于概念级和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序。
  • 模式一内模式映射:是表和数据的物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而不需要去修改应用程序。 

规范化

第一范式1NF

关系中的每一个分量必须是一个不可分的数据项。通俗地说,第一范式就是表中不允许有小表的存在。

第二范式2NF

如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。 通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列。

第三范式3NF

在满足1NF的基础上,表中不存在非主属性对码的传递依赖。

BC范式BCNF

是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖。 通俗的来说,就是在每一种情况下,每一个依赖的左边决定因素都必然包含候选键。如下:

上图中,候选键有两种情况:组合键(S,T)或者(S,J),依赖集为{SJ→T,T→J),可知,STJ三个属性都是主属性,因此其达到了3NF(无非主属性),然而,第二种情况,即(S,J)为候选键的时候,对于依赖T→J,T在这种情况不是候选键,即T→J的决定因素不包含任意候选码,因此上图不是BCNF。 要使上图关系模式转换为BCNF也很简单,只需要将依赖T→J变为TS→J即可,这样其左边决定因素就包含了候选键之一S。 

函数依赖

函数依赖的公理系统(Armstrong):设关系模式 R(U,F)R(U,F),其中 UU 是关系模式 RR 的属性全集,FF 是关系模式 RR 的一个函数依赖集。对于 R(U,F)R(U,F) 来说有以下规则:

  • 自反律:若 Y⊆X⊆UY⊆X⊆U,则 X→YX→Y 为 FF 所逻辑蕴含。
  • 增广律:若 X→YX→Y 为 FF 所逻辑蕴含,且 Z⊆UZ⊆U,则 XZ→YZXZ→YZ 为 FF 所逻辑蕴含。
  • 传递律:若 X→YX→Y 和 Y→ZY→Z 为 FF 所逻辑蕴含,则 X→ZX→Z 为 FF 所逻辑蕴含。
  • 合并规则:若 X→YX→Y,X→ZX→Z,则 X→YZX→YZ 为 FF 所蕴涵。
  • 伪传递率:若 X→YX→Y,WY→ZWY→Z,则 XW→ZXW→Z 为 FF 所蕴涵。
  • 分解规则:若 X→YX→Y,Z⊆YZ⊆Y,则 X→ZX→Z 为 FF 所蕴涵。

键与约束 

  • 超键:能唯一标识此表的属性的组合。
  • 候选键:超键中去掉冗余的属性,剩余的属性就是候选键。
  • 主键:任选一个候选键,即可作为主键。
  • 外键:其他表中的主键。
  • 主属性:候选键内的属性为主属性,其他属性为非主属性。
  • 实体完整性约束:即主键约束,主键值不能为空,也不能重复。
  • 参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。
  • 用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到150之间

数据库设计

(1)需求分析:即分析数据存储的要求,产出物有数据流图、数据字典、需求说明书。获得用户对系统的三个要求:信息要求、处理要求、系统要求。

(2)概念结构设计:就是设计E-R图,也即实体-联系图。工作步骤包括:

  • 选择局部应用;
  • 逐一设计分E-R图;
  • E-R图合并。

分E-R图进行合并时,它们之间存在的冲突主要有以下3类:

  • 属性冲突。同一属性可能会存在于不同的分E-R图中。
  • 命名冲突。相同意义的属性,在不同的分E-R图上有着不同的命名,或是名称相同的属性在不同的分E-R图中代表着不同的意义。
  • 结构冲突。同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体而在另一分E-R图中又被抽象为属性。

(3)逻辑结构设计:将E-R图转换成关系模式。工作步骤包括:

  • 确定数据模型;
  • 将E-R图转换成为指定的数据模型;
  • 确定完整性约束;
  • 确定用户视图。

(4)物理设计:步骤包括确定数据分布、存储结构和访问方式。

(5)数据库实施阶段。根据逻辑设计和物理设计阶段的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

(6)数据库运行和维护阶段。数据库应用系统经过试运行即可投入运行,但该阶段需要不断地对系统进行评价、调整与修改。

E-R模型

ER模型,全称为实体联系模型实体关系模型实体联系模式图(ERD)

E-R模型的构成成分是实体集、属性和联系集。

其表示方法如下:

(1) 实体集用矩形框表示,矩形框内写上实体名。

(2) 实体的属性用椭圆框表示,框内写上属性名,并用无向边与其实体集相连。

(3) 实体间的联系菱形框表示,联系以适当的含义命名,名字写在菱形框中,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即1—1、1—N或M—N。

因此,E-R模型也称为E-R图。

 

关系代数

关系代数是一种抽象的查询语言,用对关系的运算来表达查询,关系代数是关系数据库系统查询语言的理论基础。

关系代数–并、交、差 

1、并(结果为二者元组之和去除重复行)
2、交(结果为二者重复行)
3、差(前者去除二者重复行)

笛卡尔积、投影、选择 

1、笛卡尔积:结果列数为二者属性列数之和,行数为二者元素数乘积。
2、投影:对属性列的选择列出,上述投影图可用SQL语句select Sn0 , Sname from 表,就是把需要的字段显示出来即可。
3、选择:选择是根据某些条件对关系做水平切割,对元组行的选择列出如上述中Sn0-Soooo3(S1),是指从S1中选择Sno字段为Soooo3的数据。

并发

事务:由一系列操作组成,这些操作,要么全做,要么全不做。

事物的特性:

  • (操作)原子性:要么全做,要么全不做。
  • (数据)一致性:事务发生后数据是一致的,例如银行转账,不会存在A账户转出,但是B账户没收到的情况。
  • (执行)隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干涉。
  • (改变)持续性:事务操作的结果是持续性的。

并发控制

事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发控制中存在下面三个问题:

丢失更新:事务1对数据A进行了修改并写回,事务2也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。

T1

T2

①读A=10

③A=A-5,写回

读A=10

A=A-8写回

不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读A两次,会发现数据A有误。 

T1T2

①读A = 20

   读B = 30

   求和 = 50

③读A = 70

   读B = 30

   求和 = 100

  (验证不对)

读A=20

A<- A + 50

写A = 70

读脏数据:事务1对数据A进行了修改后,事务2读数据A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据A做的事是无效的,读到了脏数据。 

T1T2

①读A=20

   A<- A + 50

  写回 70

③ROLLBACK

    A恢复为20

读A = 70

封锁协议

X锁

X锁是排它锁(写锁)。若事务T对数据对象A加上X锁,则只允许T读取和修改,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。

S锁

S锁是共享锁(读锁)。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放A上的S锁。

一级封锁协议 

事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。可解决丢失更新问题

T1T2

① 对A加写锁

③ 读A=10

④ A=A-5写回

⑤ 释放对A的写锁

对A加写锁

等待

等待

等待

读A=5

A=A-8写回

释放对A的写锁

二级封锁协议

一级封锁协议的基础上加上事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁可解决丢失更新、读脏数据问题。

T1T2

① 对A加写锁

② 读A=20

③  A<-A+5写回

④ 写回70

⑤ 

⑥ ROLLBACK

⑦ A恢复为20

对A加写锁

等待

等待

读A=20

释放对A的读锁

三级封锁协议

一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可解决丢失更新、读脏数据、数据重复读问题。

T1T2

① 对A与B加S锁(读锁)

    读A=20

    读B=30

    求和=50

② 

③读A=20

    读B=30

    求和=50

    释放对A和B的读锁

对A加X锁(写锁)

等待

等待

等待

等待

读A=20

   A<- A+50

写A=70

释放对A的写锁

数据库延申技术

数据安全

  • 静态转储:即冷备份,指在转储期间不允许对数据库进行任何存取、修改操作。

    • 优点:非常快速的备份方法,容易归档(直接物理复制操作)。
    • 缺点:只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
  • 动态转储:即热备份,在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行。

    • 优点:可在表空间或数据库文件级备份,数据库扔可使用,可达到秒级恢复。
    • 缺点:不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
  • 完全备份:备份所有数据。

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

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

  • 日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。

分布式数据库

 

  • 局部数据库:位于不同的物理位置,使用一个全局DBMS将所有局部数据库联网管理,这就是分布式数据库。
  • 分片模式
    • 水平分片:将表中水平的记录分别存放在不同的地方。
    • 垂直分片:将表中的垂直的列值分别存放在不同的地方。
  • 分布透明性
    • 分片透明性:用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
    • 位置透明性:应用程序不关心数据存储物理位置的改变。
    • 逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型。
    • 复制透明性:用户或应用程序不关心复制的数据从何而来。
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值