1、三级模式一两级映像
内模式:管理如何存储物理的 数据 ,对数据的存储方式、优化、存放等。
模式:又称为概念模式, 就是我们通常使用的表这个级别 ,根据应用、需求将物理数据划分成一
张张表。
外模式: 对应数据库中的视图这个级别 ,将表进行一定的处理后再提供给用户使用,例如,将用
户表中的用户名和密码组成视图提供给登录模块使用,而用户表中的其他列则不对该模块开放,增加了安全性。
外模式一模式映像:是表和视图之间的映射,存在于概念级和外部级之间, 若表中数据发生了修
改,只需要修改此映射,而无需修改应用程序 。
模式一内模式映像:是表和数据的物理存储之间的映射,存在于概念级和内部级之间, 若修改了
数据存储方式,只需要修改此映射,而不需要去修改应用程序 。
以上的数据库系统实际上是一个分层次的设计,从底至上称为物理级数据库(实际为一个数据库
文件)、概念级数据库、用户级数据库,各层情况如下:
2、数据库的设计
(1)需求分析:即分析数据存储的要求,产出物有 数据流图、数据字典、需求说明书 。获得用 户对系统的三个要求: 信息要求、处理要求、系统要求 。
(2)概念结构设计:就是设计 E-R图,也即实体-联系图,与物理实现无关,就是说明有哪些实 体,实体有哪些属性。 工作步骤包括:选择局部应用、逐一设计分 E-R图、E-R图合并 。
分E-R 图进行合并时,它们之间存在的冲突主要有以下3 类。
- 属性冲突。同一属性可能会存在于不同的分E-R 图中,由于设计人员不同或是出发点不同,对属性的类型、取值范围、数据单位等可能会不一致。
- 命名冲突。相同意义的属性,在不同的分E-R 图上有着不同的命名,或是名称相同的属性在不同的分 E-R 图中代表着不同的意义。
- 结构冲突。同一实体在不同的分 E-R 图中有不同的属性,同一对象在某一分 E-R 图中被抽象为实体而在另一分E-R 图中又被抽象为属性。
(3)逻辑结构设计:将 E-R 图,转换成关系模式,也即转换成实际的表和表中的列属性,这里要考虑很多规范化的东西。 工作步骤包括:确定数据模型、将E-R 图转换成为指定的数据模型、确定
完整性约束和确定用户视图 。
---转换为逻辑结构模型,逻辑结构模型包含很多内容,不只是关系模式、还有层次模式、网状模式等等,关系模式只是逻辑结构模型的经典。
(4)物理设计:根据生成的表等概念,生成物理数据库。 工作步骤包括确定数据分布、存储结
构和访问方式 。
---表里的数据如何存储,如hash存储方式,顺序存储方式,如何访问等等
具体各个设计阶段的产出物、要求等如下所示:
需求分析:数据流图、数据字典、需求说明书。
概念结构设计:E-R模型(用户的数据模型),与DBMS无关的概念模型。
逻辑结构设计:关系模式、视图、完整性约束、应用处理说明书
第(5)和(6)没有考点不重要
(5)数据库实施阶段。数据库设计人员根据逻辑设计和物理设计阶段的结果建立数据库,编制
与调试应用程序,组织数据入库,并进行试运行。
(6)数据库运行和维护阶段。数据库应用系统经过试运行即可投入运行,但该阶段需要不断地
对系统进行评价、调整与修改。
3、E-R模型
数据模型的三要素: 数据结构、数据操作、数据的约束条件 。
在 E-R模型中,使用椭圆表示属性(一般没有)、长方形表示实体、菱形表示联系,联系的两端
要填写联系类型,示例如下图:
联系类型:一对一1:1、一对多1:N、多对多M:N。
属性分类:简单属性和复合属性(属性是否可以分割)、单值属性和多值属性(属性有多个取值)
NULL属性(无意义)、派生属性(可由其他属性生成)。
那么 E-R模型如何转换为关系模型呢(实际就是转换为多少张表)?
- 1:1 联系中,联系可以放到任意的两端实体中,作为一个属性(要保证 1:1的两端关联);
- 1:N 的联系中,联系可以单独作为一个关系模式,也可以在N端中加入1端实体的主键;
- M:N 的联系中,联系必须作为一个单独的关系模式,其主键是M和N端的联合主键。
4、关系代数运算
关系模式在代数运算时可以理解为数据库中的表,两个概念通用。
并(∪):结果是两张表中所有记录数合并,相同记录只显示一次。
交(∩):结果是两张表中相同的记录。
差(− ):S1-S2,结果是S1表中有而S2表中没有的那些记录。
并:所有记录合并,相同记录只留一个;交:两个共有的记录;差:被减数中减去减数中的记录
列可以写列号也可列名
设有S1和S2关系如下图,其并交差结果如下图:
笛卡尔积(X):S1*S2,产生的结果包括 S1和S2 的所有属性列,并且S1中每条记录依次和 S2 中所有记录组合成一条记录,最终 属性列为S1+S2 属性列, 记录数为S1*S2 记录数。
记录相乘,并且属性列不去重。
投影(π ):实际是按条件选择某关系模式中的某列(垂直方向运算),列也可以用数字表示。
选择(σ ):实际是按条件选择某关系模式中的某行记录(水平方向运算)。
设有S1和S2关系如下图,其笛卡尔积、投影、选择结果如下图:
自然连接(⋈ ):结果显示全部的属性列,但是相同属性列只显示一次,显示两个关系模式中属性相同且值相同的记录。自然联接结果如下:
在笛卡尔积基础上属性列去重,还要属性且属性值相同的
效率问题:关系代数运算的效率,归根结底是看参与运算的两张表格的属性列数和记录数,属性
列和记录数越少,参与运算的次数自然越少,效率就越高。因此,效率高的运算一般都是在两张表格参与运算之前就将条件判断完。如:
结合数据表的操作及相关名词补充:
广义投影:广义投影运算允许在投影列表中使用算术运算,实现了对投影运算的扩充。若有关系R,条件F1,F2, … ,Fn中的每一个都是涉及R中常量和属性的算术表达式,那么广义投影运算的形式定义为
连接: 分为 θ 连接、等值连接与自然连接
1) θ 连接:可以由基本的关系运算 笛卡儿积和 选取运算导出。 (笛卡尔积 + 选择)
θ比较运算符,如>、<、=、 ≠ , X 和 Y 分别为R和S上可以进行比较的属性组。
2) 等值连接:
除了等于,还可以大于,小于,同样没有必要求出来RXS,可以直接找R.A=S.C的
3)自然连接
• 是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集
中将重复属性列去掉。如果没有重复属性,那么自然连接就转化为笛卡儿积。即R.A=S.A,所有相同的属性都必须进行比较,图中的是R.A=S.并且是R.C=S.C,一般是去掉右边的。
具体求得时候:可以找到相同的属性列,去掉一个相同的属性,再找到有没有相等的
除(÷)
第一步:找出相同的属性列(本例中相同的是CD)
第二步:先在其中一个表找相同属性列的值(在s表中找到CD,两列的值是(c,d),(e,f)再在另外一个表找与(c.d),(e,f)相同的行,再找到和CD两列不同列的值,(本例中是A,B),而后看A,B两列对应两行的值是否相同,(本例中就是两列都是a,b)在R表中,两行(c,d)(e,f)对应的左边两行的值是相同的,就留下来。
若都没有一样的,那么结果就是一个空集
以上还不是太懂的,参考下面的例子:
R和S共有的属性为B和C,在S中(B,C)组合有三种,即( b 1 , c 2 ) , ( b 2 , c 1 ) , ( b 2 , c 3 ) 因此接下来就要找到R中象集为这三个的元素A。
R中
a1的象集为{ ( b1 ,c2 ) , ( b2 ,c3 ) , ( b2 , c1 ) }
a2的象集为{ ( b3 ,c7 ) , ( b2 ,c3 ) }
a3的象集为{(b4,c6)}
a4的象集为{(b6,c6)}
由于只有a1的象集包含了S在(B,C)属性组上的投影,所以R ÷ S = { a1 }
参考: 7.2 关系运算-CSDN博客、 对数据库关系代数中除法运算的理解_关系除运算-CSDN博客
5、关系数据库的规范化
5.1函数依赖
给定一个x,能唯一确定一个Y,就称X确定Y,或者说Y依赖于 x,例如 Y=X*X函数。
函数依赖又可扩展以下两种规则:
部分函数依赖:A可确定C,(A,B)也可确定C,(A,B)中的一部分(即 A)可以确定 C,称为部分函数依赖。
传递函数依赖:当A和B不等价时,A可确定 B,B可确定 C,则A可确定C,是传递函数依赖;
若 A和B等价,则不存在传递,直接就可确定C。
Armstrong 公理系统
设U 是关系模式 R的属性集,F 是R 上成立的只涉及U 中属性的函数依赖集。函数依赖的推理规则有:
- 自反律:若属性集Y 包含于属性集 X,属性集 X 包含于 U,则 X→Y 在R 上成立。(此处 X→Y是平凡函数依赖)。 X包含Y,U包含Y,则X-->Y(在R上)。
- 增广律:若X→Y 在R 上成立,且属性集Z 包含于属性集U,则XZ→YZ 在R 上成立。 X-->Y,XZ-->YZ(在R上)
- 传递律:若X→Y 和 Y→Z在R 上成立,则X →Z 在R上成立。 X-->Y,Y-->Z,X-->Z
- 合并规则:若X→Y,X→Z同时在R上成立,则X→YZ在R上也成立。 X-->Y,X-->Z,X-->YZ
- 分解规则:若X→W在R上成立,且属性集Z包含于W,则X→Z在R上也成立。 X-->W,Z∈W,X-->Z
- 伪传递规则:若X→Y在R上成立,且WY→Z,则XW→Z。X-->Y,WY-->Z,XW-->Z
5.2键和约束
超键:能唯一标识此表的属性的组合。
候选键:超键中去掉冗余的属性,剩余的属性就是候选键。
主键:任选一个候选键,即可作为主键。
外键:其他表中的主键。
候选键的求法:根据依赖集画出有向图,从入度为0的节点开始,找出图中一个节点或者一个节
点组合,能够遍历完整个图,就是候选键。
主属性:候选键内的属性为主属性,其他属性为非主属性。
实体完整性约束:即主键约束,主键值不能为空,也不能重复。
参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。
用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到150之间。
触发器:通过写脚本来规定复杂的约束。本质属于用户自定义完整性约束。
5.3范式
范式总结:
1. 1NF:属性都是不可分割的,消除小表就是满足1NF
2.1NF--->2NF:消除非主属性对候选键的部分依赖(消除非主属对联合主键的部分依赖)
3.2NF--->3NF:消除非主属性对主键的传递依赖(消除非主属对主键的传递依赖)
4.3NF--->BCNF:消除主属性对主键的部分依赖和传递依赖(消除主属对主键的部分依赖和传递依赖)
数据库中的范式总体概论如下图:
第一范式1NF
关系中的每一个分量必须是一个不可分的数据项。通俗地说,第一范式就是表中不允许有小表的
存在。比如,对于如下的员工表,就不属于第一范式:
上表中,出现了属性薪资又被分为基本工资和补贴两个子属性,就好像表中有分割了一个小表,
这就不属于第一范式。如果将基本工资和补贴合并,那么该表符合1NF。
1NF 可能存在的问题:1NF是最低一级的范式,范式程度不高,存在很多的问题。比如用一个单
一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩)
这个表满足第一范式,但是存在如下问题:
数据冗余:一个系有很多的学生,同一个系的学生的系主任是相同的,所以系主任名会重复出现。
更新复杂:当一个系换了一个系主任后,对应的这个表必须修改与该系学生有关的每个元组。
插入异常:如果一个系刚成立,没有任何学生,那么这个无法把这个系的信息插入表中。
删除异常:如果一个系的学生都毕业了,那么在删除该系学生信息时,这个系的信息也丢了。
第二范式2NF
如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。通俗
地说,2NF 就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列。
按照定义,上面的学生表就不满足 2NF,因为学号不能完全确定课程号和成绩(每个学生可以选
多门课)。将学生表分解为:
学生(学号,学生姓名,系编号,系名,系主任)
选课(学号,课程号,成绩)。
每张表均属于2NF。
第三范式3NF
在满足1NF的基础上,表中不存在非主属性对码的传递依赖。
继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任和系名,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖,将学生表进一步分解为:
学生(学号,学生姓名,系编号)
系(系编号,系名,系主任)
选课(学号,课程号,成绩)
每张表都属于3NF。
BC范式 BCNF
所谓 BCNF,是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖。
通俗的来说,就是在每一种情况下,每一个依赖的左边决定因素都必然包含候选键,如下:
上图中,候选键有两种情况:组合键(S,T)或者(S,J),依赖集为{SJ—T,T—J},可知,STJ 三个属性
都是主属性,因此其达到了3NF(无非主属性),然而,第二种情况,即(S,J)为候选键的时候,对于依
赖T->J,T在这种情况不是候选键,即 T-J的决定因素不包含任意候选码,因此上图不是 BCNF。
要使上图关系模式转换为 BCNF 也很简单,只需要将依赖T->J变为 TS->J即可,这样其左边决定
因素就包含了候选键之一S。
5.4模式分解
范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递依赖的属性分
离出来,来达到一步步优化,一般分为以下两种:
保持函数依赖分解----还原出原来的全部函数依赖
对于关系模式 R,有依赖集 F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)。
实例:
设原关系模式 R(A,B,C),依赖集 F(A->B,B->C, A->C),将其分解为两个关系模式 R1(A,B)和R2(B,C),此时 R1中保持依赖 A>B,R2保持依赖 B->C,说明分解后的 R1和 R2是保持函数依赖的分解,因为 A->C这个函数依赖实际是一个冗余依赖,可以由前两个依赖传递得到,因此不需要管。
保持函数依赖的判断(补充,第2点不强求):
1、如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这
是一个充分条件)。 也即我们课堂上说的简单方法,看函数每个依赖的左右两边属性是否都在同一个分解的模式中。
2、如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步
判断。
该方法的表述如下:
算法二:
对F上的每一个α→β使用下面的过程:
result:= a;
while(result 发生变化)do
for each 分解后的 Ri
t=(result∩Ri)+ ∩Ri
result=resultUt
以下面的例题纠错作为讲解:正确答案是无损分解,不保持函数依赖。
假设关系模式 R(U, F),属性集 U={A,B,C},函数依赖集 F={A→B,B→C}。若将其分解
为 p={RI(U1,F1),R2(U2,F2)},其中 U1={A,B},U2={A,C}。那么,关系模式R、R1、R2分别达到
了(5);分解 D(6)。
(5)A.1NF、2NF、3NF
B.INF、3NF、3NF
C.2NF、2NF、3NF D.2NF、3NF、
3NF
(6)A.有损连接但保持函数依赖
B.既无损连接又保持函数依赖
C.有损连接且不保持函数依赖
D.无损连接但不保持函数依赖
【答安1D B
首先,该分解,U1保持了依赖 A->B,然而 B->C没有保持,因此针对 B->C需要用第2点算法来
判断:
result=B,result∩U1=B,B+=BC,BCNU1=B,result=BUB=B,result没变,然后,result再和 U2
交是空,结束了,不保持函数依赖。
注意,这里 B+,+的意思是代表由 B能够推导出的其他所有属性的集合,这里,B->C,因此 B+=BC。
无损分解----还原出原来的全部属性
分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损。
当分解为两个关系模式,可以通过以下定理判断是否无损分解:
定理:
如果R的分解为 p={R1,R2},F为R所满足的函数依赖集合,分解 p具有无损连接性的充分必要条件是R1∩R2->(R1-R2)或者R1∩R2->(R2-R1)。
当分解为多个关系模式时,通过表格法求解: 表格法适应于3个及以上的,一般不考
思考题:
有关系模式:成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号→姓名,课程号→课程名,(学号,课程号)→分数
若将其分解为:
成绩(学号,课程号,分数)
学生(学号,姓名)
课程(课程号,课程名)
请思考该分解是否为无损分解?
由于有:学号→姓名,所以: 成绩(学号,课程号,分数,姓名)
由于有:课程号→课程名,所以: 成绩(学号,课程号,分数,姓名,课程名)
由思考题可知,无损分解,要注意将候选键和其能决定的属性放在一个关系模式中,这样才能还
原。也可以用表格法求解如下(需要依赖左右边的属性同时在一个关系模式中,才能补充):
行是所有属性,列是分解后的关系模式名称
注意:拆分成单属性集必然是有损分解,因为单属性不可能包含依赖左右两边属性,这个单属性
已经无法再恢复。
解题思路:
第一题:
第一步,首选确定候选键,如何求?
从依赖集着手,凡是从未在右边出现过的属性,必然是候选键之一(箭头右边出现过的全部干掉),然后根据这些属性来推导其他的所有属性出来。
如本题:{A, B, C,D},AB-->C,C干掉,CD-->B,B干掉,所以只剩下A和D,这两是候选键之一,然后再用A和D推导出其他的所有属性(B和C),发现推导不出来B和C,那么需要加关键字了,比如加B,组成ABD,AB-->C,所以ABD就是候选关键字之一。当然还有其他的比如ACD也是可以的。所以选C。
主属性是候选键里的属性,非主属性是非候选键,所以ABD和ACD都是3个主属性和1个非主属性
第二题:
做关系模式类的题,老规矩,先找候选关键字。
{E,N,M,L,Q},E-->N,EM-->Q,M-->L,去掉N、Q、L,剩下E、M。E和M能推导出所有,那么E、M就是候选关键字,而且就这一个。
达到了第几范式?
1NF看看有没有属性可以分割,俗称的小表。一般给出的都满足1NF。
2NF看看有没有普通属性对联合主键的依赖,联合主键是E和M,发现N依赖E,L依赖M,不满足,不满足2NF的后面的3NF、BCNF的更不可能了。
3NF看看非主属性有没有对主键的函数依赖。
BCNF看看是否存在主属性对主键的部分依赖和传递依赖。 选A
E和M是联合主键、并且还存在非主属对主键的部分依赖,选D。
候选关键字是:CD
是不是有损,公式:R1∩R2 --> (R1-R2)或者(R2-R1)
R1∩R2 = C;R1 - R2 =ABE;R2 - R1 = D;根据依赖集C推不出来ABE,D能推出来A,A能推出来E,但是只有D、A、E推不出B和C来,所以它是有损分解。
看函数每个依赖的左右两边属性是否都在同一个分解的模式中。
B-->A,在R1中;D-->A,不在;A-->E在R1中;AC-->B在R1中,这是第一步,第二部再去后面的判断,太复杂就不去详细说明了,选D。
5.5并发控制即便概念图
5.6事务管理
事务提交 commit,事务回滚 rollback。
事务:由一系列操作组成,这些操作,要么全做,要么全不做,拥有四种特性,详解如下:
(操作)原子性:要么全做,要么全不做。
(数据)一致性:事务发生后数据是一致的,例如银行转账,不会存在 A账户转出,但是 B账户没收到的情况。
(执行)隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干涉。
(改变)持续性:事务操作的结果是持续性的。
事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发
控制中存在下面三个问题:
丢失更新:事务1对数据 A 进行了修改并写回,事务2 也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。
不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读 A两次,会发现数据 A有误。
读脏数据:事务1对数据A进行了修改后,事务2读数据 A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据 A做的事是无效的,读到了脏数据。
5.7封锁协议
X锁是排它锁(写锁)。若事务T对数据对象 A加上X锁,则只允许T读取和修改 A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
S锁是共享锁(读锁)。若事务T对数据对象A加上s锁,则只允许T读取 A,但不能修改 A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放 A上的S锁。
总结:加了X,别的事务什么锁也加不了(即不能读不能写),加了S锁,别的事务只能再加S锁(可以读不可写),加不了X锁
共分为三级封锁协议,定义如下:
一级封锁协议:事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。可解决丢失更
新问题。
二级封锁协议:一级封锁协议的基础上加上事务T在读数据R之前必须先对其加 S锁,读完后即
可释放S锁。可解决丢失更新、读脏数据问题。---- 这里要注意加了S后加不了X。
三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。
可解决丢失更新、读脏数据、数据重复读问题。---- 这里要注意加了X后加不了S。
三级封锁协议的应用丢失更新加锁(一级封锁协议):
读脏数据加锁(二级封锁协议):
两段锁协议
每个事务的执行可以分为两个阶段:生长阶段(加锁阶段)和衰退阶段(解锁阶段)。
加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,在进
行写操作之前要申请并获得X锁。加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。
解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再
进行加锁操作。
两段封锁法可以这样来实现:事务开始后就处于加锁阶段,一直到执行 ROLLBACK和 COMMIT之
前都是加锁阶段。ROLLBACK和 COMMIT使事务进入解锁阶段,即在ROLLBACK和 COMMIT模块中 DBMS释放所有封锁。
6、数据故障与备份
6.1 安全措施
6.2数据故障
6.3 数据备份
静态转储:即冷备份,指在转储期间不允许对数据库进行任何存取、修改操作;
- 优点是非常快速的备份方法、容易归档(直接物理复制操作);
- 缺点是只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
动态转储:即热备份,在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可
并发执行;
- 优点是可在表空间或数据库文件级备份,数据库扔可使用,可达到秒级恢复;
- 缺点是不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
完全备份:备份所有数据。
差量备份:仅备份上一次完全备份之后变化的数据。
增量备份:备份上一次备份之后变化的数据。
日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改
的每一次操作写入日志文件。一旦发生故障,DBMS 的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
备份毕竟是有时间节点的,不是实时的,例如:上一次备份到这次备份之间数据库出现了故障,
则这期间的数据无法恢复,因此,引入日志文件,可以实时记录针对数据库的任何操作,保证数据库可以实时恢复。
7、分布式数据库
局部数据库位于不同的物理位置,使用一个全局 DBMS将所有局部数据库联网管理,这就是分布
式数据库。其体系结构如下图所示:
非分布式 分布式
外模式 (全局)外模式
外模式---模式映像 映像1
概念模式/模式 (全局)概念模式
模式---内模式映像 映像2
内模式 分片模式
映像3
分布模式
映像4
局部概念模式
局部内模式
分片模式
- 水平分片:将表中水平的记录分别存放在不同的地方。
- 垂直分片:将表中的垂直的列值分别存放在不同的地方。
分布透明性
- 分片透明性:用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
- 位置透明性:应用程序不关心数据存储物理位置的改变。
- 逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型。
- 复制透明性:用户或应用程序不关心复制的数据从何而来。
8、数据仓库与数据挖掘
数据仓库是一种特殊的数据库,也是按数据库形式存储数据的,但是目的不同:数据库经过长时
间的运行,里面的数据会保存的越来越多,就会影响系统运行效率,对于某些程序而言,很久之前的数据并非必要的,因此,可以删除掉以减少数据,增加效率,考虑到删除这些数据比较可惜,因此,一般都将这些数据从数据库中提取出来保存到另外一个数据库中,称为数据仓库。
数据仓库四大特点
- 面向主题:按照一定的主题域进行组织的。
- 集成的:数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
- 相对稳定的:数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
- 反映历史变化:数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
数据仓库的结构通常包含四个层次,如下图所示:
- 1.数据源:是数据仓库系统的基础,是整个系统的数据源泉。
- 2.数据的存储与管理:是整个数据仓库系统的核心。
- 3.OLAP(联机分析处理)服务器:对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。
- 4.前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。
ETL :抽取(extract)、转换(transform)、加载(load)
数据挖掘的分析方法
- 关联分析:关联分析主要用于发现不同事件之间的关联性,即一个事件发生的同时,另一个事件也经常发生。
- 序列分析:序列分析主要用于发现一定时间间隔内接连发生的事件,这些事件构成一个序列,发现的序列应该具有普遍意义。
- 分类分析:分类分析通过分析具有类别的样本特点,得到决定样本属于各种类别的规则或方法。分类分析时首先为每个记录赋予一个标记(一组具有不同特征的类别),即按标记分类记录,然后检查这些标定的记录,描述出这些记录的特征。
- 聚类分析:聚类分析是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,并且对每个这样的组进行描述的过程。
商业智能BI
BI系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。
- 数据预处理是整合企业原始数据的第一步,它包括数据的抽取(Extraction)、转换(Transformation)和加载(Load)三个过程(ETL过程);
- 建立数据仓库则是处理海量数据的基础;
- 数据分析是体现系统智能的关键,一般采用联机分析处理(OLAP)和数据挖掘两大技术。联机分析处理不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便地对海量数据进行多维分析。数据挖掘的目标则是挖掘数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题;
- 在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。
9、反规范化及时
由前面介绍可知,规范化操作可以防止插入异常、更新、删除异常和数据冗余,一般是通过模式
分解,将表拆分,来达到这个目的。
但是表拆分后,解决了上述异常,却不利于查询,每次查询时,可能都要关联很多表,严重降低
了查询效率,因此,有时候需要使用反规范化技术来提高查询效率。
技术手段包括:增加派生性冗余列,增加冗余列,重新组表,分割表。
主要就是增加冗余,提高查询效率,为规范化操作的逆操作。
补充大数据:
第二问,着重强调的是长期保留并定期加载和刷新,很少对数据进行修改和删除,稳定性。反应历史变化的不会这么描述,会描述这一段时间如何如何,过一段时间如何如何。
10、SQL语言
SQL语言中的语法关键字,不区分大小写:
创建表create table;
指定主键 primary key()
指定外键 foreignkey();
修改表 alter table;
删除表drop table
索引index,视图 view;
数据库查询 select..from...where;
分组查询 group by,分组时要注意 select后的列名要适应分组,having为分组查询附加条件;
更名运算 as;
字符串匹配 like,?配多个字符串,_匹配任意一个字符串;
数据库插入 insert into..values();
数据库删除 delete from..where;
数据库修改 update...set...where;
排序 order by,默认为升序,降序要加关键字 DESC。
授权 grant..on…to,允许其将权限再赋给另一用户 with grant option;
收回权限 revoke..on..from;
with check option 表示要检查 where 后的谓词条件。
DISTINCT:过滤重复的选项,只保留一条记录。
UNION:出现在两个 SQL语句之间,将两个 SQL语句的查询结果取或运算,即值存在于第一句
或第二句都会被选出。
INTERSECT:对两个sQL语句的查询结果做与运算,即值同时存在于两个语句才被选出。
SQL语法原理
SELECT之后的为要查询显示的属性列名;FROM后面是要查询的表名;WHERE后面是查询条件;
涉及到平均数、最大值、求和等运算,必须要分组,group by后面是分组的属性列名,分组的条件使
用 Having 关键字,后面跟条件。
在SQL语句中,条件判断时数字无需打引号,字符串要打单引号。
第一步找出候选关键字:右边出现过的全部干掉,剩下的再试试能不能全部推出来其他的。
只剩下零件号、供应商,他两个可以推导出来其他的。所以零件号和供应商就是候选关键字,也是唯一的。
1NF:不能存在小表,就是属性不能再拆分。
2NF:得消除非主属性对联合主键的部分依赖
3NF:得消除非主属性对主键的传递依赖
BCNF:得消除主属性对主键的部分依赖和传递依赖。
没有小表,里面的字段不可再分了,满足1NF;存在零件名称<---零件号,供应商所在地<---供应商;所以不满足2NF;在往上的就更不能满足了。
1 2 3 4 5 6 7 8 9
A B C D E B C F G
Π1,3,6,7 投影列:1,3,6,7这4个列 R.A、R.C、S.B、S.C
σ3<6,选择行:R.C<S.B
R⋈S:自然连接:除了列的选择还有条件: R.B=S.B and R.C= S.C
select R.A,R.C,S.B,S.C from R,S where R.C<S.B and R.B=S.B and R.C= S.C
11、NoSQL数据库
NoSQL 最常见的解释是 Non-Relational, Not Only SQL 也被很多人接受。NoSQL 仅仅是一个概念,
泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的 ACID 特性。
按照所使用的数据结构的类型,一般可以将 NoSQL 数据库分为以下4 种类型。
- 1 列式存储数据库:行式数据库即传统的关系型数据库,数据按记录存储,每一条记录的所有属性存储在一行。列式数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列。
- 2.键值对存储数据库:键值存储的典型数据结构一般为数组链表:先通过 Hash 算法得出Hashcode ,找到数组的某一个位置,然后插入链表。
- 3.文档型数据库:文档型数据库同键值对存储数据库类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON。
- 4.图数据库:图形结构的数据库同其他采用行列以及刚性结构的 SQL 数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。
NoSQL 数据库没有标准的查询语言(SQL),因此进行数据库查询需要指定数据模型。
目前业界对于 NoSQL 并没有一个明确的范围和定义,但是它们普遍存在下面一些共同特征:
- ·易扩展:去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
- ·大数据量,高性能: NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下。这得益于它的无关系性,数据库的结构简单。
- ·灵活的数据模型: NoSQL 无须事先为要存储的数据建立宇段,随时可以存储自定义的数据格式。
- ·高可用:NoSQL在不太影响性能的情况下,就可以方便地实现高可用的架构,有些产品通过复制模型也能实现高可用。
NoSQL 整体框架分为4 层,由下至上分为数据持久层、数据分布层、数据逻辑模型层和接口层。
- (1)数据持久层定义了数据的存储形式,主要包括基于内存、硬盘、内存和硬盘接口、订制可插拔 4 种形式。
- (2)数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL 可选的机制比较多,主要有 3 种形式: 一是 CAP 支持,可用于水平扩展; ----C(一致性)、A(可用性)、P(分区容错性), 二是多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行; 三是动态部署支持,可以在运行着的集群中动态地添加或删除结点。
- (3)数据逻辑层表述了数据的逻辑表现形式。
- (4)接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。
NoSQL 分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的
灵活性和兼容性,每种数据库在不同层面可以支持多种特性。
NoSQL 数据库在以下这几种情况比较适用:
- ·数据模型比较简单;
- ·需要灵活性更强的IT 系统;
- · 对数据库性能要求较高;
- ·不需要高度的数据一致性;
对于给定 key,比较容易映射复杂值的环境。