备考2025软考《数据库系统工程师》,上岸!!!
一、计算机系统基础
1.CPU的组成
运算器:ALU、AC、DR、PSW
控制器:IR、PC、AR、ID
寄存器组:专用寄存器、通用寄存器
内部总线
2.运算器组成
功能:执行所有的算术运算;执行所有的逻辑运算并进行逻辑测试。
- 算数据逻辑单元(ALU):负责处理数据,实现对数据的算术运算和逻辑运算。
- 累加寄存器(AC):也称为累加器,当ALU执行计算时为其提供一个工作区
- 数据缓冲寄存器(DR):对内存进行读写操作时,用DR暂时存放由内存读写的一条指令或一个数据字。作为CPU和内存、外设之间的在操作速度上的缓冲,以及数据传送的中转站。
- 状态条件寄存器(PSW):保存根据算术指令和逻辑指令运行或测试的结果建立的各种条件码的内容,主要分为状态标志和控制标志。如运算结果进位标志(C)、运算结果溢出标志(V)、运算结果为0标志(Z)、运算结果为负标志(N)、中断标志(I)、方向标志(D)等。
3.控制器组成
功能:决定了计算机运行过程的自动化。它不仅要保证程序的正确执行,而且要能够处理异常事件。
包括:指令控制逻辑、时序控制逻辑、总线控制逻辑和中断控制逻辑等几个部分。
控制器在工作过程中主要使用以下部件:
- 指令寄存器(IR):用来暂时存放一条指令,由指令译码器根据指令寄存器中的内容产生各种微操作指令,控制其他部分协调工作。
- 程序计数器(PC):存放的是将要执行的下一条指令的地址。
- 地址寄存器(AR):保存CPU当前所访问的内存单元的地址。由于内存和CPU存在操作上的差异,所以需要使用AR保存地址信息,直到内存读/写操作完成为止。
- 指令译码器(ID):对指令中的操作码字段进行分析解释,识别该指令规定的操作,然后向操作控制器发出具体的控制信号。
4.指令的组成
指令:是对机器进行程序控制的最小单位。
一条指令通常包括两个部分:操作码和操作数
操作码 | 操作数本身或操作数的地址 |
操作码:指出是什么操作,由指令译码器(ID)来识别。
操作数:直接指出操作数本身或者指出操作数所在的地址。
5.寄存器组分类
专用寄存器:运算器和控制器中的寄存器是专用寄存器,其作用是固定的。
通用寄存器:用途广泛并可由程序员规定其用途,其数目因处理器不同而不同。
6.总线的分类
- 数据总线(DB):用来传递数据信息,是双向的,DB的宽度决定了CPU和计算机其他设备之间每次交换数据的位数。
- 地址总线(AB):用于传送CPU发出的地址信息,是单向的。地址总线的宽度决定了CPU的最大寻址能力。
- 控制总线(CB):用来传送控制信号、时序信号和状态信息等。CB中的每一条线的信息传送方向是单向且确定的,但CB作为一个整体则是双向的。
7.总线结构的优点
- 简化了系统结构,便于系统设计制造
- 大大减少了连线数目,便于布线,减小体积,提高系统可靠性
- 便于接口设计,所有与总线连接的设备均采用类似的接口
- 便于系统的扩充、更新与灵活配置,易于实现系统的模块化
- 便于设备的软件设计,所有接口的软件就是对不同的接口地址进行操作
- 便于故障诊断和维修,同时也降低了成本
8.数据表示
- 各种数据在计算机中表示的形式称为机器数,其特点是数的符号用0、1表示。
- 机器数对应的实际数值称为该数的真值。
- 机器数又分为无符号数和带符号数两种。
- 无符号数表示正数,在机器数中没有符号位。
- 对于带符号数,机器数的最高位是表示正、负的符号位,其余二进制位表示数值。
- 带符号的机器数可采用原码、反码、补码、移码等编码方法。
- 机器数的这些编码方法称为码制。
9.原码
在原码表示中,机器数的最高位是符号位,0代表正号,1代表负号,余下各位是数值的绝对值。
零有两个编码,即[+0]原=00000000、[-0]原=10000000。
原码表示方法的优点在于数的真值和它的原码表示之间的对应关系简单,相互转换容易,用原码实现乘、除运算的规则简单。缺点是用原码实现加、减运算很不方便。
10.反码
在反码表示中,机器数的最高一位是符号位,0代表正号,1代表负号。
正数的反码与原码相同
负数的反码则是其绝对值按位取反
零有两个编码,即[+0]反=00000000、[-0]反=11111111
11.补码
在补码表示中,机器数的最高一位是符号位,0代表正号,1代表负号。
正数的补码与原码和反码相同
负数的补码等于其反码的末位加1
零有唯一的编码,即[+0]补=[-0]补=00000000。
12.移码
将补码的符号位取反则得到相应的移码表示
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码
定点数
是指小数点位置固定不变的数。小数点的位置通常有两种约定:
- 定点数:纯整数,小数点在最低有效数值位之后
- 定点小数:纯小数,小数点在最高有效数值位之前
浮点数
小数位置固定不变的数。阶码通常为带符号的纯整数,尾数为带符号的纯小数。表示格式为:
13.输入输出控制
程序控制方式
(1)无条件传送:外设总是准备好的,无条件,随时接收和提供数据
(2)程序查询方式:CPU利用程序来查询外设的状态,准备好了再传送数据
中断方式:CPU不等待,也不执行程序去查询外设的状态,而是由外设准备好以后,向CPU发出中断请求信号通知CPU,CPU收到中断请求信号以后,保存正在执行的程序现场,转入I/O中断服务程序的执行,然后再返回到被打断的程序继续执行。
在有多个中断源的情况下,常用的处理方法有中断信号线法、中断软件查询法、菊花链法、总线仲裁法、中断向量表法。
直接内存存取方式(DMA):数据的传输是在主存和外设之间直接进行,不需要CPU的干预,只需要CPU在过程的开始和结束时发出一些命令,实际操作是由DMA硬件直接执行完成的,CPU在传送的过程中可以处理别的任务。
通道方式和外围处理机方式:更进一步减轻了CPU对I/O操作的控制,更进一步提高了CPU的工作效率,但是是以增加更多的硬件为代价。
14.几个周期的概念区别
- 指令周期:是指执行一条指令所需要的时间,包括取指、分析、执行。
- 时钟周期:也称为震荡周期,是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅仅完成一个最基本的动作。
- 总线周期:通常把CPU通过总线对存储器I/O接口进行一次访问所需要时间成为一个总线周期。
- CPU周期:也称为机器周期。CPU的操作速度快,但访问内存的速度却慢得多,我们把从内存读取一条指令的最短时间,称为机器周期。
15.计算机指令寻址方式
寻址指令中操作数有效地址的方式称为寻址方式。常见有:
- 立即寻址:操作数作为指令的一部分直接写在指令中,这种操作数称为立即数。
- 寄存器寻址:操作数已存在某寄存器中,或把目标操作数存入寄存器。
- 直接寻址:操作数存在内存中,在指令中直接给出操作数的有效地址。
- 寄存器间接寻址:操作数在存储器中,操作数的有效地址用SI、DI、BX、BP这4个寄存器之一来指定。
16.计算机体系结构分类
17.CISC和RISC
指令系统类型 | 指令 | 寻址方式 | 实现方式 | 其他 |
CISC(复杂) | 数量多 使用频率差别大 可变长格式 | 支持多种 | 微程序控制技术(微码) | 研制周期长 |
RISC(精简) | 数量少 使用频率接近 大部分为单周期指令 操作寄存器 只有Load/Store操作内存 | 支持方式少 | 增加了通用寄存器 硬布线逻辑控制为主 适合采用流水线 | 优化编译 有效支持高级语言 |
18.RISC的关键技术
- 重叠寄存器窗口技术
- 优化编译技术
- 超流水线及超标量技术
- 硬布线逻辑与微程序相结合在微程序技术中
19.流水线吞吐率
最大吞吐率 = 1 / 流水线周期
20.随机访问存储器
动态随机访问存储器(DRAM):需刷新,速度慢,功耗高,低成本,大容量,内存条
静态随机访问存储器(SRAM):无需刷新,速度快,功耗低,高成本,小容量,Cache和寄存器
21.相联存储器
直接映像:冲突率高
全相联映像:冲突率低
组相联映像:冲突率折中
22.磁盘阵列技术
- RAID0:性能最高,无冗余,并行处理,损坏无法恢复,磁盘利用率100%,最少2个磁盘。(临时数据存储)
- RAID1:镜像结构,可用性可恢复性好,磁盘利用率50%,最少2个磁盘。(关键数据镜像)
- RAID2/3/4:有1个固定的校验盘,海明码、字节级条带化、块级条带化,磁盘利用率(N-1)/N,最少3个磁盘。(已被淘汰)
- RAID5:分布式奇偶校验,每个磁盘交替存储数据和奇偶校验信息,磁盘利用率(N-1)/N,最少3个磁盘。(文件和应用服务器)
- RAID6:双奇偶校验,无固定的校验盘,磁盘利用率(N-2)/N,最少4个磁盘。(高容错长期存储)
- RAID0+1:RAID10,先镜像后条带,结合了RAID 0和RAID 1的特点。需要至少4个磁盘。(数据库)
23.加密技术
对称加密
(1)DES:主要采用替换和移位的方法加密。它用56位密钥对64位二进制数据块进行加密。
(2)3DES:用两个56位的密钥。
(3)RC-5
(4)IDEA:类似于DES,其密钥长度为128位。
(5)AES:基于排列和置换运算。
非对称加密:RSA、ECC、DSA、D-H、ElGamal
信息摘要算法:MD5、SHA-1
- 摘要算法的主要目的是防止数据被篡改
- 数字信封的主要目的是保证对称密钥传送过程中的机密性
- 数字签名是利用公钥和私钥加密技术对文件或数据进行数字签名,以确保文件的真实性和完整性,同时防止文件被篡改或伪造、防抵赖
24.可靠性
MTTF 平均无故障时间
MTTR 平均修复时间
MTBF 平均故障间隔时间
可靠性: MTTF / (1+MTTF) (无故障)
可用性: MTBF / (1+MTBF) (故障间隔时间)
可维护性:1 / (1+MTTR) (修复时间)
25.校验码
- 奇偶校验
基本思想:通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。只能检测,不能修正。
- 海明码
在数据位之间插入k个校验码,通过扩大码距来实现检错与纠错。设数据位是n位,校验位是k位,则满足以下公式:
- 循环冗余校验码
生成多项式,模2除法
二、程序语言基础
26.规定程序数据类型的好处
- 有利于在翻译程序的过程中为数据合理分配存储单元,因为程序设计语言为不同的数据类型规定了其所占的存储空间,如果数据类型确定,其所占的存储空间也是确定的。
- 有利于对参与表达式计算的数据对象进行检查,因为知道数据的数据类型,我们就可以根据类型来判断该数据是否可以参与某表达式计算,如自加、自减的操作数不允许是浮点数,这只要根据数据的类型就能判断某操作数,是否能进行自加、自减运算。
- 有利于规定数据对象的取值范围及能够进行的运算,根据数据类型,我们可以数据的存储空间,也同时能知道数据的表示范围,如C语言中的整型数据,它占两个字节(16位) ,能表示的数据范围就是-216至216-1。
27.分析阶段的输入和输出
词法分析器的任务就是读入源程序,对其进行一定的切分,得到记号流。
语法分析读入是记号流,输出语法树
语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查
编译器需要将源代码转换为目标机器的指令集,这个过程叫作目标代码生成。
28.编译过程
29.编绎程序和解释程序
(1)解释程序(解释器):要么直接解释执行源程序,要么将源程序翻译成某种中间代码后再加以执行。它按源程序中语句的执行顺序,逐条翻译并立即执行相关功能。
(2)编译程序(编译器):将源程序翻译成目标程序(目标代码),然后再在计算机上运行目标程序。一般分为两个阶段:
编译阶段:把源程序翻译成目标程序。
运行阶段:执行目标程序。
- 编译程序:将源程序翻译成目标语言程序,然后在计算机上运行目标程序。(目标程序)
- 解释程序:也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行。(不生成独立的目标程序)
30.程序设计语言定义
语法:是指由程序语言的基本符号组成程序中的各个语言结构(包括程序)的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序语言的语法可用形式语言进行描述。
语义:是程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。
静态语义指编译时可以确定的语法成分的含义,而运行时才能确定的含义是动态语义。一个程序的执行结果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。语言的实现则有个语境问题。
语境:是指理解和实现程序设计语言的环境,包括编译环境和运行环境。
31.程序语言的基本成分
- 数据
- 运算:运算符号、运算规则
- 控制:顺序、选择、循环
- 传输
32.编译过程
词法分析:对源程序从左到右逐个字符的扫描
语法分析:根据语言的语法规则将单词符号序列分解成各类语法单位,如无错误就会构造出语法树。
语义分析:进行类型分析和检查
中间代码生成:三地址码、四元式;中间代码不依赖于具体机器
代码优化:优化依据的原则是程序的等价变换规则
目标代码生成:是编译器工作的最后一个阶段,与具体的机器密切相关
33.编译与解释的比较
效率:
- 编译过程比解释方式耗时更多;但源程序只需编译一次就可多次运行,总体效率可能更高
- 运行时解释程序需反复扫描源程序,每次引用变量要进行类型检查等,运行速度慢;运行时需更多内存,包括为用户程序、解释程序及其支撑系统分配空间
灵活性:
- 编译方式灵活性较差
- 解释方式更灵活,运行中可修改程序,如增加语句或修改错误;对错误定位更精确
可移植性:
- 解释方式解释器一般用程序设计语言编写,对其重新编译就可运行在不同环境中
三、数据结构与算法
34.排序算法复杂度
(1)若待排序的记录数目n较小,可采用直接插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因此当记录本身信息量较大时,用简单选择排序方法较好。
(2)若待排序记录按关键字基本有序,则宜采用直接插入排序或冒泡排序
(3)当n很大且关键字的位数较少时,采用链式基数排序较好
(4)若n较大,则应采用时间复杂度为O(nlogn)的排序方法,例如快速排序、堆排序或归并排序。
35.排序算法总结
36.算法稳定性
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
👉以 int 类型数据从小到大排序为例:
排序前:4,1,3a,6,8,7,2,3b,5(3a 在 3b 之前)
排序后:1,2,3a,3b,4,5,6,7,8(3a 还在 3b 之前,稳定)
排序后:1,2,3b,3a,4,5,6,7,8(3a 不在 3b 之前,不稳定)
37.快速排序
它应用分治思想进行排序,通过对数据进行分区操作,并递归地对分区后的子序列进行排序,从而达到整个序列有序的目的。
排序流程
快速排序算法通过多次比较和交换来实现排序,其排序流程大致如下:
- 选择基准值:在待排序序列中选取一个元素作为基准值。
- 分区操作:通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
- 递归排序:对基准值左右两边的子序列递归地执行上述分区操作,直到子序列的长度为1或0,即已经有序。
排序步骤
以数组为例,快速排序的详细步骤可以归纳为:
- 设置两个指针:通常设置两个指针i和j,分别指向序列的起始位置和末尾位置。
- 选择基准值:可以选择序列的第一个元素作为基准值,也可以采用其他策略选择基准值。
- 分区操作:
- 从后往前搜索(j--),找到第一个小于基准值的元素A[j],将其与A[i]交换。
- 从前往后搜索(i++),找到第一个大于基准值的元素A[i],将其与A[j]交换。
- 重复上述步骤,直到i和j相遇,此时基准值就位于其最终位置。
- 递归排序:对基准值左边的子序列和右边的子序列分别进行快速排序。
性能分析
- 时间复杂度:快速排序的平均时间复杂度为O(n log n),但在最坏情况下(如输入序列已经有序或接近有序),时间复杂度会退化到O(n^2)。这通常是由于基准值选择不当导致的。
- 空间复杂度:快速排序的空间复杂度主要取决于递归的深度。在最好的情况下,递归深度为logn,空间复杂度为O(logn)。但在最坏情况下,递归深度可能达到n,空间复杂度为O(n)。然而,由于快速排序是原地排序(in-place sort),除了递归所需的栈空间外,不需要额外的存储空间,因此可以认为其空间复杂度是O(logn)(不考虑递归栈)。
注意事项
- 快速排序是一种不稳定的排序算法,即相同的元素在排序后可能会改变它们之间的相对位置。
- 快速排序的性能受到基准值选择策略的影响,因此在实际应用中需要选择合适的基准值选择策略以提高排序效率。
- 建议选择随机值作为基准值
示例
2 8 7 1 3 5 6 4
38.几种二叉树
1. 最优二叉树(Optimal Binary Tree)
- 定义:最优二叉树是一种特定类型的二叉树,用于最小化查找某些特定元素的成本。它通常用于哈夫曼编码等场景。
- 特性:
- 节点的权重(如频率)较高的节点应该距离根节点较近,以减少查找时间。
- 构建过程通常涉及贪心法。
2. 平衡二叉树(Balanced Binary Tree)
- 定义:平衡二叉树是一种特殊的二叉树,其左右子树的高度差不超过1,保持树的平衡性。
- 特性:
- 插入、删除、查找操作的时间复杂度为 O(log n)。
- 常见的平衡二叉树包括 AVL树(平衡二叉搜索树)和红黑树。
3. 完全二叉树(Complete Binary Tree)
- 定义:完全二叉树是每层都被填满的二叉树,除了最后一层外,最后一层的节点从左到右依次排列。
- 特性:
- 除了最后一层外,所有节点都有两个子节点。
- 完全二叉树的高度为 ⌊log2(n)⌋,其中 n 是节点数。
- 除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树
4. 最小生成树(Minimum Spanning Tree, MST)
- 定义:在一个带权无向图中,最小生成树是包含所有顶点的生成树,并且具有最小的边权和。
- 特性:
- 可以使用 Kruskal 算法或 Prim 算法来构造。
- 最小生成树不一定是唯一的,存在多条不同的最小生成树。
Kruskal算法适合处理边稀疏的图,因为它主要基于边的权值进行排序和选择,操作简单且效率较高。其缺点是当图中的边数较多时,排序操作可能会比较耗时。
Prim算法适合处理顶点稠密的图,因为它从顶点出发逐步扩展连通部分,避免了大量的边排序操作。其缺点是在某些情况下可能需要多次遍历图中的顶点,导致效率较低。
39.一般树转二叉树
- 孩子结点转为左子树结点
- 兄弟结点转为右子树结点
40.二叉排序树
给定一个二叉树,如果满足以下条件,那就是二叉排序树
- 若它的左子树不空,则左子树上所有结点的值均小于它根结点的值。
- 若它的右子树不空,则右子树上所有结点的值均大于它根结点的值。
- 它的左、右子树都满足为⼆叉排序树
二叉排序树最大的好处就是查找效率高,相较于链表一个一个去查找,二叉排序树可以去根据数据的排序规律来进行查找
41.树的结点与边
- 度:树中一个节点的度是指它的子节点数目。根节点的度为其直接子节点数。
- 节点数:设树有 ( n ) 个节点。
- 边数:树的边数总是比节点数少 1,即 ( n - 1 ) 条边。这是因为树是连通且无环的,每添加一个节点需要增加一条边。
因此,在树中,节点数 ( n ) 和边数 ( e ) 满足 ( e = n - 1 )。
边数 = 结点数 - 1
42.度为0和度为2结点
在二叉树中,度为0的结点数总是比度为2的结点数多1个。
即: n0 - n2 = 1
二叉树中总结点数(K+1)等于度为0的节点数(n0)、度为1的节点数(n1)和度为2的节点数(n2)之和。
哈夫曼树中没有度为1的结点(最优二叉树)
n个权值表示n个叶子节点,即n0
n0-n2=1
n2=n0-1
n0+n2=2n0 - 1
43.算法类型
44.哈夫曼编码转哈夫曼树
45.图的拓扑排序
拓扑图求拓扑序列时一个关键因素:那就是箭头的画出节点在箭头指向节点前,如果一个节点被很多箭头所指,那么应该要在所有这些箭头的画出节点之后才是本节点。拓扑序列的开始节点应该是没有箭头所指的节点。
46.稀疏矩阵压缩
三元组顺序表
十字链表
47.大顶堆
根节点(堆顶元素)是所有节点中的最大值(父节点都大于左右子节点)。大顶堆常用于实现优先队列,且可用于构建堆排序算法。
48.小顶堆
小顶堆中的根节点是所有节点中的最小值(父节点都小于左右子节点)。小顶堆常用于问题如:查找流中的前 K 个最小元素。
49.图的遍历特点
四、操作系统基础
50.位示图计算
51.死锁计算
11个资源,N个进程,每个进程要3个资源,N不超过多少时不会发生死锁?
假设有m个资源,每个进程最多可申请k个资源,
系统要想绝对避免死锁的发生,允许的最多进程数为1+(m-k)/(k-1),当后面一项是小数时,总是取为小整数。
则有1+(11-3)/(3-1)=5,因此当N的取值不超过5时,系统不会发生死锁。
n个进程、每个进程需要R个资源
发生死锁的最大资源数:n *(R-1)
不发生死锁的最小资源数:n * (R-1) + 1
52.进制的转换
8转16
16转8
8转2 每位转3位二进制
16转2 每位转4位二进制
53.索引文件结构
54.I/O请求过程
55.页面置换算法
- 最佳置换算法:是一种理想化的算法,即选择那些是永不使用的,或者是在最长时间内不再被访问的页面置换出去。
- 先进先出置换算法(FIFO):优先淘汰最先进入主存的页面,也就是在内存中停留时间最长的页面。
- 最近最少未使用算法(LRU):优先淘汰最近这段时间用得最少的页面。系统为每一个页面设置一个访问字段,记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时,选择T最大的页面。
- 最近未用置换算法(NUR):优先淘汰最近一段时间未引用过的页面。系统为每一个页面设置一个访问位,访问位为1代表访问过,为0代表没有被访问过,置换页面时选择访问位为0的置换出去。
56.进程调度
- 高级调度:又称“长调度”“作业调度”或“接纳调度”,它决定处于输入池中的哪个后备作业可以调入主系统做好运行的准备,成为一个或一组就绪进程。
- 中级调度:又称“中程调度”或“对换调度”,它决定于交换区中的哪个就绪进程可以调入内存,以便直接参与对CPU的竞争。
- 低级调度:又称“短程调度”或“进程调度”,它决定处于内存中的哪个就绪进程可以占用CPU。低级调度是操作系统中最活跃、最重要的调度程序,对系统的影响很大。
五、网络基础知识
57.层次化网络设计
- 核心层:高速数据交换,常用冗余机制
- 汇聚层:网络访问策略控制、数据包处理、过滤、寻址
- 接入层:用户接入、计费管理、MAC地址认证、收集认证信息
58.TCP/IP协议
图一:
图二:
59.邮件协议
1. SMTP (Simple Mail Transfer Protocol)
- 含义: 简单邮件传输协议
- 功能: 用于发送邮件到邮件服务器或从一个邮件服务器传输邮件到另一个邮件服务器。
- 工作流程: 当你从邮件客户端发送邮件时,SMTP 负责将邮件传送到指定的邮件服务器。
- 端口: 通常使用端口 25,但也可以使用 587 或 465(加密)。
2. POP3 (Post Office Protocol version 3)
- 含义: 邮局协议版本 3
- 功能: 用于从邮件服务器下载邮件到本地设备。邮件下载后,通常会从服务器上删除(除非设置为保留邮件)。
- 工作流程: 你用邮件客户端(如Outlook、Thunderbird)连接到邮件服务器并下载邮件。邮件会存储在本地,离线时可以查看。
- 端口: 通常使用端口 110,但也可以使用 995(加密)。
3. IMAP (Internet Message Access Protocol)
- 含义: 网络邮件访问协议
- 功能: 用于从邮件服务器读取邮件。邮件存储在服务器上,用户可以在多个设备上访问相同的邮件账户,邮件保持同步。
- 工作流程: 当你用邮件客户端访问邮件时,IMAP 让你能够查看、管理(如标记为已读、删除)邮件,而邮件依然保存在服务器上,便于跨设备访问。
- 端口: 通常使用端口 143,但也可以使用 993(加密)。
区别总结:
- 邮件发送: SMTP 负责邮件的发送。
- 邮件接收:POP3 将邮件下载到本地设备,邮件通常会从服务器上删除(除非设置保留)。
- IMAP 保持邮件在服务器上,允许从多个设备访问和管理邮件。
使用场景:
- SMTP 用于设置邮件发送功能。
- POP3 适用于需要将邮件保存在本地设备上的用户。
- IMAP 适用于需要在多个设备上同步访问邮件的用户。
60.网络互联设备
物理层
- 中继器:仅用于连接相同的局域段
- 集线器:信号放大功能
数据链路层
- 网桥:连接两个局域网网段,只要两个网络的MAC子层以上的协议相同,都可以用网桥互连。
- 交换机:按相对简单的决策信息转发,一般不考虑包中隐藏的更深的其他信息。
网络层
- 路由器:用于连接多个逻辑上分开的网络。当数据从一个子网传输到另一个子网时,可通过路由器来完成。
应用层
- 网关:连接不同类型且协议差别较大的网络,则要选用网关设备。
61.DHCP分配IP
如果某主机开机后没有得到 DHCP 服务器的响应,它通常会使用一个私有的默认地址范围,即 169.254.0.0 到 169.254.255.255 的地址。
这是由 APIPA(Automatic Private IP Addressing)机制提供的,用于在没有 DHCP 服务器响应时自动分配 IP 地址。
62.网络协议
IPSec:工作于网络层,为IP数据报文进行加密
HTTPS:是HTTP和SSL的结合体,为传输层以上层次数据加密
TLS:安全传输层协议,用于在两个通信协议之间提供保密性和数据完整性
PP2P:工作于数据链路层,用于链路加密
MIME:多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
IMAP4:与POP3协议一样也是规定个人计算机如何访问网上的邮件的服务器进行收发邮件的协议,但是IMAP4协议同POP3协议相比更高级。
ARP和RARP:ARP负责将IP地址转换为物理地址(MAC地址);RARP负责将物理地址转换为IP地址。
ICMP(网络控制信息协议):是一个专门用于发送差错报文的协议。由于IP是一种尽力传送的协议,传送的数据报有可能丢失、重复、延迟或乱序,因此IP需要一种避免差错并在发生差错时报告的机制。主要功能有:通告网络故障、通告网络拥堵、协助解决故障。
63.网络地址路由汇聚
64.DMZ
DMZ 是指非军事化区,也称周边网络,可以位于防火墙之外也可以位于防火墙之内。非军事化区一般用来放提供公共网络服务的设备。
这些设备由于必须被公共网络访问,所以无法提供与内部网络主机相等的安全性。
65.TCP和UDP
- TCP是面向连接的、可靠的,但是它是以牺牲通信量来实现的,也就是会降低传输速率。如果传输的数据量不多,对传输速度要求不高,但是对可靠性要求较高的时候,则用TCP。
- UDP是无连接的、不可靠的,但是它可以实现高速传输。如果传输的数据量大,要求传输速度快,但对可靠性要求不高,或者已知网络是可靠的情况下,可以用UDP。
66.国密算法
67.防火墙技术
防火墙阻挡对网络的非法访问和不安全数据的传递,使得本地系统和网络免于受到许多网络安全威胁。防火墙主要用于逻辑隔离外部网络与受保护的内部网络。
防火墙技术经历了包过滤、应用代理网关和状态检测技术三个发展阶段。
包过滤防火墙:
它处于网络层和数据链路层,一般有一个包检查块(包过滤器),通过该检查模块,对每一个传入和传出网络的IP包打开进行检查,例如源地址、目的地址、协议和端口等,对于不符合包过滤规则的包进行记录,发出报警并丢弃该包。
优点:
(1)过滤型的防火墙通常直接转发报文,它对用户完全透明,速度较快。
(2)包过滤通常被包含在路由器数据包中,所以不需要额外的系统来处理。
缺点:
(1)它可以控制站点与网络之间的相互访问,但不能控制传输数据的内容,因为内容是应用层数据。
(2)访问控制粒度太粗糙,不能防范黑客攻击,不能处理新的安全威胁。
应用代理网关防火墙
能彻底隔断内网与外网的直接通信,内网用户对外网的访问变成了防火墙对外网的访问,然后再由防火墙转发给内网用户。
所有通信都必须经应用层代理软件转发,访问者任何时候都不能与服务器建立直接的TCP连接,应用层的协议会话过程必须符合代理的安全策略要求。
• 优点:可以检查应用层、传输层和网络层的协议特征,对数据包的检测能力比较强。
• 缺点:难以配置,处理速度非常慢。
状态检测技术防火墙
它结合了代理防火墙的安全性和包过滤防火墙的高速等优点,在不损失安全性的基础上,提高了代理防火墙的性能。
状态监测不仅仅根据规则表来检查每一个进出的包,更考虑了数据包是否符合会话所处的状态,因此提供了完整的对传输层的控制能力,同时也改进了流量处理速度。
因为它采用了一系列优化技术,使防火墙性能大幅度提升,能应用在各类网络环境中,尤其是在一些规则复杂的大型网络上。
68.入侵检测与防御
入侵检测与防御技术主要有两种:
- 入侵检测系统(IDS):注重的是网络安全状况的监管,通过监视网络或系统资源,寻找违反安全策略的行为或遭到入侵攻击的迹象,并发出报警。因此绝大多数IDS系统都是被动的。
- 入侵防御系统(IPS):是在入侵检测系统的基础上发展起来的,不仅能够检测到网络中的攻击行为,同时可以主动地对攻击行为发出响应,对入侵活动和攻击性网络流量进行拦截,避免造成损失。
六、数据库技术基础
69.数据的独立性
(1)数据的物理独立性:它是指当数据库的内模式发生改变时,数据的逻辑结构不变。
(2)数据的逻辑独立性:它是指用户的应用程序与数据库的逻辑结构是相互独立的,数据的逻辑结构发生变化后,用户程序也可以不修改,但是,为了程序能够正确执行,需要修改外模式/模式之间的映像。
70.数据模型的三要素
(1)数据结构:是所研究的对象类型的集合,是对系统静态特征的描述。
(2)数据操作:对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及操作规则。
(3)数据的约束条件:是一组完整性规则的集合。
71.E-R模型扩展
(1)弱实体:一个实体的存在必须以另一个实体为前提。
(2)特殊化:某些实体一方面具有一些共性,另一方面还具有各自的特殊性。这样,一个实体集可以按照某些特征区分为几个子实体。
七、关系数据库
72.关系的三种类型
(1)基本关系(基本表或基表):它是实际存在的表,是实际存储数据的逻辑表示。
(2)查询表。查询结果对应的表。
(3)视图表。它是一种虚拟表,是由基本表或其他视图表导出的表。它本身是不独立存储在数据库的,数据库只存放它的定义。
73.关系的完整性约束
• 关系的完整性约束:是对关系的某种约束条件,用来保证用户对数据库作出修改时不会破坏数据的一致性,防止对数据的意外破坏。
(1)实体完整性:是指基本关系R的主属性不能取空值。
(2)参照完整性:外键
(3)用户定义完整性:是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及到的数据必须满足的语义要求。
74.关系运算总结
75.查询优化
• 查询优化是指为查询选择最有效的查询计划的过程。一个查询可能会有多种实现方法,关键是如何找出一个与之等价的且操作时间又少的表达式,以节省时间、空间,提高查询效率。
• 在关系代数运算中,笛卡儿积、连接运算是最耗费时间和空间的。
优化的准则:
(1)提早执行选取运算。对于有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量和从外存读块的次数。
(2)合并乘积与其后的选择运算为连接运算。
(3)将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
(4)将投影运算和其前后的二目运算结合起来,使得没有必要为去掉某些字段再扫描一遍关系。
(5)在执行连接前对关系适当地预处理,就能快速地找到要连接的元组。方法有两种:索引连接法、排序合并连接法。
(6)存储公共子表达式。对于有公共子表达式的结果应存于外存(中间结果),这样,当从外存读出它的时间比计算的时间少时,就可节约操作时间。
76.多值依赖
定义:若关系模式R(U)中,X,Y,Z是U的子集,并且Z=U-X-Y。当且仅当对R(U)的任何一个关系r,给定一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关,则称“Y多值依赖于X”或“X多值决定Y”成立。记为:X→→Y
例:参考书目(课程,教师,参考书) 课程→→参考书
如果Z=∅,为平凡的多值依赖;
如果Z≠∅,则为非平凡的多值依赖。
多值依赖具有如下6条性质:
1、多值依赖具有对称性。即若X→→Y,则X→→Z,其中Z=U-X-Y。
2、多值依赖的传递性。即若X→→Y,Y→→Z,则X→→Z-Y。
3、函数依赖可以看成是多值依赖的特殊情况。
4、若X→→Y,X→→Z,则X→→YZ。
5、若X→→Y,X→→Z,则X→→Y ⋂ Z。
6、若X→→Y,X→→Z,则X→→Z-Y。
77.规范化
第一范式
定义:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。记为R∈1NF。
存在的问题(以下问题第一二三范式都存在,BCNF不存在):
(1)数据冗余。
(2)更新异常(修改操作后数据不一致)。
(3)插入异常。
(4)删除异常。
第二范式:
定义:若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF。
换句话说:当1NF消除了非主属性对码的部分函数依赖,则称为2NF。
第三范式
定义:若关系模式R(U,F)中不存在这样的码X,属性组Y及非主属性Z(Z⊈Y)使得X→Y,(Y⇸X) Y→Z成立,则关系模式R∈3NF。
即:当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
BC范式
定义:关系模式R∈1NF,若X→Y且Y⊈X时,X必含有码,则关系模式R∈BCNF。
• 也就是说,当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。
• 结论:一个满足BCNF的关系模式,应有如下性质:
(1)所有非主属性对每一个码都是完全函数依赖;
(2)所有主属性对每一个不包含它的码,也是完全函数依赖;
(3)没有任何属性完全函数依赖于非码的任何一组属性
第四范式
定义:关系模式R∈1NF,若对于R的每个非平凡多值依赖X→→Y且Y⊈X时,X必含有码,则关系模式R(U,F)∈4NF。
• 4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。
• 注意:如果只考虑函数依赖,关系模式最高的规范化程度是BCNF,如果考虑多值依赖,关系模式最高的规范化程度是4NF。
78.Armstrong公理系统
Armstrong公理系统(函数依赖的公理系统):设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有如下推理规则:
(1)A1自反律:若Y⊆X⊆U,则X→Y为F所蕴涵。
(2)A2增广律:若X→Y为F所蕴涵,且Z⊆U,则XZ→YZ为F所蕴涵。
(3)A3传递律:若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵。
• 根据上述三条推理规则又可推出下述三条推理规则:
(1)合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵。
(2)伪传递律:若X→Y,WY→Z,则XW→Z为F所蕴涵。
(3)分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴涵。
79.函数依赖的闭包F+
定义:关系模式R(U,F)中为F所逻辑蕴含的函数依赖的全体称为F的闭包,记为:F+。
80.属性的闭包XF+
定义:设F为属性集U上的一组函数依赖,X⊆U,XF+={A|X→A能由F根据Armstrong公理导出},则称XF+为属性集X关于函数依赖集F的闭包。即:属性集X的闭包XF+是指所有能由X决定的属性集合。
81.候选码的求解方法
L:仅出现在函数依赖集F左部的属性
R:仅出现在函数依赖集F右部的属性
LR:在函数依赖集F左右部都出现的属性
NLR:在函数依赖集F左右部都未出现的属性
• 根据候选码的特性,对于给定一个关系模式R(U,F),可以得出如下结论:
结论1:若X(X⊆U)是L类属性,则X必为R的任一候选码的成员。若XF+=U,则X必为R的唯一候选码。
结论2:若X(X⊆U)是R类属性,则X不是R的任一候选码的成员。
结论3:是X(X⊆U)是NLR类属性,则X必为R的任一候选码的成员。
结论4:若X(X⊆U)是L类和NLR类属性组成的属性集,若XF+=U,则X必为R的唯一候选码。
82.最小函数依赖集
• 如果函数依赖集F满足下列条件,则称F为一个最小函数依赖集,或称极小函数依赖集或最小覆盖。
(1)F中的任一函数依赖的右部仅有一个属性,即无多余的属性;
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价,即无多余的函数依赖;
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F与F-{X→A}⋃{Z→A}等价,即去掉各函数依赖左边的多余属性。即:
(1)所有函数依赖的右侧只有一个属性
(2)没有冗余的函数依赖
(3)所有函数依赖的左侧没有冗余的属性
83.无损连接
无损连接是指将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损连接分解。
• 定理:关系模式R(U,F)的一个分解ρ ={ R1(U1,F1),R2(U2,F2)},具有无损连接的充分必要的条件是:
U1 ⋂ U2 → U1-U2∈F+ 或 U1 ⋂ U2 → U2-U1∈F+。
• 注意:这个定理只适用于分解为两个子模式的情况,分解为多个子模式的时候不适用。
84.保持函数依赖
原始依赖一定要分到同一个子集中才能保持函数依赖!!!
八、SQL语言
85.SQL的基本组成
1、数据定义语言。SQL DDL提供定义关系模式和视图、删除关系和视图、修改关系模式的命令。
2、交互式数据操纵语言。SQL DML提供查询、插入、删除和修改的命令。
3、事务控制。SQL提供定义事务开始和结束的命令。
4、嵌入式SQL和动态SQL。用于嵌入到某种通用的高级语言中混合编程。其中,SQL负责操纵数据库,高级语言负责控制程序流程。
5、完整性。SQL DDL包括定义数据库中的数据必须满足的完整性约束条件的命令,对于破坏完整性约束条件的更新将被禁止。
6、权限管理。SQL DDL中包括说明对关系和视图的访问权限。
7、SQL语言中完成核心功能的9个动词:
(1)数据查询:Select
(2)数据定义:Create、Drop、Alter
(3)数据操纵:Insert、Update、Delete
(4)数据控制:Grant、Revoke
86.SQL的数据类型
- char(n):固定长度字符串,表示n个字符的固定长度字符串
- varchar(n):可变长度字符串,表示最多可以有n个字符的字符串
- int:整型,也可以用integer
- smallint:短整型
- numeric(p,d):定点数,p为整数位,n为小数位
- real:浮点型
- double precision:双精度浮点型
- float(n):n为浮点型
- boolean:布尔型
- date:日期型
- time:时间型
87.表的创建
语句格式:CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]…
[,<表级完整性约束条件>]);
注:[ ]表示可选,< >表示必填。
1)、实体完整性约束:
(1)在列后面加 PRIMARY KEY
(2)在最后加PRIMARY KEY(属性名1,属性名2) //主码为属性组(两个或以上属性的组合)只能用这种方法
2)、参照完整性约束:
(1)在列后面加 References 表名(属性名)
(2)在最后面加,有几个外码,就写几行。
Foreign Key (属性名) References 表名(属性名)
[ON DELETE [CASCADE|SET NULL]
ON DELETE CASCADE 表示删除被参照关系的元组时,同时删除参照关系中的元组;CASCADE:级联
ON DELETE SET NULL表示删除被参照关系的元组时,将参照关系的相应属性值置为空值。
3)、属性值上的约束
(1)NOT NULL:表示不允许取空值;
(2)UNIQUE:表示取值唯一;
(3)NOT NULL UNIQUE:表示取值唯一且不为空;
(4)CHECK:限制列中值的取值范围。如:CHECK (Sex='男' OR Sex='女'),CHECK (余额>=0),CHECK (年龄>=18 AND 年龄<=60)
4)、全局约束
4.1)基于元组的检查子句:
这种约束是对单个关系的元组值加以约束。
例:入职日期小于等于离职日期,可以用 CHECK (入职日期<=离职日期)
CREATE TABLE E
(Eno CHAR(8) PRIMARY KEY,
入职日期 DATE,
离职日期 DATE,
CHECK (入职日期<=离职日期) );
4.2)基于断言的语法格式:
CREATE ASSERTION <断言名> CHECK (<条件>)
例:教学数据库的模式Students、SC、C中创建一个约束ASSE_SC1:不允许男同学选修“张勇”老师的课。
CREATE ASSERTION ASSE_SC1 CHECK
(NOT EXISTS
(SELECT * FROM SC WHERE Cno IN
(SELECT Cno FROM C WHERE TEACHER='张勇')
AND Sno IN
(SELECT Sno FROM Students WHERE SEX='M')));
88.表的修改
语句格式:ALTER TABLE <表名> [ ADD <新列名> <数据类型> [列级完整性约束条件] ]
[ DROP <完整性约束名>]
[ Modify <列名> <数据类型> ] );
如:
ALTER TABLE S ADD Zap CHAR(6); //在表S中新增一列ZAP,该列的数据为空
ALTER TABLE S MODIFY Status INT; //将表S的Status属性的数据类型更改为INT
ALTER TABLE S ADD Constraint C_cno CHECK(......) //在表S中新增CHECK约束,取名为C_cno
89.表的删除
语句格式:DROP TABLE <表名>
如:
DROP TABLE S; //表删除后,不再是数据库模式的一部分
90.索引的概念
- 数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找到所需信息,无须阅读整本书。在数据库中,索引使数据库无须对整个表进行扫描,就可以在其中找到所需数据。
- 比如在字典中,我们按字母建立索引。在数据库中,索引是某个表中的一列或者若干列的值的集合,和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
91.索引的作用
(1)通过创建唯一索引,可以保证数据记录的唯一性。
(2)可以大大加快数据检索速度。
(3)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
(4)在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
索引分为聚集索引和非聚集索引。聚集索引是指索引表中索引项的顺序与表中记录的物理顺序一致的索引。
92.索引的创建
建立索引语句格式:CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);
• 次序:ASC(升序)或DESC(降序),默认为升序。
• UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。
• CLUSTER:表明要建立的索引是聚簇索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织
如:
CREATE UNIQUE INDEX S_Sno on S(Sno); //在表S的Sno列上建立索引S_Sno,默认为升序
CREATE UNIQUE INDEX P_Pno on P(Pno); //在表P的Pno列上建立索引P_Pno,默认为升序
CREATE UNIQUE INDEX J_Jno on J(Jno); //在表J的Jno列上建立索引J_Jno,默认为升序
CREATE UNIQUE INDEX SPJ_NO on SPJ(Sno ASC,Pno DESC,Jno ASC);//在表SPJ上建立索引SPJ_NO,属性Sno按升序,Pno按降序,Jno按升序
93.索引删除
语句格式:DROP INDEX <索引名>
例:DROP INDEX StudentIndex; //删除索引StudentIndex
94.视图的优点和作用
(1)可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求。
(2)使用视图可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便地使用和管理数据,简化数据权限管理和重新组织数据以便输出到其他应用程序中。
(3)视图可以使用户只关心他感兴趣的某些特定数据和所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示。
(4)视图大大地简化了用户对数据的操作。
(5)视图可以让不同的用户以不同的方式看到不同或者相同的数据集。
(6)在某些情况下,由于表中数据量太大,因此在表的设计时常将表进行水平或者垂直分割,但表的结构的变化对应用程序产生不良的影响。
(7)视图提供了一个简单而有效的安全机制。
95.视图的创建
语句格式:CREATE VIEW 视图名(列表名)
AS SELECT 查询子句
[WITH CHECK OPTION];
• 视图的创建中,必须遵循如下规定:
(1)子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。
(2)WITH CHECK OPTION表示对UPDATE,INSERT,DELETE操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT子查询目标列的主属性组成。
96.删除视图
语句格式:DROP VIEW 视图名
如:DROP VIEW CS_STUDENT //删除视图CS_STUDENT
97.Select 基本结构
语句格式: SELECT [ALL | DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC | DESC]…]
98.连接查询
如果查询涉及两个以上的表,则称为连接查询
例:(1)检索选修了课程号为'C1'的学生号和学生姓名:
Select S.Sno,Sname from S,SC where S.Sno=SC.Sno and SC.Cno='C1';
99.子查询
子查询也称嵌套查询。嵌套查询是指一个SELECT-FROM-WHERE查询块中可以嵌入另一个查询块之中。
在SQL中允许多重嵌套。
• IN(在……集合中) | NOT IN(不在……集合中)
例:(1)检索选修了课程号为'C1'的学生号和学生姓名:
Select Sno,Sname from S
where Sno IN (Select Sno from SC Where Cno='C1');
• EXISTS(存在) | NOT EXISTS(不存在)
例:查询没有被任何同学选修的课程号和课程名
Select Cno,Cname from C where NOT EXISTS (select * from SC where SC.Cno=C.Cno)
100.聚集函数
聚集函数是一个值的集合为输入,返回单个值的函数。SQL提供了5个预定义集函数:
平均值AVG()、最小值MIN()、最大值MAX()、求和SUM()、计数COUNT()。
例:(1)查询课程C1的最高分和最低分以及高低分之间的差距
Select MAX(Grade),MIN(Grade),MAX(Grade)-MIN(Grade) From SC Where Cno='C1';
101.分组查询
• 1、GROUP BY子句
对元组进行分组,此时聚集函数只用于每个分组。
(1) Select AVG(Grade) from SC;
(2) Select Sno,AVG(Grade) from SC GROUP BY Sno;
• 2、HAVING子句:
假如元组在分组前按照某种方式加上限制,使得不需要的分组为空。可以在GROUP BY子句后面加上HAVING子句。其实就是分组后做一个选择,去掉不满足HAVING后面的那个条件的分组。
(3) Select Sno,AVG(Grade) from SC GROUP BY Sno HAVING AVG(Grade)>85;
102.字符串操作
字符串常用LIKE来进行匹配操作,“%”匹配任意长度字符串;“_”匹配任意一个字符。模式是区分大小写的。
例:(1)查询住址包含“科技路”的学生姓名:
Select Sname from S Where Addr LIKE '%科技路%';
(2)查询名字为‘国庆’的学生姓名、年龄和所在系:
Select Sname,Sage,SD from S Where Sname LIKE '__国庆';
为了使模式中包含特殊字符,即%和_,允许使用ESCAPE关键词来定义转义符,LIKE语句后面紧跟“ESCAPE'\'”表明转义符'\' 后面的特殊字符为普通字符。
LIKE 'ab\%cd%'escape'\' //匹配所有以ab%cd开头的字符串
LIKE 'ab\\cd%'escape'\' //匹配所有以ab\cd开头的字符串
103.集合操作
1、UNION(并)、UNION ALL(不去掉重复行)
查询在银行有贷款或者有存款的所有客户身份证号:
select customer-no from 贷款
union
select customer-no from 存款;
2、INTERSECT(交)
查询在银行既有贷款又有存款的客户身份证号:
select customer-no from 贷款
intersect
select customer-no from 存款;
3、EXCEPT(差)
查询只在银行有贷款而没有存款的客户身份证号:
select customer-no from 贷款
except
select customer-no from 存款;
104.外连接
1、LEFT JOIN(左外连接)
SELECT S.Sno,Sname,SC.Cno,Grade FROM S LEFT JOIN SC ON S.Sno=SC.Sno;
2、RIGHT JOIN(右外连接)
SELECT S.Sno,Sname,SC.Cno,Grade FROM S RIGHT JOIN SC ON S.Sno=SC.Sno;
3、FULL JOIN(全外连接)
SELECT S.Sno,Sname,SC.Cno,Grade FROM S FULL JOIN SC ON S.Sno=SC.Sno;
105.INSERT INTO语句
INSERT INTO语句用于向表中插入新的行。
语句格式:
INSERT INTO 表名 VALUES (值1,值2…)
INSERT INTO 表名(列名1,列名2…) VALUES (值1,值2…)
106.DELETE语句
• DELETE语句用于删除表中的行。
语句格式:DELETE FROM 表名 WHERE 条件表达式
例:DELETE FROM SC WHERE Cno='C1';
• 也可以删除表中的所有数据:DELETE FROM 表名
例:DELETE FROM SC;
注意:不同于DORP TABLE SC,DELETE只是删除表中的数据,但是关系模式仍然存在,表SC仍然存在于数据库中。
107.UPDATE语句
UPDATE语句用于修改表中的数据。
语句格式:UPDATE 表名 SET 列名=新值 WHERE 条件表达式
• 例:UPDATE SC SET Grade = 90 WHERE Sno='3001' AND Cno='C2';
108.视图的查询与更新
1、视图的查询
例:建立计算机系(CS表示计算机系)学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生。
CREATE VIEW CS_STUDENT
AS SELECT Sno,Sname,Sage,Sex
FROM Student
Where SD='CS'
WITH CHECK OPTION;
此时要查询计算机系年龄小于20岁的学生的学号及年龄的SQL语句如下:
SELECT Sno,Sage FROM CS_Student WHERE Sage<20
系统执行该语句时,通常先将其转换成等价的对基本表的查询,然后执行查询语句。也就是查询视图时,系统先从数据字典中取出视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。
对上例修正之后的查询语句为:
SELECT Sno,Sage FROM Student WHERE SD='CS' AND Sage<20;
2、视图的更新
SQL对视图的更新必须遵循以下规则:
(1)从多个基本表通过连接操作导出的视图不允许更新。
(2)对使用了分组、聚集函数操作的视图不允许进行更新操作。
(3)如果视图是从单个基本表通过投影、选取操作导出的则允许进行更新操作,且语法同基本表。
109.授权(GRANT)
语句格式:
GRANT 权限 ON TABLE/DATABASE 表名/数据库名
TO 用户1,用户2… /PUBLIC
[WITH GRANT OPTION];
PUBLIC:表示将权限授予所有人
WITH GRANT OPTION:表示获得了这个权限的用户还可以将权限赋给其他用户。
110.收回权限(REVOKE)
语句格式:
REVOKE 权限 ON TABLE/DATABASE 表名/数据库名
FROM 用户1,用户2… /PUBLIC
[RESTRICT | CASCADE];
RESTRICT:表示只收回语句中指定的用户的权限
CASCADE:表示除了收回指定用户的权限外,还收回该用户赋予的其他用户的权限。级联
例:将用户User1及User2对供应商S、零件P、项目J的所有操作权限收回:
REVOKE ALL PRIVILEGES ON TABLE S,P,J FROM User1,User2;
将所有用户对供应商S的所有查询权限收回:
REVOKE SELECT ON TABLE S FROM PUBLIC;
将User1用户对供应商S的供应商编号Sno的修改权限收回。
REVOKE UPDATE(Sno) ON TABLE S FROM User1;
111.触发器概述
• 触发器主要有以下三方面的特点:
(1)当数据库程序员声明的事件发生时,触发器被激活。声明的事件可以是对某个特定关系的插入、删除或更新。
(2)当触发器被事件激活时,不是立即执行,而是首先由触发器测试触发条件,如果事件不成立,响应该事件的触发器什么都不做。
(3)如果触发器声明的条件满足,则与该触发器相连的动作由DBMS执行。动作可以阻止事件发生,可以撤销事件。
• 创建触发器时需指定:
(1)触发器名称
(2)在其上定义触发器的表
(3)触发事件:触发器将何时激发
(3)触发条件:满足什么条件时执行触发动作
(4)触发动作:指明触发器执行时应做的动作
• 触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。
• 不能在临时表或系统表上创建触发器,但触发器可以引用临时表。
112.创建触发器
CREATE TRIGGER 触发器名称 [BEFORE | AFTER]
[DELETE | INSERT | UPDATE OF 列名] //触发事件
ON 表名
[REFERENCING <临时视图名>]
[FOR EACH ROW | FOR EACH STATEMENT]
[WHEN <触发条件>] //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作
BEGIN
<触发动作> //BEGIN...END 中定义触发动作,即当触发条件满足时,需要数据库做什么
END [触发器名称]
BEFORE/AFTER:指明是在执行触发语句之前激发触发器还是执行触发语句之后激发触发器。
DELETE:当一个DELETE语句从表中删除行时激发触发器。
INSERT:当一个INSERT语句向表中插入行时激发触发器。
UPDATE/UPDATE OF(列名):当UPDATE修改表中的值时,激发触发器,也可加(OF 列名)指定是某一列的值被修改时激发触发器。
REFERENCING:触发器运行过程中,系统会生成两个临时视图,分别存放更新前和更新后的值,对于行级触发器,为OLD ROW和NEW ROW,对于语句级触发器,为OLD TABLE和NEW TABLE。
REFERENCING new row AS nrow / REFERENCING old row AS orow 。
FOR EACH ROW:表示为行级触发器,对每一个被影响的元组(即每一行)执行一次触发过程。
FOR EACH STATEMENT:表示为语句级触发器,对整个事件只执行一次触发过程,为默认方式。
113.更改和删除触发器
1、更改触发器
语句格式:
ALTER TRIGGER <触发器名> [BEFORE|AFTER]
DELETE|INSERT|UPDATE OF [列名]
ON 表名|视图名
AS
BEGIN
要执行的SQL语句
END
2、删除触发器
语句格式: DROP TRIGGER <触发器名>
114.嵌入式SQL
SQL提供了将SQL语句嵌入到某种高级语言中的方式,通常采用预编译的方法。
1、区分主语言与SQL语句的方式:
EXEC SQL <SQL语句>
2、向主语言传递SQL语句执行的状态信息的方式:
SQLCA,即SQL通信区,是系统默认定义的全局变量。
3、主变量(共享变量):
主语言通过主变量向SQL语句提供参数,主变量是由主语言的程序定义的,并用SQL的DECLARE语句说明。
在SQL语句中,为了与SQL中的属性名区分,在引用共享变量时,前面需要加“:”
115.游标
• SQL语言是面向集合的,一条SQL语句可以产生或处理多条记录。而主语言是面向记录的,一组主变量一次只能放一条记录,所以,引入游标,通过移动游标指针来决定获取哪一条记录。
1、定义游标:
语句格式: EXEC SQL DECLARE <游标名称> CURSOR FOR <SELECT语句>
• 它只是一条说明性语句,定义游标后,其中的SELECT语句并不执行。
2、打开游标:
语句格式: EXEC SQL OPEN <游标名称>
• 该语句执行游标定义中的SELECT语句,同时游标处于活动状态。游标是一个指针,此时指向查询结果的第一行之前。
3、推进游标:
语句格式: EXEC SQL FETCH 游标名 INTO 变量表
• 该语句执行时,游标推进一行,并把游标指向的行(称为当前行)中的值取出,送到共享变量中。
4、关闭游标: EXEC SQL CLOSE 游标名
• 该语句关闭游标,使它不再和查询结果相联系。游标关闭后,后面还可以再打开。
116.存储过程
• 存储过程(Procedure):是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
• 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
• 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。
• 语句格式:
CREATE PROCEDURE 存储过程名(IN|OUT|IN OUT 参数1 数据类型,IN|OUT|IN OUT 参数2 数据类型…)
[AS] //参数的数据类型只需要指明类型名即可,不需要指定宽度。具体宽度由外部调用者决定
BEGIN
<SQL语句>
END
IN:为默认值,表示该参数为输入型参数,在过程体中值一般不变。
OUT:表示该参数为输出参数,可以作为存储过程的输出结果,供外部调用者使用。
IN OUT: 既可作为输入参数,也可作为输出参数。
九、非关系型数据库NoSQL
117.CAP理论
CAP理论:简单地说,就是对于一个分布式系统,一致性(Consistency)、可用性和分区容忍性三个特点最多只能三选二。
• 一致性(Consistency):是指系统在执行了某些操作后仍处于一个一致的状态。
• 可用性(Availablity):是指对数据的所有操作都有成功的返回。简言之,就是任何请求不管成功或失败都有响应。
• 分区容忍性(Partition tolerance):这一概念的前提是在网络发生故障的时候。在网络连接上,一些结点出现故障,使得原本连通的网络变成了一块一块的分区,若允许系统继续工作,那就是分区可容忍的。
118.ACID理论
1、原子性(Atomicity):事务的所有操作在数据库中要么都做要么都不做。
2、一致性(Consistency):一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而遭受破坏。
3、隔离性(Isolation):一个事务的执行不能被其他事务干扰。并发事务在执行过程中可能会对同一数据进行操作,这些事务的操作应该不会相互干扰,是相互隔离的。
4、持久性(Durability):一个事务一旦提交,它对数据库的改变必须是永久的,即使系统出现故障也是如此。
119.BASE理论
由于CAP理论的存在,为了提高性能,出现了ACID的一种变种BASE,它是一个弱一致性的理论,只要求最终一致性。
• BA(Basically Available): 基本可用
• S(Soft state):软状态,可以理解为“无连接的”的,而与之相对应的是“面向连接”的。
• E(Eventual consistency):最终一致性,最终整个系统看到的数据是一致的。
120.NoSQL数据库的种类
十、系统开发和运行知识
121.软件生存周期
软件生存周期包括可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码和单元测试、综合测试及维护阶段。
1、可行性分析与项目开发计划
主要任务是确定软件的开发目标及可行性。该阶段应该给出问题定义、可行性分析和项目开发计划。
2、需求分析
需求分析阶段的任务不是具体地解决问题,而是准确地确定软件系统必须做什么,确定软件系统的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。
3、概要设计
在本阶段,开发人员需要将确定的功能需求转换成相应的体系结构。概要设计就是设计软件的结构,明确软件有哪些模块组成,模块的层次以及功能。与此同时,还要设计应用系统的总体数据结构和数据库结构。
4、详细设计
主要任务就是对每个模块完成的功能进行描述,不是编写程序,而是设计出程序的详细规格说明,使程序员可以根据它们写出实际的程序代码。
5、编码和单元测试
就是把每个模块的结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源程序清单,并仔细测试编写出每一个模块。
6、综合测试
综合测试阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。
7、维护
维护阶段是软件生存期中时间最长的阶段。软件一旦交付正式投入运行后便进入软件维护阶段。该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存。
122.瀑布模型
瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它规定了由前至后、相互衔接的固定次序,如同瀑布流水,逐级下落。瀑布模型假设,一个待开发的系统需求是完整的、简明的、一致的,而且可以先于设计和实现完成之前产生。
优点:容易理解,管理成本低;强调开发的阶段性早期计划及需求调查和产品测试。
不足:客户必须能够完整、正确和清晰地表达他们的需要;在开始的两个或三个阶段中,很难评估真正的进度状态;当接近项目结束时,出现了大量的集成和测试工作;直到项目结束之前,都不能演示系统的能力。
在瀑布模型中,需求或设计中的错误往往只有到了项目后期才能够被发现,对于项目风险的控制能力较弱,从而导致项目常常延期完成,开发费用超预算。
123.增量模型
增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品,每一增量可以分别地开发。该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。增量模型强调每一个增量均发布一个可操作的产品。
优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可以仅对一个或两个增量投资。
不足:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性,可能会超出组织的能力。
124.演化模型
主要针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。
优点:任何功能一经开发就能进入测试,以便验证是否符合产品的需求,可以帮助引导出高质量的产品要求。
缺点:如果不加控制地让用户接触开发中尚未稳定的功能,可能对开发人员及用户都会产生负面影响。
125.螺旋模型
将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了两种模型的不足。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合。
(1)制订计划。确定软件的目标,选定实施方案,明确项目开发的限制条件。
(2)风险分析。分析所选的方案,识别风险,消除风险。
(3)实施工程。实施软件开发,验证阶段产品。
(4)用户评估。评价开发工作,提出修正建议,建立下一个周期的开发计划。
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应。因此特别适用于庞大、复杂并且具有高风险的系统。
126.喷泉模型
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。该模型的各个阶段没有明显的界限,开发人员可以同步进行。
优点:可以提高软件项目的开发效率,节省开发时间。
不足:由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大。
127.典型的软件开发方法
1、结构化开发方法
是一种传统的信息系统开发方法,由结构化分析、结构化设计和结构化程序设计构成,它是一种面向数据流的开发方法。其精髓是自顶向下、逐层分解和模块化设计,它的基本原则是功能的分解与抽象。
结构化方法的开发过程一般是先把系统功能视为一个大的模块,再根据系统分析与设计的要求对其进行进一步的模块分解或组合。
结构化方法特别适合于数据处理领域的问题,但是不适合解决规模较大的、比较复杂的项目,且难以适应需求的变化。
2、原型化开发方法
根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求的信息系统快速开发的方法。原型法的优点主要在于能更有效地确认用户需求。
原型化方法比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法是比较好的。
3、面向对象开发方法
面向对象开发方法的基本出发点是尽可能按照人类认识世界的方法和思维方法来分析和解决问题。客观世界是由许多具体的事物、事件、概念和规则组成的,这些均可被看成对象,面向对象方法正是以对象作为最基本的元素,它也是分析问题、解决问题的核心。
使用面向对象的方法构造的系统具有更好的复用性。面向对象的方法使系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,因此可以缩短开发周期。
4、敏捷方法
敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法可以使用户能够在开发周期的后期增加或改变需求。
128.进度管理
(1)Gantt图
Gantt图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。但是其缺点是不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
(2)PERT图
PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。图中的松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其完成所需的时间。但是,PERT图不能反映任务之间的并行关系。
129.需求分析的任务
需求分析主要是确定待开发软件的功能、性能、数据和界面等要求。具体来说,可有以下五个方面:
(1)确定软件系统的综合要求。
(2)分析软件系统的数据要求。包括基本元素、数据元素之间的逻辑关系、数据量和峰值等。常用的数据描述方法是实体-关系模型(E-R模型)。
(3)导出系统的逻辑模型。在结构化分析方法中可用数据流图来描述;在面向对象分析方法中可用类模型来描述。
(4)修正项目开发计划。
(5)如有必要,可开发一个原型系统。对一些需求不够明确的软件,可以先开发一个原型系统,以验证用户的需求。
130.需求的分类
软件需求包括功能需求、非功能需求和设计约束三方面的内容。
(1)功能需求:所开发的软件必须具备什么样的功能。
(2)非功能需求:是指产品必须具备的属性或品质,如可靠性、性能、响应时间、容错性和扩展性等。
(3)设计约束:也称为限制条件、补充规约,这通常是对解决方案的一些约束说明。
131.结构化分析方法
结构化分析(Structured Analysis, SA)方法是一种面向数据流的需求分析方法,适用于分析大型数据处理系统,是一种简单、实用的方法,现在已经得到广泛的使用。
结构化分析方法的基本思想是自顶向下、逐层分解。分解和抽象是人们控制问题复杂性的两种基本手段。对于一个复杂的问题,人们很难一下子考虑问题的所有方面和全部细节,通常可以把一个大问题分解成若干个小问题,每个小问题再分解成若干个更小的问题,经过多次逐层分解,每个最底层的问题都是足够简单,容易解决的,于是复杂的问题也就迎刃而解了。这个过程就是分解的过程。
SA方法的分析结果由以下几部分组成:一套分层的数据流图、一本数据字典、一组小说明(也称加工逻辑说明)、补充材料。
132.UML 2.0中常见图
(1)类图:类图描述一组类、接口、协作和它们之间的关系。
(2)对象图:对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物的实例的静态快照。
(3)用例图:用例图描述一组用例、参与者与它们之间的关系。
(4)序列图:序列图是一种交互图,交互图展现了一种交互,它由一组对象或参与者以及它们之间可能发送的消息构成。交互图专注于系统的动态视图。序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动,是强调消息的时间次序的交互图。
(5)通信图:通信图也是一种交互图,它强调收发消息的对象或参与者的结构组织。序列图强调的是时序,通信图强调的是对象之间的组织结构(关系)。
(6)状态图:状态图描述一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图。
(7)活动图:活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。活动图专注于系统的动态视图,它强调对象间的控制流程。
(8)构件图:构件图描述一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作。
(9)部署图:部署图描述了运行时的处理节点以及其中的构件的配置。部署图给出了体系结构的静态实施视图。它与构件图相关,通常一个节点包含一个或多个构件。
133.概要设计的基本任务
(1)设计软件系统总体结构:将一个复杂的系统按功能划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。
(2)数据结构及数据库设计
(3)编写概要设计文档:文档主要有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划。
(4)评审:对设计部分是否完整地实现了需求中规定的功能、性能等要求进行评审。
134.详细设计的基本任务
详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。
(1)对每个模块进行详细的算法设计。
(2)对模块内的数据结构进行设计。
(3)对数据库进行物理设计,即确定数据库的物理结构。
(4)其他设计。
(5)编写详细设计说明书。
(6)评审.对处理过程的算法和数据库的物理结构都要评审
135.内聚
136.耦合
137.测试的类型
(1)单元测试:单元测试也称为模块测试。单元测试侧重于模块中的内部处理逻辑结构和数据结构。
(2)集成测试:集成测试的目的是检查模块之间,以及模块和已集成的软件之间的接口关系。并验证已集成的软件是否符合设计要求。
(3)确认测试:确认测试主要用于验证软件的功能、性能和其他特性是否与用户需求一致。
(4)系统测试:系统测试的对象是完整的、集成的计算机系统,系统测试的目的是在真实系统工作环境下,验证完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。技术依据是用户需求或开发合同。
(5)回归测试:回归测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。
138.测试方法
1、黑盒测试法:
黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。主要用于集成测试、确认测试和系统测试中。常用的黑盒测试技术有:等价类划分、边界值分析、错误推测和因果图等。
2、白盒测试法
白盒测试也称为结构测试,主要用于软件单元测试中。它的主要思想是将程序看作是一个透明的白盒,测试人员完全清楚程序的结构和处理算法,按照程序内部逻辑结构设计测试用例。白盒测试常用的技术是逻辑覆盖,循环覆盖和基本路径测试。主要的逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、 条件组合覆盖、路径覆盖等。
139.系统维护
系统的可维护性可定义为:维护人员理解、改正、改动和改进这个软件的难易程度。
1、系统可维护性的评价指标:
1)可理解性:是指别人能理解系统的结构、界面、功能和内部过程的难易程度。
2)可测试性:诊断和测试的容易程度取决于易理解的程度。
3)可修改性:模块的耦合、内聚、作用范围与控制范围的关系等,都对可修改性有影响。
2、软件维护的一般内容:
(1)正确性维护:是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。
(2)适应性维护:是指使应用软件适应信息技术变化和管理需求变化而进行的修改。
(3)完善性维护:这是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。
(4)预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能。
十一、数据库设计
140.数据库应用系统的生命期
数据库应用系统的生命周期分为数据库规划、需求描述与分析、数据库与应用程序设计、数据库设计实现、测试、运行维护6个阶段
- 数据库规划:任务是确定软件的开发目标及可行性。该阶段应该给出问题定义、可行性分析和项目开发计划。
- 需求描述与分析:是以用户的角度,从系统中的数据和业务规则入手,收集和整理用户的信息,以特定的方式加以描述,是下一步工作的基础。
- 数据库与应用程序设计:数据库的设计是对用户数据的组织和存储设计;应用程序设计是在数据库设计基础上对数据操作及业务实现的设计,包括事务设计和用户界面设计。
- 数据库设计实现:实现是依照设计,使用DBMS支持的数据定义语言实现数据库的建立,用高级语言编写应用程序。
- 测试:是在数据库系统投入使用之前,通过精心制订的测试计划和测试数据来测试系统的性能是否满足设计要求,以便发现问题。
- 运行维护:数据库应用系统经过测试、试运行后即可正式投入运行。运行维护是系统投入使用后,必须不断地对其进行评价、调整和修改,直至系统消亡。
141.数据库设计的一般策略
数据库设计的一般策略有两种:自顶向下和自底向上。
142.数据库设计的基本步骤
一般将数据库设计分为如下6个阶段:
(1)用户需求分析
(2)概念结构设计
(3)逻辑结构设计
(4)物理结构设计
(5)数据库实施阶段
(6)数据库运行和维护阶段
143.需求分析的任务、方法和目标
需求分析阶段的任务:综合各个用户的应用需求,对现实世界要处理的对象(组织、部门和企业等)进行详细调查,在了解现行系统的概况,确定新系统功能的过程中,收集支持系统目标的基础数据及处理方法。
(1)信息要求。用户需要在系统中保存哪些信息,由这些保存的信息要得到什么样的信息,这些信息以及信息间应当满足的完整性要求。
(2)处理要求。用户在系统中要实现什么样的操作功能,对保存信息的处理过程和方式,各种操作处理的频度、响应时间要求、处理方式等以及处理过程中的安全性要求和完整性要求。
(3)系统要求。包括安全性要求、使用方式要求和可扩充性要求。安全性要求:系统有几种用户使用,每一种用户的使用权限如何。使用方式要求:用户的使用环境是什么,平均有多少用户同时使用,最高峰有多少用户同时使用,有无查询相应的时间要求等。可扩充性要求:对未来功能、性能和应用访问的可扩充性的要求。
144.需求分析阶段的文档
需求分析阶段的成果是系统需求说明书,主要包括数据流图、数据字典、各种说明性表格、统计输出表和系统功能结构图等。
数据字典(Data Dictionary,DD)是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身。如用户将向数据库中输入什么信息,从数据库中要得到什么信息,各类信息的内容和结构,信息之间的联系等。
数据字典包括数据项、数据结构、数据流、数据存储和处理过程5个部分。
145.概念结构设计
概念结构设计是在需求分析的基础上,依照需求分析中的信息要求,对用户信息加以分类、聚集和概括,建立信息模型。
概念结构设计最著名最常用的方法是实体-联系方法,简称E-R方法。它将现实世界的信息结构统一用实体、属性以及实体之间的联系来描述。
概念结构设计工作步骤包括:选择局部应用、逐一设计分E-R图和E-R图合并。
1、选择局部应用:选择适当层次的数据流图,让这一层的每一部分对应一个局部应用,实现某一项功能,从这一层入手,就能很好地设计分E-R图。
2、逐一设计分E-R图:划分好各个局部应用之后,就要对每一个局部应用逐一设计分E-R图,又称为局部E-R图。
现实生活中许多事物,作为实体还是属性没有明确的界定,这需要根据具体情况而定,一般遵循以下两条准则:
(1)属性不可再分,即属性不再具有需要描述的性质,不能有属性的属性。
(2)属性不能与其他实体发生联系,联系是实体与实体间的联系。
- E-R图合并根据局部应用设计好各局部E-R图之后,就可以对各分E-R图进行合并。合并的目的在于解决冲突,消除冗余。
146.E-R图冲突
(1)属性冲突:同一属性可能会存在于不同的分E-R图中,由于设计人员不同或是出发点不同,对属性的类型、取值范围、数据单位等可能会不一致。
(2)命名冲突:相同意义的属性,在不同的分E-R图上有着不同的命名,或是名称相同的属性在不同的分E-R图中代表着不同的意义,这些也需要进行统一。
(3)结构冲突:同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体而在另一分E-R图中又被抽象为属性。
147.逻辑结构设计
• 逻辑结构设计就是在概念结构设计的基础上进行数据模型设计,可以是层次模型、网状模型和关系模型。
• 逻辑结构设计阶段的主要工作步骤包括确定数据模型、将E-R图转换成指定的数据模型、确定完整性约束和确定用户视图。
- E-R图向关系模式的转换
- 关系模式的规范化
- 确定完整性约束
- 用户视图的确定
148.数据库的物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。为一个给定的逻辑数据模型设计一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
149.数据库物理设计工作步骤
物理设计的主要工作步骤包括:确定数据分布、存储结构和访问方式。
1、确定数据分布
(1)根据不同应用分布数据。
(2)根据处理要求确定数据的分布。
(3)对数据的分布存储必然会导致数据的逻辑结构的变化,要对关系模式做新的调整,回到数据库逻辑设计阶段做必要的修改。
2、确定数据的存储结构
存储结构具体指数据文件中记录之间的物理结构。
为提高数据的访问速度,通常会采用索引技术。在物理设计阶段,要根据数据处理和修改要求,确定数据库文件的索引字段和索引类型。
3、确定数据的访问方式
(1)存储记录结构设计。
(2)存储记录布局。
(3)存取方法的设计。
150.数据库重组和重构
数据库重组是指在不改变数据库逻辑和物理结构的情况下,去除数据库存储文件中的废弃空间以及碎片空间中的指针链,使数据库记录在物理上紧连。
数据库系统运行过程中,会因为一些原因而对数据库的结构做修改,称为数据库重构。重构包括表结构的修改和视图的修改。
151.数据库系统的审计
审计是一种DBMS工具,它记录数据库资源和权限的使用情况。启用审计功能,可以产生审计跟踪信息,包括哪些数据库对象受到了影响,谁在什么时候执行了这些操作。
审计是被动的,它只能跟踪对数据库的修改而不能防止,但作为一个安全性手段,起到对非法入侵的威慑作用,可以据此追究非法入侵者的法律责任。
审计功能的开启会影响系统的性能。
152.数据库的存储管理
在数据库系统运行过程中,随着数据的不断变更,会影响到系统的响应效率。通过以下手段进行存储管理,可有效地提高系统性能。
(1)索引文件和数据文件分开存储,事务日志文件存储在高速设备上。
(2)适时修改数据文件和索引文件的页面大小。
(3)定期对数据进行排序。
(4)增加必要的索引项。
153.数据安全性管理
(1)建立网络安全,主要是防火墙的设置。
(2)操作系统级安全,进行登录用户的管理。
(3)DBMS级安全,对访问数据库的用户进行密码验证。
(4)角色和用户的授权管理。
(5)建立视图和存储过程加强安全性。
(6)使用审计功能,为追究非法入侵者法律责任提供证据,发现安全漏洞。
154.SQL语句的编码检验
(1)尽可能地减少多表查询或建立物化视图。
(2)以不相关子查询替代相关子查询。
(3)只检索需要的列。
(4)用带IN的条件子句等价替换OR子句。
(5)经常提交COMMIT,以尽早释放锁。
155.表设计的评价
(1)如果频繁的访问是对两个相关的表进行连接操作,则考虑将其合并。
(2)如果频繁的访问只是在表中的某一部分字段上进行,则考虑分解表,将该部分单独作为一个表。
(3)对于更新很少的表,引入物化视图。
156.索引维护和改进
(1)如果查询是瓶颈,则在关系上建立适应的索引,通常在作为查询条件的属性上建立索引,可以提高查询效率。
(2)如果更新是瓶颈,每次更新都会重建表上的索引,引起效率的降低,则考虑删除某些索引。
(3)选择适当的索引类型,如果是经常使用范围查询,则B树索引比散列索引更高效。
(4)将有利于大多数据查询和更新的索引设为聚簇索引。
157.多对多对多联系的转换(*:*:*)
三方联系的多对多对多(*:*:*)也是一样,只能转换成一个独立的关系模式,关系模式的属性取三方实体的码及联系的属性,关系模式的码为三方实体的码组成的属性组。如:一个供应商可以给多个项目供应多种零件,一个项目可以使用多个供应商供应的多种零件。
十二、事务管理
158.事务概念
• 事务:是一系列的数据库操作,是数据库应用程序的逻辑单位,即应用程序对数据库的操作都应该以事务的方式进行。
• 事务是一个操作序列,这些操作“要么都做,要么都不做”。
• 事务定义的语句如下:
(1)BEGIN TRANSACTION:事务开始。
(2)END TRANSACTION:事务结束。
(3)COMMIT:事务提交。该操作表示事务成功地结束,它将通知事务管理器该事务的所有更新操作现在可以被提交或永久地保留。
(4)ROLLBACK:事务回滚。该操作表示事务非成功地结束,它将通知事务管理器出故障了,数据库可能处于不一致状态,该事务的所有更新操作必须回滚或撤销。
159.SQL中事务的开始与结束
• SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务,SQL中的Commit work和Rollback work语句之一会结束一个事务。
(1)Commit work:提交当前事务。这意味着该事务所做的更新在数据库中永久保存。一但事务被提交后,一个新的事务自动开始。
(2)Rollback work:回滚当前事务。这意味着将撤销该事务对数据库的更新。
• 注意:如果事务已经执行了Commit work,就不能再用Rollback来撤销。
160.事务的特性
• 事务具4个特性:原子性、一致性、隔离性和持久性。
1、原子性:事务的所有操作在数据库中要么都做要么都不做。
2、一致性:一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而遭受破坏。
3、隔离性:一个事务的执行不能被其他事务干扰。并发事务在执行过程中可能会对同一数据进行操作,这些事务的操作应该不会相互干扰,是相互隔离的。
4、持久性:一个事务一旦提交,它对数据库的改变必须是永久的,即使系统出现故障也是如此。
161.事务的状态
• 事务是数据库的基本执行单元,如果事务成功执行,则数据库从一个一致状态进入另一个一致状态。如果因为某种原因事务没能成功执行,但其已经对数据库进行了修改,这时候可能会导致数据库处于不一致的状态,需要对事务已经造成的变更进行撤销(回滚)。
1、活动状态:事务的初始状态,事务执行时处于这个状态。
2、部分提交状态:当操作序列的最后一条语句执行后,事务就处于部分提交状态。这时,事务虽然已经完全执行,但由于实际输出可能还临时驻留在内存中,在事务成功完成前还有可能出现硬件故障,因此,部分提交状态并不等于事务成功执行。
3、失败状态:由于硬件或逻辑错误,使得事务不能继续正常执行,事务就进入了失败状态,处于失败状态的事务必须回滚。这样,事务就进入了中止状态。
4、中止状态:事务回滚并且数据库恢复到事务开始执行前的状态。
5、提交状态:当事务成功完成后,称事务处于提交状态。只有事务处于提交状态后,才能说事务已经提交。
162.事务的状态转换
• BEGIN TRANSACTION:开始运行事务,使事务进入活动状态
• END TRANSACTION:说明事物中的所有读写操作都已完成,使事务进入部分提交状态,把事务的所有操作对数据库的影响存入数据库。
• COMMIT:标志事务已经成功地完成,事务中的所有操作对数据库的影响已经安全地存入数据库,事务进入提交状态,结束事务的运行。
• ABORT:标志事务进入失败状态,系统撤销事务中所有操作对数据库和其他事务的影响,结束事务的运行。
163.事务调度
- 串行调度:是指多个事务依次串行执行,且只有当一个事务的所有操作都执行完成才执行另一个事务的所有操作。
- 并发调度:利用分时的方法同时处理多个事务。
- 可恢复调度:指满足这样的条件的调度:当事务Tj要读事务Ti写的数据时,Ti事务必须要先于事务Tj提交。
164.并发操作带来的问题
• 并发操作带来的数据不一致性有三类:丢失修改、不可重复读和读脏数据。
1、丢失修改:两个事务对同一个数据进行修改,导致事务A对数据库的修改被事务B的修改所覆盖。
2、不可重复读:事务对同一数据进行两次读取的结果不同。原因是两次读取的间隙数据被另一事务修改了。
3、读脏数据:某事务读取的数据是其它事务修改后的值,但该修改后来又被撤销了。
165.并发调度的可串行性
• 多个事务的并发执行是正确的,当且仅当其结果与某一次序串行地执行它们的结果相同,称这种调度策略是可串行化的调度。
• 可串行性是并发事务正确性的准则。即:一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
166.并发控制技术
• 并发事务如果对数据读写时不加以控制,会破坏事务的隔离性和一致性。为了保持事务的隔离性,系统必须对事务之间的相互作用加以控制,最典型的方式就是加锁。
1、排它锁(Exclusive Locks, 简称X锁):也称为写锁,用于对数据进行写操作时进行锁定。如果事务T对数据A加上X锁后,就只允许事务T对数据A进行读取和修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的锁。
2、共享锁(Share Locks, 简称S锁):也称为读锁,用于对数据进行读操作时进行锁定。如果事务T对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据A上有了S锁,任何事务都只能再对其加S锁读取而不能加X锁修改。
167.封锁协议(待举例)
(1)一级封锁协议:是指事务T在修改数据A之前必须先对其加X锁,直到事务结束才释放X锁。解决了丢失修改的问题。
(2)二级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,读完后即可释放S锁。解决了读脏数据的问题。
(3)三级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,直到事务结束才释放S锁。解决了不可重复读的问题。
168.两段锁协议
• 两段锁协议(2PL):是指同一事务对任何数据进行读写之前必须对该数据加锁;在释放一个封锁之后,该事务不再申请和获得任何其他封锁。
• 所谓“两段”的含义是:事务分为两个阶段。第一阶段是获得封锁,也称为扩展阶段。第二阶段是释放封锁,也称为收缩阶段。
例:
T1:Slock A...Slock B...Xlock C...Unlock B...Unlock A...Unlock C
T2:Slock A...Unlock A...Slock B...Xlock C...Unlock C...Unlock B
• 如果事务遵循两段锁协议,那么它们的并发调度是可串行化的。两段锁是可串行化的充分条件,但不是必要条件。即:遵循两段锁协议,一定是可串行化的;不遵循两段锁协议,可能是可串行化的,也可能不是。
• 注意:采用两段锁协议也有可能产生死锁,这是因为每个事务都不能及时解除被封锁的数据,可能会导致多个事务都要求对方已经封锁的数据而不能继续运行。
169.事务的隔离级别(☆☆☆☆☆)
1、READ UNCOMMITTED(读未提交):可避免丢失修改。
2、READ COMMITTED(读已提交):可避免丢失修改、读脏数据。
3、REPEATABLE READ(可重复读):可避免丢失修改、读脏数据,不可重复读。
4、SERIALIZABLE(串行化):最高级别,可避免丢失修改、读脏数据、不可重复读、幻读。
幻读:事务A查询得到N条数据,然后事务B又插入了M条数据,或者改变了这N条数据之外的M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。
170.数据库系统故障的种类
1、事务故障:是由于程序执行错误而引起事务非预期的、异常终止的故障。通常有如下两类错误引起事务执行失败:
(1)逻辑错误。如非法输入、找不到数据、溢出、超出资源限制等原因引起的事务执行失败。
(2)系统错误。系统进入一种不良状态(如死锁),导致事务无法继续执行。
2、系统故障:是指硬件故障、软件(如DBMS、OS或应用程序)漏洞的影响,导致丢失了内存中的信息,影响正在执行的事务,但未破坏存储在外存上的信息。
3、介质故障:是指数据库的存储介质发生故障,如磁盘损坏、瞬间强磁场干扰等。这种故障直接破坏了数据库,会影响到所有正在读取这部分数据的事务。
171.数据库备份
• 数据转储是将数据库自制到另一个磁盘或磁带上保存起来的过程,又称为数据备份。
(1)静态转储和动态转储。静态转储是指在转储期间不允许对数据库进行任何存取、修改操作;动态转储是在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行。
(2)海量转储和增量转储。海量转储是指每次转储全部数据;增量转储是指每次只转储上次转储后更新过的数据。
(3)日志文件。在事务处理的过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。
(4)数据库镜像。为了避免磁盘介质出现故障影响数据库的可用性,许多DBMS提供数据库镜像功能用于数据库恢复。
172.数据库恢复
要使数据库在发生故障后能够恢复,必须建立冗余数据,在故障发生后利用这些冗余数据实施数据库恢笔,常用的是数据转储和日志文件。
1、故障恢复的两个操作:
(1)撤销事务(UNDO):将未完成的事务撤销,使数据库恢复到事务执行前的正确状态。
撤销事务的过程:反向扫描日志文件(由后向前扫描),查找事务的更新操作;对该事务的更新操作执行逆操作,用日志文件记录中更新前的值写入数据库,插入的记录从数据库中删除,删除的记录重新插入数据库中;继续反向扫描日志文件,查找该事务的其它更新操作并执行逆操作直至事务开始标志。
(2)重做事务(REDO):将已提交的事务重新执行。
重做事务的过程:从事务的开始标志起,正向扫描日志文件,重新执行日志文件登记的该事务对数据库的所有操作,直至事务结束标识。
2、故障恢复策略:
(1)事务故障的恢复:事务故障是事务在运行至正常终止点(SUMMIT或ROLLBACK)前终止,日志文件只有该事务的开始标识而没有结束标识。对这类故障的恢复通常是通过撤销(UNDO)产生故障的事务,使数据库恢复到该事务执行前的正确状态来完成的。
具体做法:
1、反向扫描日志文件,查找该事务的更新操作。
2、对事务的更新操作执行逆操作。
3、继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。
注:事务故障的恢复是由系统自动完成的,对用户是透明的。
(2)系统故障的恢复:系统故障会使数据库的数据不一致:
一是未完成的事务对数据库的更新可能已经写入数据库;
二是已提交的事务对数据库的更新可能还在缓冲区没来得及写入数据库。
因此对于系统故障,恢复操作是UNDO+REDO:
1、撤销故障发生时未完成的事务(UNDO)。
2、重做已经提交的事务(REDO)。
(3)介质故障的恢复:介质故障时数据库遭到破坏,需要重装数据库,一般需要DBA的参与,装载故障前最近一次的备份和故障前的日志文件副本,再按照系统故障的恢复过程执行撤销(UNDO)和重做(REDO)来恢复。
检查点机制(CHECKPOINT):在日志中设置检查点,当发生故障需要利用日志文件恢复时,反向扫描日志文件,找到检查点,确认检查点时刻正在执行的事务(活动事务),即检查点前有事务开始标志但没有事务结束标志。
对于检查点后提交的事务,执行REDO(重做)
对于检查点后未提交的事务,执行UNDO(撤销)
其中事务故障和系统故障由DBMS来完成事务级别的恢复,即根据日志文件对未完成的事务进行UNDO操作,对已完成的事务进行REDO操作,使数据库恢复到故障前一致性状态;介质故障需要DBA介入,装载备份文件后交由DBMS进行恢复。
十三、云计算与大数据处理
173.云计算基础知识
• 权威定义:云计算是一种将可伸缩、弹性、共享的物理和虚拟资源池以按需自服务的方式供应和管理,并提供网络访问的模式。
• 狭义:云计算是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且可以看成是无限扩展的,只要按使用量付费就可以。
• 是以一种方便的使用方式和服务模式,通过互联网按需访问资源池模型(例如网络、服务器、存储、应用程序和服务),以快速和最少的管理工作为用户提供服务。
174.云计算的关键特征
1、关键特征:
• 广泛的网络接入
• 可测量的服务
• 多租户
• 按需自服务
• 快速的弹性和可扩展性
• 资源池化
2、其它关键特征:
• 虚拟化技术
• 可靠性高
• 性价比高
175.云计算的分类
1、按云部署模式和云应用范围分类:
1)公有云
• 一般是被一个云计算服务提供商所拥有,该组织将云计算服务销售给公众,公有云通常在远离客户建筑物的地方托管(一般为云计算服务提供商建立的数据中心)
2)社区云
• 云的基础设施被一些组织所共享,并为一个有共同关注点的社区服务。可以是该组织或某个第三方负责管理。
3)私有云
• 云的基础设施是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。私有云可部署在企业数据中心中,也可部署在一个主机托管场所,被一个单一的组织拥有或租用。
4)混合云
• 云的基础设施由以上两种或两种以上的云(私有、社区或公有)组成。
2、按云计算的服务层次和服务类型分类:
1)基础设施即服务(Infrastructure as a Service,IaaS)
• 提供虚拟化的计算资源,如虚拟机、存储、网络和操作系统。其核心技术是虚拟化。
2)平台即服务(Platform as a Service,PaaS)
• 为开发、测试和管理软件应用程序提供按需开发的环境。其核心技术是分布式并行计算。PaaS实际上是指将软件研发的平台作为一种服务。
3)软件即服务(Software as a Service,SaaS)
• 通过互联网提供按需软件付费应用程序,云计算提供商托管和管理软件应用程序,并允许用户连接到应用程序并通过互联网访问应用程序。客户可以自己定制、配置、组装来得到满足自身需求的软件系统。
176.云关键技术
• 虚拟化技术
• 分布式数据存储
• 并行计算
• 运营支撑管理
177.大数据处理基础知识
• 大数据的特征一般采用5V来描述:
1、多样性(Variety):数据类型繁多。除了以往的以文本为主的结构化数据,非结构化数据越来越多,如音频,视频,图片,地理位置信息等。
2、速度(Velocity):处理速度快。一方面是数据的增长速度快,另一方面是要求数据访问、处理、交付的速度快,通常要求具有时效性。是大数据区别于传统数据挖掘的最显著特征。
3、大量(Volume):数据体量巨大。聚合在一起供分析的数据规模非常庞大。
4、价值(Value):价值密度低。大数据的本质是需要从海量数据中获取具有高价值的数据。
5、真实性(Veracity):是指数据是来自于各种、各类信息系统网络以及网络终端的行为或痕迹。
178.大数据处理流程
• 从大数据生命周期的角度看,大数据处理的基本流程包括:数据采集、数据分析和数据解释。
十四、数据库主流应用技术
179.分布式数据库
满足下面条件的数据库系统被称为完全分布式数据库系统:
(1)分布性:即数据存储在多个不同的节点上。
(2)逻辑相关性:即数据库系统内的数据在逻辑上具有相互关联的特性。
(3)场地透明性:即使用分布式数据库中的数据时不需指明数据所在的位置。
(4)场地自治性:即每一个单独的节点能够执行局部的应用请求。
180.分布式数据库的特点
- 数据的集中控制性
- 数据的独立性
- 数据冗余可控性
- 场地自治性
- 存取的有效性
181.分布式数据库的模式结构
这种四层模式划分为:全局外层、全局概念层、局部概念层和局部内层。在各层间还有相应的层间映射。四层模式的划分不仅适用于完全透明的分布式数据库系统,而且也适合各种透明性要求的分布式数据库系统。无论是对同构型分布式数据库系统,还是异构型分布式数据库系统都能适用。
182.全局概念层模式
从分布透明特性来说,分布式数据库的全局概念层应具有三种模式描述信息:
(1)全局概念模式:描述分布式数据库全局数据的逻辑结构,是分布式数据库的全局概念视图。与集中式数据库的概念视图的定义相似,全局概念模式应包含模式名、属性名以及每种属性的数据类型的定义和长度。
(2)分片模式。描述全局数据逻辑划分的视图,它是全局数据的逻辑结构根据某种条件的划分,每一个逻辑划分即一个片段,或称为分片。
(3)分配模式:描述局部逻辑的局部物理结构,是划分后的片段(或分片)的物理分配视图。它与集中式数据库物理存储结构的概念不同,是全局概念层的内容。
183.数据分布的策略
集中式:所有全局数据片段都安排在一个节点上。
分割式:所有全局数据有且只有一份,它们被分割成若干个逻辑片段,每个逻辑片段被分别指派在特定的节点上,可以说对全局数据进行了划分。
复制式:全局数据有多个副本,每个站点上都有一个完整的数据副本。
混合式:全部数据被分为若干个数据子集,每个子集被放在不同的节点上,但任何一个节点都没有保存全部的数据,根据数据的重要性决定各个数据子集副本的数量。
184.数据分片的方法
(1)水平分片:按特定条件把全局关系的所有元组,分划成若干个互不相交的子集,每一子集为全局关系的一个逻辑片段。它们通过对全局关系施加选择运算得到,并可通过对这些片段执行合并操作来恢复该全局关系。
(2)垂直分片:把全局关系的属性分成若干子集,对全局关系作投影运算得到这些子集。要求全局关系的每一属性至少映射到一个垂直片段中,且每一个垂直片段都包含该全局关系的关键字。这样,通过对这些片段执行连接操作可以恢复该全局关系。
(3)水平和垂直结合的分片:以上两种方法的混合。可以先水平分片再垂直分片,或先垂直分片再水平分片。
不论采用哪一种方法进行数据分片,都要遵守如下规则:
(1)完备性条件:必须把全局关系的所有数据映射到各个片段中,绝不允许有属于全局关系却不属于任何一个片段的数据存在。
(2)可重构条件:必须保证能够由同一个全局关系的各个片段来重新构造该全局关系。对于水平分片可用并操作重构全局关系;对于垂直分片可用连接操作重构全局关系。
(3)不相交条件:要求一个全局关系被分割后所得的各数据片段互不重叠或只包含关键字重叠。
185.分布透明性
也称为分布独立性
分片透明性:是分布透明性中的最高层,位于全局概念模式与分片模式之间。当分片模式改变时,只要改变全局概念模式到分片模式之间的映像,从而不会影响应用程序。
分配透明性:也称位置透明性,是分布透明性的中间层,位于分片模式与分配模式之间。实际上,分配透明性包含了两种情形:一种是各片段被复制的情况,即每一片段是否被复制、复制了几个副本;另一种是片段及其各副本的场地的位置分配情况。前者也称复制透明性或数据冗余透明性。当分布式数据库具有分配透明性时,当片段及其副本的存储站点改变时,只要改变从分片模式到分配模式之间的映像,从而不会影响用户程序。
局部数据模型透明性:也称局部映像透明性,是分布透明性的最低层,处于分配模式与局部概念模式之间。全局数据模型与每个节点上的局部数据库的数据模型的转换是由分配模式与局部概念模式之间的映像实现的。当某个节点上数据库的数据模型改变时,只要改变分配模式到该站点局部概念模式之间的映像即可,应用程序不受影响。
186.分布式管理系统遵循原则
- 本地自治性;
- 不依赖于中心站点;
- 可连续操作性;
- 位置透明性和独立性;
- 数据分片独立性;
- 数据复制独立性;
- 分布式查询处理;
- 分布式事务管理;
- 硬件独立性;
- 操作系统独立性;
- 网络独立性;
- DBMS独立性。
187.分布式数据库故障
(1)介质故障:存放数据的介质发生的故障,如磁带、磁盘的损坏等。
(2)系统故障:CPU错、死循环、缓冲区满、系统崩溃等。
(3)事务故障:计算溢出、完整性被破坏、操作员干预、输入输出错等。
(4)网络分割故障:系统中一部分的节点和另外一部分节点完全失去了联系,两组节点无法通信。
(5)报文故障:收到的报文格式或数据错误、报文先后次序不正确、丢失了部分报文和长时间收不到报文。
188.OLTP与OLAP
十五、标准化和知识产权基础
189.商标注册申请
我国商标注册采取“申请在先”的审查原则,当两个或两个以上申请人在同一种或者类似商品上申请注册相同或者近似商标时,商标主管机关根据申请时间的先后,决定商标权的归属,申请在先的人可以获得注册。对于同日申请的情况,使用在先的人可以获得注册。
如果同日使用或均未使用,则采取申请人之间协商解决,协商不成的,由各申请人抽签决定。
190.知识产权学术资料引用问题
- 在学术论文中需要引用某些资料必须是已发表的作品
- 但只能限于介绍、评论作品
- 只要不构成自己作品的主要部分,可适当引用资料
- 不必征得原作者的同意,不需要向他支付报酬。
191.专利权申请
- 智力活动的规则和方法不取得专利权
- 算法以及计算机软件本身属于智力活动规则和方法的范畴,不能够授予专利权
- 仅以单纯的计算机程序为主题的发明创造是不能获得专利权的
- 进行智力活动的机器设备、装置或者根据智力活动规则和方法而设计制造的仪器、装置等都可以获得专利保护
192.保护期限
署名权、修改权、保护作品完整权保护期没有限制!!!
193.计算机软件著作权
保护的是软件程序以及文档;软件程序包括源程序和目标程序
以下不受保护:
开发软件所用的思想、处理过程、操作方法、数学概念等
十六、补充知识
194.平凡依赖与非平凡依赖
平凡依赖是指一种显而易见的依赖关系,在这种依赖中,属性集的一个子集本身就决定了该属性集的整个集合。
举例:
- 假设有一个关系R(A, B, C),其中A、B、C为属性。
- ( A —> A ),这是平凡依赖,因为A的集合(A本身)决定了A。
平凡依赖的特征是它没有提供额外的信息,也就是说,它本身是没有实际意义的,因为它只是属性集的自反关系。
非平凡依赖是指依赖关系中,属性集X不完全包含Y,且这种依赖关系是实际存在的,并且能够提供有效的信息。
举例:
- 假设关系R(A, B, C),如果我们有依赖关系 ( A—>B ),这表示知道A的值就可以唯一地确定B的值。
- 这里的 ( A—>B ) 是非平凡依赖,因为B不是A的一部分,并且通过A可以确定B的值。
总结
- 平凡依赖:依赖关系是属性集的自反关系,即一个属性集决定它本身。
- 非平凡依赖:依赖关系中,属性集X不包含Y,且通过X可以确定Y的值。
195.函数依赖与非函数依赖
函数依赖 vs 非函数依赖
- 函数依赖是一个属性集可以唯一地决定另一个属性集,这对于数据库设计和规范化至关重要,帮助我们消除冗余数据。
- 非函数依赖(如多值依赖、连接依赖等)则描述了在属性集之间的更复杂关系,通常需要更多的规范化步骤来处理,以保证数据的一致性和最小冗余。
总结
- 函数依赖(Functional Dependency):描述一个属性集X唯一地决定另一个属性集Y的关系,是数据库设计中的核心概念。
- 非函数依赖(Non-Functional Dependency):描述除了函数依赖外的其他依赖关系,包含多值依赖、连接依赖等,通常需要特殊处理。
196.检查点与事务日志的关系
事务日志记录了数据库的所有修改操作,包括未提交的事务和已经提交的事务。当系统发生崩溃时,日志文件可以帮助恢复数据库的状态,而检查点的存在使得恢复工作更高效,因为:
- 从检查点开始恢复:通过检查点,数据库系统可以减少需要恢复的日志量,避免从头开始回放所有事务。
- 日志的回放:在发生崩溃后,数据库会从最近的检查点开始,并回放从检查点到崩溃发生时的所有事务日志。
数据库的恢复过程
当数据库发生崩溃时,恢复过程大致如下:
- 从最近的检查点恢复数据库的状态。
- 回放检查点后未完成的事务日志,应用这些日志操作来恢复数据库。
- 确保所有已提交的事务得到恢复,并且所有未提交的事务被丢弃。
197.游标的基本使用流程
- 声明游标:定义一个游标,并指定需要查询的SQL语句。
- 打开游标:执行SQL查询,将查询结果绑定到游标。
- 提取数据:通过游标逐行获取查询结果。
- 操作数据:对提取的每一行数据进行处理(如更新、删除等)。
- 关闭游标:在游标操作完成后,关闭游标并释放资源。
198.游标的类型
在嵌入式SQL中,游标有几种不同的类型,每种类型具有不同的特性:
- 显式游标(Explicit Cursor):开发人员明确声明和控制游标的生命周期,手动控制游标的打开、提取数据和关闭操作。
- 隐式游标(Implicit Cursor):由数据库系统自动管理,开发人员无需手动控制游标的生命周期。这通常用于简单的查询操作。
199.关系模式除法
关系模式除法用于求解类似于"对于所有A值,B值满足某些条件"的查询。通常,除法运算用于找到那些具有特定属性的记录,这些记录满足某种条件并且涉及到另一个集合的所有元素。
除法的形式
假设我们有两个关系:
- R(A, B) — 包含属性A和B的关系。
- S(B) — 包含属性B的关系。
我们想要找出那些在( R )中有所有与( S )中B值相对应的匹配项的A值,即找出在( R )中有所有( S )中B值的记录。
除法运算的语义
- 给定(R(A, B) 和 S(B) ,我们要求的是那些A值,使得每个B在( S )中出现时,A和B的组合在( R )中也必须存在。
- 用数学语言来说,我们要找出A,使得对于所有( B \in S ),都有( (A, B) \in R )。
计算步骤
- 找出所有在( R )中与每个( B \in S )匹配的(A, B)组合。
- 确保每个A值与( S )中的所有B值都有匹配。
- 结果是一个包含A值的关系,这些A值是符合条件的
例子
假设我们有以下两个关系:
学生选课(R)
学生ID | 课程ID |
---|---|
S1 | C1 |
S1 | C2 |
S2 | C1 |
S3 | C1 |
S3 | C2 |
所有课程(S)
课程ID |
---|
C1 |
C2 |
我们要找出那些选了所有课程(C1和C2)的学生。根据除法运算,答案是:
学生ID |
---|
S1 |
S3 |
因为S1和S3都选了所有课程(C1和C2)。
总结
- 关系除法用于找出那些在一个关系中与另一个关系中所有元素都有匹配的记录。
200.关系模式减法
关系模式减法用于从一个关系中去掉另一个关系中的所有元组。即,关系的减法运算返回的是在一个关系中出现而在另一个关系中不出现的元组。
减法的形式
假设我们有两个关系:
- ( R(A, B) ) — 包含属性A和B的关系。
- ( S(A, B) ) — 也包含属性A和B的关系。
我们想要找出那些在( R )中出现但在( S )中没有的元组,即求( R - S )。
计算步骤
- 取关系( R )中的所有元组。
- 去掉那些也出现在( S )中的元组。
- 返回剩下的元组。
例子
假设我们有以下两个关系:
学生选课(R)
学生ID | 课程ID |
---|---|
S1 | C1 |
S1 | C2 |
S2 | C1 |
S3 | C1 |
S3 | C2 |
已选课程(S)
学生ID | 课程ID |
---|---|
S1 | C1 |
S2 | C1 |
根据减法运算,( R - S )表示所有在学生选课中,但没有出现在已选课程中的记录。因此,结果是:
学生ID | 课程ID |
---|---|
S1 | C2 |
S3 | C1 |
S3 | C2 |
总结
- 关系减法用于从一个关系中去掉另一个关系中的所有元组,返回剩下的部分。