第一节 数据库基本概念
1-1、数据库技术发展
- 数据(Data)
- 信息(Information)
- 数据库系统(DataBase System,DBS)
- 数据库管理系统(DataBase Management System,DBMS)
- 数据库(Database,DB)
数据管理技术的发展经历了3个阶段:
- 人工阶段、
- 文件系统,有以下缺点
- (1)数据冗余(Data Redundancy)。文件与应用程序密切相关,相同的数据集合在不同的应用程序中使用时,经常需要重复定义、重复存储,数据冗余度大。
- (2)数据不一致性(Data Inconsistency)。由于相同数据的重复存储,单独管理,同样的数改和维护带来难度,容易造成数据的不一致。据可能存在于多个不同的文件中,给数据的修
- (3)数据孤立(Data Isolation),即数据取系弱。由于数据分散在不同的文件中,而这些文件可能具有不同的文件格式,文件之间是孤立的,所以从整体上看文件之间没有反映现实世界事物之间的内在联系,因此很难对数据进行合理的组织以适应不同应用的需要。
- 数据库系统
1-2、数据模型
数据库的基础结构是数据模型,是用来描述数据的一组概念和定义。
数据模型的三要素是数据结构、数据操作和数据的约束条件。
按照不同的数据模型,可以将数据库的发展历史分为3个阶段。
- 层次和网状数据库系统
- 关系数据库系统
- 第三代数据库系统
No SQL (Not only of SQL):No SQL 数据库的产生就是为了面对大规模数据集合和多重数据种类带来的挑战,特别是大数据应用难题。
1-3 数据库管理系统 (DBMS)
DBMS 实现了对共享数据有效的组织、管理和存取
1-3-1:DBMS 功能
- 数据定义
- 数据定义语音(Data Definition Language,DDL)
- 数据库操作
- 数据操纵语言(Data Manipulation Language,DML)
- 数据库运行管理
- 数据组织
- 存储和管理
- 数据库的建立和维护
1-3-2:DBMS 特点
- 数据结构化且同意管理
- 有较高的数据独立性
- 数据控制功能
- 数据库的安全性
- 数据的完整性(Integrality)
- 并发控制(concurrency control)
- 故障恢复(recovery from failure) 恢复原理:建立冗余(redundancy)数据
1-4 数据库系统三级模式
数据按外模式的描述提供给用户,按内模式的描述存储在磁盘上,而概念模式提供了连接这两极模式的相对稳定的中间观点,并使得两级的任意一级的改变都不受另一级的牵制。
第二节 关系数据库
2-1 关系数据库基本概念
2-1-1 关系的基本术语
- 属性(Attribute)
- 域(Domain)
- 目或度(Degree)
- 候选码(Candidate Key)
- 主码(Primary Key)
- 主属性(Prime Attribute)
- 外码(Foreign Key)
- 笛卡尔积
2-1-2 关系的数据库模式
2-1-3 关系的完整性约束
- 实体完整性(Entity Integrity)
- 参照完整性(引用完整性)(Referential Integrity)
- 用户定义完整性(User Defined Integrity)
2-2 关系运算
- 并(Union)
- 差(Difference)
- 广义笛卡尔积(Extend Cartesian Product)
- 投影(Projection)
- 选择(Selection)
- 交(Intersection)
- 连接(join)
- 除(Division)
- 广义投影(Generalized Projection)
- 外连接(Outer jion)
- 聚集函数
提高表达式运算效率的基本原则
即存在连接操作与选择操作的,先完成选择操作,后连接操作,这样效率高
2-3 关系数据库设计基本理论
-
函数依赖
数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间联系和约束的抽象,是数据内在的性质,是语义的体现。函数依赖则是一种最重要最基本的数据依赖。ArmStrong
R<U,F>,其中 U 为属性集,F 是 U上的一组函数依赖,则有:
- A1自反律:若 YX≤U,则 X→Y 为F 所蕴含;
- A2增广律:若 X→Y为F 所蕴含,且 ZSU,则 XZ→YZ 为F 所蕴含;
- A3传递律:若 X→Y,Y→Z 为F 所蕴含,则 X→Z 为F 所蕴含。
根据上面三条推理规则,又可推出下面三条推理规则:
- 合并规则:若 X→Y,X→Z,则 X→YZ 为F 所蕴含;
- 伪传递规则:若 X→Y,WY→Z,则 XW→Z 为F 所蕴含;
- 分解规则:若 X→Y,Z≤Y,则 X→Z 为F 所蕴含
-
多值依赖
多值依赖具有以下6条性质:- 多值依赖具有对称性。即若X→→Y,则X→→Z,其中Z-U-XY。
- 多值依赖具有传递性。即若X→→Y,→→Z,则X→-Z-Y。
- 函数依赖可以看成是多值依赖的特殊情况。
- 若X→→Y,X→→Z,则X→→Z。
- 若X→→Y,X→→2,则X→→YnZ。
- 若X→→,X→→2,则X→→ZY。
-
规范化
- 第一范式(1NF)要求属性原子性、不可分割
- 第二范式(2NF)要求非主属性完全依赖候选键、(还存在传递依赖)
- 第三范式(3NF)要求消除传递依赖、(存在多值依赖)
- 巴斯-科德范式(BCNF)要求每个非平凡函数依赖都是超键
- 第四范式(4NF)要求消除多值依赖,
第三节 数据库设计
3-1 数据库设计的基本步骤
3-2 数据需求分析
数据需求分析是在项目确定之后,用户和设计人员对数据库应用系统所要涉及的内容(数据)和功能(行为)的整理和描述,是以用户的角度来认识系统。
参与人员:分析人员和用户
分析和表达用户需求的方法:自顶向下、自底向上
3-3 概念结构设计
概念结构设计的目标是产生反映系统信息需求的数据库概念结构,即概念模式。
实体-联系方法(Entity-Relationship Approach),简称E-R方法。
超类实体:将多个实体中相同的属性组合起来构造出的新实体
派生属性 :指某个实体的非主键属性由该实体其他主键属性决定
设计工作步骤包括
-
选择局部应用 使用数据流图
-
逐一设计分 E-R 图
-
E-R 图合并
存在的冲突主要有以下3类
3.1 属性冲突
3.2 命名冲突
3.3 结构冲突
3-4 逻辑结构设计
概念:在概念结构设计的基础上进行数据模型设计,可以是层次模型、网状模型、关系模型
主要工作步骤包括:确定数据类型、将E-R图转换为指定的数据模型、确定完整性约束和确定用户视图
3-4-1 E-R图转换为关系模式
3-4-2 关系模式规范化
3-4-3 确定完整性约束
3-4-4 确定用户视图
3-4-5 反规范化(Denormalization)
概念:规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法叫做反规范化设计。
优点:能够减少数据库查询时SQL连接的数目,从而减少磁盘I/O数据量,提高查询效率。
缺点:数据的重复存储,浪费了磁盘空间;为了保障数据的一致性,增加了数据维护的复杂性。
常见的反规范化操作:冗余列、派生列、表重组、表分割(水平分割、垂直分割)
常见的同步方式:应用程序同步、批量处理同步、触发器同步
3-5 物理设计
主要工作步骤:
3-5-1 确定数据分布
- 索引是提高数据库查询效率的机制,但不能进行数据更新。
数据库安全机制中,通过提供存储过程供第三方开发人员调用进行数据更新,从而保证数据库的关系模式不被第三方所获取。
- 视图具有一定的安全机制,但也不能更新数据。
- 触发器可以作为更新机制,但无法完全保证数据库安全性。
- 存储过程可以定义一段代码来提供给用户程序调用,通过代码调用来实现更新,避免了向第三方提供系统表结构的过程,从而更好地保证了数据库的安全性。
- 物化视图大部分情况下只能更新视图的数据,不能更新构建视图的数据
3-5-2 确定数据的存储结构
指数据文件中记录之间的物理结构
3-5-3 确定数据的访问方式
- 由其存储结构所决定的,采用什么样的存储结构,就使用什么样的访问方式。
- 数据库结构主要由存储记录格式、记录在物理设备上的安排及访问路径(存取方法)等构成。
- 存储记录结构设计
- 存储记录布局
- 存取方法的设计
3-6 数据库实施
- 建立实际的数据库结构
- 数据加载
- 数据库试运行和评价
- 测试的目的是为了发现问题,而不是为了说明能达到哪些功能。
3-7 数据库运行与维护
该阶段,对数据库的维护主要由DBA完成
- 对数据库性能的检测和改善
- 数据库的备份及故障恢复
- 数据库重组和重构
第四节 应用程序与数据库的交互
4-1:库函数级别访问接口
库函数级别的数据访问接口往往是数据库提供的最底层的高级程序语音访问数据接口,如Oracle数据库的OCI。
优点:
- 具有SQL语言非过程性的优点
- 具有C语言过程性的优点
- 具有SQL语言的扩展
- PL/SQL 语言过程性和结构性的优点
缺点:
- 强依赖于特定的数据库,移植性差,需要数据库开发人员对该数据库机制有较深的理解
- 学习难度较大
- 开发效率不是很高
4-2:嵌入式SQL访问接口(Embedded SQL)
- 嵌入式SQL是一种将SQL语句直接写入某些高级程序语言,如C、COBOL、Java、Ada。
- 嵌入式 SOL 中除了可以执行标准 SQL程序之外,为了对应嵌入的需要,还增加了一些额外的语法成分。主要包括宿主变量使用声明、数据库访问、事务控制、游标操作的语法等。
4-3:通用数据接口标准
开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的。
优点:能以统一方式处理所有的关系数据库
数据库接口
- 数据库访问对象(Database Access Object,DAO):位于业务逻辑层与数据资源层之间,访问桌面数据库。
- 远程数据库对象(Remote Database Object,RDO):访问远程数据库,比DAO更高的性能,比ODBC更易用
- ActiveX数据对象(ActiveX Data Objects,ADO ):用来实现访问关系与非关系数据库中的数据。
Java 数据库连接(Java Database Connectivity,JDBC)是Java 语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC是一种用于执行 SOL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。
4-4:ORM访问接口
对象关系映射(Object Relational Mapping,简称 ORM 或 O/RM 或 O/R mapping)是一种程序设计技术,用于实现面向对象编程语言里不同类型系统数据之间的转换。
ORM 可以解决数据库与程序间的异构性。
典型的 ORM 框架有 Hibernate、Mybatis 和 JPA 等。
(1)Hibernate:全自动的框架,强大、复杂、笨重、学习成本较高。
- 1.支持多种不同类型数据库
- 2.全自动框架,强大、复杂、笨重、学习成本高
- 3.框架复杂,所生成的持久化对象能够表达面向对象中的继承和聚合关系,开发工作量小
- 4.无SQL语句开发
- 5.不够灵活
- 6.无法编写高度优化的sql,因此性能会比ibatis低
(2)Mybatis:半自动的框架。
- 1.半自动框架
- 2.支持定制化SQL、存储过程以及高级映射
- 3.MyBatis通过提供DAL层,将业务逻辑和数据访问逻辑分离,使得系统设计更清晰、更易维护、更易单元测试
- 4.易于上手和掌握
(3)JPA(Java Persistence API):JPA 通过 JDK 5.0 注解或 XML 描述对象-关系表的映射关系,是 Java 自带的框架。
(4)JDO(Java Data Object,Java数据对象)
- 透明的对象存储
- 很灵活,可以在任何数据库底层上运行,包括关系型数据库、普通文件、XML文件和对象数据库等,可移植性强
sql mapping访问接口 - iBatis
- 1.支持定制化SQL、存储过程以及高级映射
- 2.需要开发者对XML和SQL有更深入的了解
- 3.Batis则可能在大型项目中面临命名空间管理混乱的问题。
- 4.iBatis则更加依赖于开发者对SQL语句和映射规则的编写,可能会增加开发难度和维护成本
第五节 NoSQL数据库
5-1 分类与特点
特点:不保证关系数据的ACID特性
5-1-1:列式存储数据库
即传统的关系型数据库,通常应用分布式存储的海浪数据库。
现有产品如 Cassandra、HBase、Riak.
5-1-2:键值对存储数据库(Key-value)
键值存储的典型数据结构一般为数组链表:先通过 Hash 算法得出 Hashcode,找到数组的某一个位置,然后插入链表。
优势:简单、易部署
现有产品如 Tokyo Cabinetyrant、Redis、Voldemort、Oracle BDB.
5-1-3:文档型数据库
文档型数据库同键值对存储数据库类似。
文档型数据库比传统键值数据库的查询效率更高
现有产品如 CouchDB.MongoDb,国内也有文档型数据库 SequoiaDB,已经开源。
5-1-4:图数据库
图形结构的数据库同其他采用行列以及刚性结构的 SOL 数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。
现有产品:Neo4J、InfoGrid、Infinite Graph 等
4个特征、优点
1.易扩展
2.大数据量、高性能
3.灵活的数据类型
4.高可用
缺点
1.不够成熟。大多数产品处于初创期
2.没有形成一定的标准,产品种类繁多,缺乏官方支持
3.不提供对SQL支持,学习和应用迁移成本较高
4.支持的特性不够丰富,现有产品提供的功能比较有限。
5-2 体系框架
从下至上分4层:数据持久层(Data Persistence)、数据分布层(Data Distrubution Model)、数据逻辑模型层(Data Logical Model)和接口层(Interface),层次之间协调工作、相辅相成。
适用情况
1.数据模型比较简单
2.需要灵活性更强IT系统
3.对数据库性能要求较高
4.不需要高度的数据一致性
数据库分区
水平分区、垂直分区
数据持久化
数据持久层是根据分层思想,通过建立逻辑数据操作接口,采取一定的对象/关系映射策略,隐藏数据库访问代码细节,向业务开发人员提供透明的对象持久化操作机制。
能够为项目开发带来的好处:
- (1)分离业务逻辑层和数据层,降低两者之间的耦合;
- (2)通过对象/关系映射向业务逻辑提供面向对象的数据访问;
- (3)简化数据层访问,隐藏数据库连接、数据读写命令和事务管理细节。
第六节 SQL 结构化查询语言
在 SQL 语句中,HAVING 通常与 GROUP BY字句连用。
HAVING子句的作用是过滤分组后的数据行,它与 WHERE 子句的作用类似,不同的是 WHERE 过滤的是行数据,而 HAVING 过滤的是分组后的组记录。典型的使用场景是,先用 GROUP BY 对数据进行分组,然后通过 HAVING 对分组后的组记录进行过滤