一、基本概念
1.1数据库与数据库系统
数据:是数据库中存储的基本对象,是描述事物的符号记录
数据库(DataBase,DB):是长期存储在计算机内、有组织、可共享的大量数据集合
数据库系统(DataBase System,DBS):包含数据库的一个系统(DB,硬件,软件,人员)
1.2数据库管理系统的功能
数据库管理系统(DataBase Management System,DBSM):属于DBS中的一个软件
主要实现对共享数据有效的组织、管理和存储,故DBSM具有以下六方面功能:数据定义,数据库操作,数据库运行管理,数据的组织、存储和管理,数据库的建立和维护,其他功能
1.3数据库管理系统的特征及分类
·DBSM的特征:数据结构化且统一管理,有较高的数据独立性,数据的控制功能(数据库的安全性、完整性、并发控制、故障恢复)
·DBSM分类:通常可分为三类:关系数据库系统、面向对象的数据库系统、对象关系数据库系统
1.4数据库系统的体系结构
·集中式数据库系统:不仅数据是集中的,数据的管理也是集中的
·客户端/服务器结构:一个处理机的请求被传送到另一个处理机上执行
·并行数据库系统:多个物理上连在一起的CPU,分为共享式和无共享式
·分布式数据库系统:包括物理上分布、逻辑上集中的分布式数据库结构和物理上分布、逻辑上分布的数据库结构两种
1.5数据库的三级模式
数据库采用“三级模式-两级映像”
这种设计模式能保证数据发生变化时,程序不需修改
模式/内模式映像:保证了数据库的数据有较高的物理独立性
外模式/模式映像:保证了数据库的数据有较高的逻辑独立性
1.6数据库设计
需求分析:产出数据流图、数据字典、需求说明书
概念结构设计:设计E-R图
逻辑结构设计:将E-R图转换成关系模式
物理设计:生成物理数据库
二、数据模型
2.1基本概念
模型就是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。
常用的数据模型分为概念数据模型和基本数据类型
数据模型的三要素是:数据结构、数据操作和数据的约束条件
2.2E-R模型
实体-联系模型(E-R模型):只能说明实体间的语义联系,还不能进一步详细说明数据结构。在解决实际问题时,通常先设计一个E-R模型,再将其转换成计算机能接受的数据
弱实体:对另一些实体有很强的依赖关系,即此类实体必须以另一类实体存在为前提
2.3数据模型
层次模型:采用树形结构表示数据与数据间的联系
网状模型:是层次模型的特例,比层次模型更具有普遍性
关系模型:采用关系模型作为数据库的组织方式
面向对象模型:采用面向对象的方法来设计数据库
软考中级主要考察关系模型,在此重点讲解
2.4关系模型
关系模型中用表格结构表达实体集以及其实体集之间的关系
三、关系代数
3.1关系数据库的基本概念
1)属性和域:属性是描述一个事物常取的若干特征,每个属性的取值范围对应一个值的集合;每个属性的取值范围对应一个值的集合,称为该属性的域
2)笛卡尔积与关系:笛卡尔积是两个或多个集合中所有可能的有序对集合;关系是笛卡尔积中选取出来的一部分有序对
3)关系数据库模式:关系数据库的值是这些关系在某一时刻对应的关系的集合
4)完整性约束:提供了一种手段来保证当授权用户对数据库做修改时不会破坏数据的一致性。关系完整性分为三类:实体完整性(主属性不能取空值)、参照完整性(一个关系中的外键值必须是在他参照的另一个关系中的主键能找到的值)、用户定义完整性(必须符合实际应用意义,如年龄大于18等)
5)关系运算
3.2五种基本的关系代数运算
3.3扩展关系的代数运算
典型例题:假设我们有两个关系:
Student(SNO, SNAME, AGE, SDEPT)
SNO:学号
SNAME:学生姓名
AGE:学生年龄
SDEPT:学生所在系别
Course(CNO, CNAME, CPNO, CREDIT)
CNO:课程号
CNAME:课程名称
CPNO:先修课程号(如果该课程没有先修课程,则为空)
CREDIT:学分
现在,我们要查询所有“计算机科学”系的学生选修的“数据结构”课程的先修课程号。
关系代数运算如下:
选择计算机科学系的学生:
σ_SDEPT='计算机科学'(Student)
选择“数据结构”课程:
σ_CNAME='数据结构'(Course)
找出选修了“数据结构”课程的学生:
这里我们需要将Student关系和选课关系(假设为SC,包含SNO和CNO两个字段)进行连接,并且与“数据结构”课程进行连接。
Student ⨝_SNO=SNO SC ⨝_CNO=CNO σ_CNAME='数据结构'(Course)
找出这些学生的先修课程号:
由于选课关系SC中不包含先修课程号,我们需要再次与Course关系进行连接,通过CNO和CPNO字段。
(Student ⨝_SNO=SNO SC ⨝_CNO=CNO σ_CNAME='数据结构'(Course)) ⨝_CNO=CPNO Course
投影出先修课程号:
π_CPNO((Student ⨝_SNO=SNO SC ⨝_CNO=CNO σ_CNAME='数据结构'(Course)) ⨝_CNO=CPNO Course)
四、关系数据库SQL语言简介
4.1SQL语言
语法关键字不区分大小写
DB查询:select...from(where);
分组查询:group by,select sno.avg(score)from student group by sno having(avg(score)>60)
更名:select sno as "学号" from t1;
插入:insert into...values();
删除:delete from...where
修改:update from...where
排序:order by
DISTINCT:过滤重复选项,只保留最后一条
UNION:取或运算
INTERSECT:与
MAX、MIN、AVG...
4.2SQL访问控制
五、关系数据库的规范化
5.1函数依赖
函数依赖描述了一个属性或属性集合的值对另一个属性或属性集合的值的依赖性。简单来说,如果某个属性集(或称为决定因素)的值能够唯一确定另一个属性集(或称为依赖因素)的值,那么我们就说后者依赖于前者。
具体来说,函数依赖可以分为以下几种类型:
·平凡函数依赖:当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
·非平凡函数依赖:当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
·完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
·部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
·传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
5.2规范化
1)第一范式:关系中每一个分量必须是一个不可分割的数据项,即表中不允许有小表的存在
2)第二范式:关系R属于1NF,且每一个非主属性完全依赖于任何一个候选码,则R属于2NF,即在1NF的基础上,每一个非主属性不会依赖复合主键中的某一个列
3)第三范式:在满足1NF的基础上,表中不存在非主属性对码的传递依赖
4)BC范式:在3NF的基础上进一步消除主属性对码的部分函数依赖和传递依赖,即每一种情况下,每一个依赖左边决定因素都必然包含候选键
候选键和候选关键字判断:1.从未在右边出现过的属性必然是;2.以该属性扩展,看能否遍历所有属性,无法遍历的是
判断范式:每个属性都不可再分——1NF;满足1NF基础上,非主属性完全依赖主键而不是主键的某个子集——2NF;满足1NF的基础上,没有传递依赖——3NF。
5.3模式分解及分解具有的特性
1)保持函数依赖分解:保持原来的依赖集不变,且消除冗余(如递归)
eg.F(A->B,B->C,A->C) =>R1(A,B) R2(B,C)
2)无损连接:分解后的关系模式能还原出原关系模式即无损
保持函数依赖分解的例子:
假设我们有一个关系模式R,其属性集U={A, B, C, D, E},函数依赖集F={A→B, A→C, B→D, C→E}。我们可以按照以下步骤将其分解为保持函数依赖的子关系模式:
识别候选键:在这个例子中,A是唯一的候选键,因为它能唯一确定其他所有属性。
应用保持函数依赖的分解规则:将每个函数依赖的左边(即决定因素)作为新关系模式的键,右边(即被决定因素)作为新关系模式的属性。于是我们得到以下子关系模式:
R1(A, B, C):基于A→B和A→C
R2(B, D):基于B→D
R3(C, E):基于C→E
验证保持函数依赖:我们可以看到,在分解后的每个子关系模式中,函数依赖都得到了保持。例如,在R1中,A→B和A→C都成立;在R2中,B→D成立;在R3中,C→E成立。
无损连接的例子:
假设我们有一个关系模式R(U, F),其中U={A, B, C, D},F={A→B, B→C, C→D}。我们将其分解为两个子关系模式R1(A, B)和R2(B, C, D)。现在我们要验证这个分解是否是无损的。
计算R1和R2的交集和差集:R1∩R2 = {B},R1 - R2 = {A},R2 - R1 = {C, D}。
检查是否存在函数依赖使得交集决定差集:在这个例子中,B→C和B→D都存在于F中,因此B(即R1∩R2)可以决定R2 - R1(即{C, D})。这满足了无损连接的条件。
六、数据库的控制功能
6.1事务管理
事务是一个操作序列,这些操作“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位。在SQL语言中,事务定义的语句有以下三条:事务开始、事务提交、事务回滚
事务具有(操作)原子性、(数据)一致性、(执行)隔离性、(改变)持久性
6.2数据库的备份与恢复
故障类型:事务内部故障、系统故障、介质故障、计算机病毒
备份方法:静态转储和动态转储、海量转储和增量转储、日志文件
恢复:反向扫描文件日志,对事务的更新操作执行逆操作,继续反向扫描,直到事务的开始标志
6.3并发操作
并发操作带来的问题:丢失修改、不可重复读、读脏数据
并发控制技术:1)封锁:排他锁(写锁)、共享锁(读锁)
2)三级封锁协议:一级(解决丢失更新的问题)、二级(解决丢失更新、读脏数据的问题)、三级(解决全部问题)
6.4分布式数据库系统
·分片透明:用户或应用程序不需要知道逻辑上访问的表具体怎么分块存储
·逻辑透明:用户或应用程序无需知道局部使用的哪种数据,局部数据透明
·复制透明:不关心数据库在网络中各个节点复制情况
·位置透明:不需要知道存放数据的物理位置