数据:描述事物的符号记录
数据库:长期存储在计算机内,有组织,可共享的大量数据的集合
数据库管理系统:在用户和操作系统之间的的一层系统,.
数据库系统:由数据库,数据库管理员和软件组成的一种较为理想的数据处理系统
数据模型:对现实世界数据的模拟和抽象,用来描述数据,组织数据,操作数据以及约束数据的
数据定义语言:DDL;数据操纵语言:DML;
常见的逻辑模型:层次模型,网状模型,关系模型
数据模型的组成:
- 数据结构:描述系统的静态结构(各种逻辑模型)
- 数据操作:描述系统的动态特性(查询和更新)
- 数据的完整性约束条件
数据库系统结构
(数据库管理系统角度)三层结构:外模式,模式和内模式
优点:数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给 DB MS 管理,
使用户能逻辑抽象地处理数据,而不必关心数据在计算机中的表示和存储。
- 模式:数据库中全部数据的逻辑结构和特征的描述
- 外模式:数据库用户使用的局部数据的逻辑结构和特征的描述
- 内模式(存储模式):数据库的物理结构和存储模式的描述
数据独立性:逻辑独立性和物理独立性
逻辑独立性:修改数据库的模式时,只通过外模式/模式映像
物理独立性;修改数据库的内模式时,只通过模式/内模式
- 关系:用户看来,就是一张包含关系模型中数据的逻辑结构的二维表
- 域:一组具有相同数据类型的值的集合
- 元组:关系中每个元素
- 属性:关系中不同列对应的域
- 候选码:关系中某一属性的值能唯一标识一个元组
- 主码:从候选码中选定的唯一一个,其他为非主属性
- 外码:一个关系中的一个属性是另外一个关系中的主码
关系模型的约束
- 实体完整性规则:基本关系中所有主关键字对应的主属性不能为空
- 参照完整性规则:通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。
- 用户自定义的完整性规则:针对某一具体应用的数据必须满足的语义要求
关系运算
基础:并,交,差,广义笛卡尔积
专门:选择,投影,连接,除
SQL语言
高级的非过程化编程语言,用户与数据库之间进行特殊交流的语言
实现对关系数据库的增删改查等操作
综合统一,高度非过程化,使用方式灵活,语言简洁,易学易用
- 视图是已经编译好的sql语句。而表不是
- 视图没有实际的物理记录。而表有。
- 表是内容,视图是窗口
- 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
- 表是内模式,视图是外模式
- 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
- 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
- 视图的建立和删除只影响视图本身,不影响对应的基本表
数据库的三个完整性
数据库的完整性是指数据库中的正确性,有效性,相容性.
- 实体完整性:关系的主关键字不能重复也不能取“空值"
- 参照完整性:定义建立关系之间联系的主关键字与外部关键字引用的约束条件,可以为空,如不为空,则一定对应另一个表中主键的某个值
- 自定义完整性:
- UNIQUE约束:唯一性约束,指定一列或多列,列中数据不能出现重复值
- NOT NULL:非空约束
- CHECK:检查约束
函数依赖:一个或一组属性的值可以决定其他属性的值
非平凡函数依赖:
- 1NF:数据库中每一列都是不可分割的基本数据项,同一列不能有多个值
- 2NF:先是:1NF,任意非主属性都完全函数依赖于任意候选关键字
- 3NF:先是2NF,每一个非主属性不传递依赖于任意候选关键字
数据库设计方法:
- 直观设计法
- 规范化设计法
- 计算机辅助设计法
- 自动化设计法
- 需求分析:对用户提出的各种要求加以分析,对各种原始数据加以综合,整理,并形成最终设计目标
- 概念设计阶段:对用户需求进一步抽象,归纳,并形成独立于DBMS和有关软硬件概念数据模型的过程.(E-R)
- 逻辑设计阶段:将概念结构(E-R)转化为某个DBMS所支持的数据结构模型,并进行优化
- 数据库物理设计阶段:将上一阶段产生的逻辑结构模型转化成某一计算机系统支持的数据物理结构
- 数据库实施阶段:建立实际的数据库结构.试运行,装入数据
- 数据库运行和维护阶段:维护数据库的安全性,完整性控制以及系统的转储恢复
数据库开发体系架构:可以将数据库系统分为单用户结构、主从式结构、分布式结构、客户/服务器、浏览器/应用服务器/数据库服务器等几个体系结构。
软件体系架构:构件的集合(处理构件,数据构件,连接构件)
主从式结构
C/S结构
B/S结构
三层C/S结构
- 将用户的界面与具体的业务逻辑分离,将客户机和服务器的部分业务逻辑抽取出来,形成中间层,由应用服务器实现
- 结构:客户机,应用服务器,数据库服务器
- 功能层次:
- 表示层:仅向客户提供用户与系统的访问界面,以及简单的业务规则,对输入的数据只是进行检查数据的形式和取值范围
- 功能层:应用逻辑层,将具体的业务处理逻辑编入程序中,主要负责响应发来的请求,从数据层抽取数据,执行业务逻辑,并将处理的数据传向表示层展示给用户
- 数据层:进行数据处理,负责接收功能层的请求,采用SQL语句实现功能层到数据层的传输
优点:增加复用性,增加系统扩展性,安全性增强
B/S结构
- 采用不断成熟的WWW技术和结合浏览器端的多种脚本语言
- 结构:把两层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由web服务器承担其任务并单独组成一层,把负荷分配给了web服务器
- 浏览器,web服务器,数据库服务器
- 优点:几乎零维护,分布性强,共享性强
事务
- 事务是用户定义的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的最小工作单位
- 特性(ACID)
-
原子性:事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。
-
一致性:事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态
-
隔离性:一个事务不能被其他事务干扰
-
持久性:事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失
-
事务故障:事务没有达到预期终点,而使数据库处于不一致状态(解决方法:撤销之前的所有操作,通过日志实现)
-
系统故障:造成系统停止运转的任何事件(解决方法:撤销故障发生时为完成的事务,重做已完成的事务,通过日志文件实现)
-
介质故障:外存储设备故障(重装数据库,重做已经完成的事务,通过转储副本和日志文件进行数据恢复)
- 事务故障恢复:由恢复子系统应用日志文件撤消(UNDO)此事务已对数据库进行的修改。事务故障的恢复由系统自动完成,不需要用户干预。
- 事务故障恢复步骤:
- 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
- 对该事务的更新操作执行逆操作。即将日志记录中。
- 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
- 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
- 系统故障恢复: ①Undo 故障发生时未完成的事务;②Redo 已完成的事务。系统故障的恢复由系统在重新启动时自动完成,不需要用户干预。
- 系统故障恢复步骤:
- 正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
- 对撤销队列中的各个事务进行UNDO处理。 进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
- 对重做队列中的各个事务进行REDO处理。 进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”写入数据库。
- 介质故障的恢复方法:重装数据库,然后重做已完成的事务。
- 介质故障恢复的步骤:
- 装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。
- 装入相应的日志文件副本(转储结束时刻的日志文件副件),重做已完成的事务。即首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列;然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。
查询步骤:
- 语法分析和翻译
- 查询优化(代数优化和物理优化)
- 查询执行
并发控制:为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度
原因:当多个事务存取同一组数据时,由于相互的干扰和影响,并发操作不当,可能引发错误的结果,导致数据不一致问题
- 丢失修改
- 不可重复读
- 读"脏"数据
- 一级封锁协议:事务T在修改数据Y之前必须对Y加X锁,事务结束后释放(防止丢失修改)
- 二级封锁协议:在一级基础上,加上事务T在读取数据Y之前必须对Y加S锁,事务结束后释放(防止读脏数据和丢失修改)
- 三级封锁协议:在一级基础上,加上事务T在读取数据Y之前必须对Y加S锁,在读完后并不释放S锁,知道事务T结束才释放(都能防止)
- 活锁:多个事务请求对同一数据封锁,总是使某一事务等待的情况称为活锁
- 死锁:两个事务由于不能得到封锁而互相等待的状态