什么是DBMS?
Database Management System(DBMS)数据库管理系统是一个为存储和管理数据库的软件包。
数据库技术发展历史
(1)从数据模型的发展来看:
- 无管理(60年代之前):科学计算
- 文件系统:简单的数据管理
- 数据管理需求不断增长,数据库管理系统应运而生
文件系统vsDBMS
- 应用程序负责数据在内存和二级存储设备之间的数据交换(比如缓存、基于页面的存取)
- 不同的查询编写不同的代码
- 应用保证数据的一致性,特别是多用户的应用环境
- 回复机制
- 安全和存取控制
数据库的分类
(2)从体系结构的发展来看
- 集中式:主机+哑终端(无计算能力,仅有输入输出设备)
- 分布式数据库
- Client/Server结构
- 三层/多层结构
(3)从应用领域的拓展来看
- OLTP(在线事务处理过程)
- 工程数据库(CAD,CAM)
- 演绎数据库(知识库,知识管理,需要推理过程)
- 多媒体数据库(视频点播)
- 时态数据库
- 空间数据库
- 数据仓库、数据挖掘(OLAP)
数据库研究的趋势
数据的来源越来越多,数据量不断增长
大数据(4V+1O):数据量大(Volume)、类型繁多(Valety)、价值密度低(Value)、速度快时效高(Velocity)、数据是在线的(Online)
提供了统计分析、决策支持等功能
- OLAP(Online Analytical Processing)和OLTP(Online Transaction Processing)
- 数据挖掘
- 机器学习
- ……
数据模型
数据模型是描述数据的一组概念和定义。
数据模式是基于数据模型的数据描述。
关系数据模型是目前用的最多的数据模型。
基本概念:关系,简要地说就是存在行和列的表
每个关系都有一个模式(schema),描述表中的列和相关的信息
多级抽象
多个外(视图)模式,一个概念(逻辑)模式,一个物理模式
- 视图描述用户从不同的角度看这些数据(用来呈现数据,相当于一张虚拟的表)
- 概念模式定义了数据的逻辑模式,ER图,表结构
- 物理模式描述了数据的存储细节,例如索引等
数据的独立性
- 数据的逻辑独立性:保护用户免受数据逻辑结构变化的影响(用户不用知道数据库内部发生的一些查询优化等,可以当做黑盒使用)
- 数据的物理独立性:保护用户免受数据物理存储变化的影响(用户不用知道数据放在物理设备上的位置)
日志
日志中记录的动作:
Ti时刻写一个数据对象:原值和新值
(日志必须在改变数据之前,把信息记录在磁盘上)
Ti时刻提交commits/取消aborts:日志记录显示了这个动作
DBA(数据库管理员)的要求
- 设计逻辑/物理模式
- 处理安全和授权问题
- 数据的可用性,恢复机制
- 数据库的调整
关系模型与关系型数据库
关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。
关系型数据库是指采用了关系模型来组织数据的数据库。
关系模型中常用概念:
- 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
- 元组:可以理解为二维表中的一行,在数据库中经常被称为记录
- 属性:可以理解为二维表中的一列,在数据库中经常被称为字段
- 域:属性的取值范围,也就是数据库中某一列的取值限制
- 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
- 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, … … ,属性N),在数据库中成为表结构
关系型数据库范式
- 第一范式(1NF):关系中的每个属性都不可再分。也就是说,一个表中的每个属性必须只能是一个值,而不能是一个表。举个反例:
选课表(学生表(姓名,学号),课程名称,成绩,学分)
该表不满足1NF,因为选课表中又嵌套了学生表。
第一范式是关系型数据库基本要求。
- 第二范式(2NF):在1NF的基础上,表中所有属性完全依赖于主键。所谓的A属性依赖于B属性,就是指A属性的值是由B属性决定的,例如姓名依赖于学号,年龄依赖于学号。举个反例:
该表不满足2NF,因为(课程名称) → (学分),(学号) → (姓名, 年龄),而该表的主键是(学号,课程名称),课程名称和学号各自都不是主键,因此存在元素由非主键决定。
不符合2NF的表可能存在数据冗余,更新异常,插入异常,删除异常的问题。
- 第三范式(3NF):在2NF的基础上,属性不依赖于其他非主属性,也就是表中所有属性不存在传递依赖。举个反例:
该表满足2NF,因为每个属性都由学号决定。但是该表不满足3NF,因为存在以下传递依赖:(学号) → (所在学院) → (学院地点, 学院电话)。
不符合3NF的表也会存在数据冗余,更新异常,插入删除异常的情况。
- BC范式(BCNF):在3NF的基础上,主属性不依赖于主属性。举个反例:
该表的主键就是(学号,课程名称,教师),但是如果一个教师只教一门课程的话,那么就存在(教师) → (课程名称),也就是主元素之间存在着依赖关系。
第四范式(4NF):在BCNF的基础上,要求把同一表内的多对多关系删除。
第五范式(5NF):从最终结构重新建立原始结构。
当范式等级不断提高,数据库的冗余越来越少,出错的可能也越来越小,数据所占用的空间也越来越小。但是,查询时需要的时间代价会增大(主要体现在表的连接操作,需要做笛卡尔积)。因此,范式数不是越高越好,应当权衡时间代价和空间代价,选择适合业务场景的范式。