本文共 9655 字,大约阅读时间需要 32 分钟。
由于临近考试,特做此篇笔记以便复习。读者大大请根据自己的学习内容来适当观阅。部分内容较为粗略,望原谅~
20世纪50年代中期以前的这段时间,计算机还很简陋,尚没有完整的操作系统,主要应用于科学计算。
数据是面向应用程序的,一个数据集只能对应于一个程序。
如上所示,它表示的是应用程序单对单的对数据进行处理的方式。
20世纪50年代后期到60年代中期的时间内,计算机除了应用于科学计算外,还有应用于数据管理。
如上图所示,对于一个特定的应用,数据被集中存放在多个数据文件中。针对该文件组开发特定的应用程序。
利用**“按文件名访问,按记录进行存取”**的管理技术,对文件进行删、改、查等操作
文件系统的特点:
文件系统的弊端:
设计数据库管理系统的目的在于有效地管理大量的数据,既涉及到数据存储结构的定义,又涉及到数据操作机制的提供。
数据库管理系统的基本特征(特点):
数据库结构的基础是数据模型。
其中,数据模型是一个描述以下三方面的数学形式体系。
其中稍微以其中的模型——层次模型,来对数据模型的基本概念进行阅览
根据数抽象的个不同的级别,DBMS也应该提供观察数据库的3个不同的角度。这就是数据库的三级模式结构
模式被称为逻辑模式,它对应于逻辑层数据抽象
模式是数据库中全体收数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
模式的一个具体值成为模式的一个实例。
外模式也被称为子模式或者用户模式,它对应于视图层数据抽象。
外模式是数据库用户能够看到和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一具体应用有关的数据的逻辑表述。
外模式是保证数据库安全性的一个保障。因为每个用户只能看见和访问其所对应的外模式中的数据,其余的数据库内容均不可见。
内模式也被称为存储模式,它对应物理层数据抽象。
内模式是数据的物理结构和存储模式的描述,是数据在数据库内部的表示方式。
如上图所示,模式是对于公共而言的公共视图;外模式对应其应用,使得用户在进行应用A访问的同时,限制了其他应用的访问;而内模式对应存储结构,描述了数据库的存储结构等内部的表示方式。
数据库的两层映像功能与数据独立性
数据库中只有一个模式,也只有一个内模式,模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系
在模式描述中定义模式/内模式映像
保证了数据与应用程序的物理独立性,简称为数据的物理独立性
在构建数据库的三级模式结构上,模式(全局逻辑结构)是数据库的核心和关系。它独立于数据库的其他层次。
所以,设计数据库模式结构中,应该首先确定数据库的逻辑模式。
实体完整性:
null
值。参照完整性:
若属性(或属性集)F是关系r的外码,它与关系s的主码Ks相对应,则对于关系r中的每一个元组在属性F上的取值要么为空值null
,要么等于关系s中某个元组的主码值。
用户自定义完整性:
首先,关系型数据库系统应该支持实体完整性和参照完整性。
其次,用户定义完整性就是针对某一个具体的应用要求来定义其约束条件。
关系是一个二维表,对它的操作可以从水平(行)的角度进行,即选择操作;也可以从纵向(列)的角度进行,即投影操作。
给定一个查询需求,构造其关系代数表达式的步骤 :
二维表的构成如下:
选择操作做是在关系中查找满足给定的条件的所有元组。
例如如下图所示的实例,根据满足的内容来查询满足该条件下的所有元组。
关系r上的投影是从r中选择出若干个属性列组成新的关系。
如上面举例的一样,它打印出来的是数据库中的属性。
--并运算r∪s = { t∣t∈r∨t∈s }--差运算(∈/表示不属于)r-s = { t∣t∈r∧t∈/s }--交运算r∩s = { t∣t∈r∧t∈s }
两个分别为n目和m目的关系r和s的笛卡尔积是一个n+m目元组的集合。
若关系r有kr个元组,关系s有ks个元组,则关系r和s的笛卡尔积有kr×ks
个元组。
记作 :
r × s = t r ⋅ t s ∣ t r ∈ r ∧ t s ∈ s r×s = { tr·ts∣tr∈r∧ts∈s } r×s=tr⋅ts∣tr∈r∧ts∈s连接也称为θ连接。记为A op B,其中A、B分别为关系r和s中的属性个数相等且可比的连接属性集,op为比较运算符。 θ连接是从两个关系的笛卡尔积中选取连接属性间满足谓词θ的所有元组。
r ⋈ θ s = t r ⋅ t s ∣ t r ∈ r ∧ t s ∈ s ∧ ( r . A ( o p ) s . B ) r ⋈θ s = { tr·ts∣tr∈r∧ts∈s∧(r.A (op) s.B) } r⋈θs=tr⋅ts∣tr∈r∧ts∈s∧(r.A(op)s.B) 其中,连接有两个最常用、重要的连接。一个是等值连接,另一个是自然连接。接下来介绍一下自然连接。自然连接是一个特殊的等值连接,它要求两个参与连接的关系具有公共的属性集,并在这个公共属性集上进行等值连接;同时,还要求将连接结果中的重复属性列去除掉,即在公共属性集中的列只保留一次。
比如说,学生信息和成绩信息都具有学号属性,两个表就通过学号属性进行自然连接。
**【示例】**在数据库中,查找所有2016级的“蒙古族”学生的姓名,直接上答案!!
∏studentName(σnation='蒙古族'(Student) ⋈σgrade=2016(Class))
1.首先,对于上面的描述中可以根据MySQL嵌套查询的想法一样。先将想查询的元组查找出来。
σnation='蒙古族'(Student)
上面所找到的是“是蒙古族的学生”的元组。
σgrade=2016(Class)
上面找到的是具有**”年级是2016级的学生“**的元组。
2.其次将两个表进行连接,实际上就是对两个表进行笛卡尔积,最终得到拥有两个属性信息的表。
3.最后寻找满足如上条件(表中显示的名字)投影出来即可。
接下来用一个例子来比较直观的感受除运算的概念。
图中所示中,它将原本被除数中的表,根据除数中满足的信息筛选出来,得出商(结果)。
第三章节的部分可以移步到我的另外一篇(虽然被审核为转载…),但都是自己的一点一滴的学习中感受的存在。谢谢大家~
数据库过程就是根据各种应用处理要求、硬件环境及操作系统的特性,将现实世界中的数据进行合理组织,利用已有数据库来建立数据库系统的过程
具体地说,对于一个给定的应用环境,构造出最优的数据库逻辑模式和物理模式,并建立数据库及其应用系统,使之能够有效地存储和管理数据,满足用户的信息要求和处理要求。
如上图所示,数据库设计一共有如上6个步骤。后续的笔记中只限于对如上6个步骤的了解(除了概念设计)。
实体:实体是客观世界中可区分于其他事物的事物或者对象。
实体的特征:
实体可以是具体存在的、有形的事物,也可以是抽象的、无形的事物。
实体集:实体集是具有相同类型即相同性质的实体组成的集合。
属性是实体集中每个实体具有的特征描述。比如学生实体就一定会有姓名这一个特征。
对于每个属性而言,一个实体都拥有自己的属性值。
对于每一个属性所允许的取值范围或者集合称为该属性的域。
其中,属性可以分为简单属性和复合属性;单值属性和多值属性。
简单属性:指的是不能再分为更小部分的属性。
复合属性:指的是可进一步分为更小部分的属性。
单值属性:指的是只有单独的一个值,比如一个学生只有一个学号。
多值属性:指的是有多个值,比如一个学生可以有多个电话。
派生属性:派生属性的值可以从其他相关属性或者实体派生出来,比如年龄可以间接的根据出生日期和当前日期计算得出。
联系指的是多个实体间的相互关联。
联系集是同类联系的集合。
候选码和超码是实体集客观存在的特性,它们表示实体集中任意两个实体不允许在码属性上有相同的值。可以从多个候选码中选择一个作为实体集的主码。主
码是被数据库设计者主观选中、用来区分同一实体集中不同实体的候选码。
当一实体集存在多个候选码时,主码选择原则:
选择属性长度最短的候选码;选择包含单个属性的码,而不是复合候选码;选择在数据库系统生命周期内属性值最少变化的候选码;选择在数据库系统生命周期内更可能包含唯一值的候选码。
一个联系集中的每一个联系也要求是可区分的,也必须存在候选码,并选择其中的一个候选码作为主码,用于唯一标识该联系集中的一个联系。
1. 二元联系集的主码选择,依赖于联系集的映射基数
一对一:主码可以使用参与联系集中的任何一方实体集的主码;
一对多(多对一):主码由“多”的一方实体集的主码组成;
多对多:主码由参与联系集中所有实体集的主码组成
2.二元联系集的属性安置
一对一联系集的属性:安置于联系集或任一边的实体集上;
一对多联系集的属性:安置于联系集或多的一方实体集上;
多对多联系集的属性:它是描述相关联实体集间的交互性语义,因此,联系属性只能安置于联系集上,不能放到相关联的实体集上去
5.2 有损分解与无损分解
有损分解:两个分解后的关系通过连接运算还原得到的信息与原来关系的信息不一致。
无损分解:通过连接分解后所得到的较小关系完全还原被分解关系的所有实例,称之为无损分解。
依赖保持:如果酶分解关系模式上的所有依赖关系都在分解得到的关系模式上保留,称该分解为依赖保持。
函数依赖(functional dependency, 简称FD)是一种完整性约束, 是现实世界事物属性之间的一种制约关系。
如上图所示,对于任意两个在属性集{A, B}上取值相同的元组,它们在属性C上的取值也相同。因此,满足函数依赖AB->C
在关系模式r®中,a和b是R的子集.若a依赖于b,但b不属于a,则称a->b是非平凡函数依赖。否则,若b属于a, 则称a->b是平凡函数依赖。
在关系模式r®中,a属于R的子集,b属于R的子集,且a->b是非平凡函数依赖。若对任意的c是a的子集,c->b都不成立,则称a->b是完全函数依赖,简称完全
依赖。否则,若存在非空的c属于a,使c->b成立,则称a->b是部分函数依赖,简称部分依赖。
在关系模式r®中,设a是R子集,b是R子集,c是R子集,若a->b,b->c,则必存在函数依赖a->c;若a->b 、b->c和a->c都是非平凡函数依赖,且b不依赖a,则称a->c是传递函数依赖,简称传递依赖。
满足BCNF范式的关系一定满足3NF范式,满足3NF范式的关系一定满足2NF范式,满足2NF范式的关系一定满足1NF范式。
如果一个属性的域值不可再分,称关系模式为第一范式。
如果一个关系模式r®属于1NF,且所有非主属性都完全函数依赖于r®的候选码,则称r®属于第二范式
如果一个关系模式r®属于2NF,且所有非主属性都直接函数依赖于r®的候选码(即不存在非主属性传递依赖于候选码,也就是不存在非主属性依赖于另一个非主属性),则称r®属于第三范式,
最后的BCNF范式满足以下三个条件:
所有非主属性都完全函数依赖于每个候选码;所有主属性都完全函数依赖于每个不包含它的候选码;没有任何属性完全函数依赖于非候选码的任何一组属性。--它排除了:任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖;主属性之间的传递依赖。
5.8 逻辑蕴涵&闭包
若给定函数依赖集F,可以证明其他函数依赖也成立,则称这些函数依赖被F逻辑蕴涵。令F为一函数依赖集,F逻辑蕴涵的所有函数依赖组成的集合称为F的闭包,记为F+
令r®为关系模式,F为函数依赖集,AR,则称在函数依赖集F下由A函数确定的所有属性的集合为函数依赖集F下属性集A的闭包,记为A+
如上图所示,已计算出(AG)+=ABCGHI,则还要进一步分别计算A+和G+。最后经计算得,A+=ABCH、G+=G,它们都不包含R的所有属性。因此,AG为r®的候选码
结构化查询语言SQL包括:数据定义语言DDL、数据操纵易语言DML、数据控制语言DCL和其他。
数据操纵语言DML是对数据库的数据进行检索和更新。其中包括以下三条语句。INSERT
、DELETE
、UPDATE
。
另外的,还有其他的分类:
INSERT INTO[ ( [, ... ] ) ] VALUES ( [, ... ] ) --例子:将一个新学生元组('0700006', '李相东', '男', '1991-10-21 00:00', '云南', '撒呢族', 'CS0701')插入到学生表Student中。INSERT INTO Student VALUES ( '0700006', '李相东', '男', '1991-10-21 00:00', '云南', '撒呢族', 'CS0701' )--例子:将一个新学生元组(姓名:章李立,出生日期:1991-10-12 00:00,学号:1500007)插入到学生表Student中。 INSERT INTO Student(studentName, birthday, studentNo) VALUES ( '章李立', '1991-10-12 00:00', '0700007' )
注意:
INSERT INTO[ ( [, ... ] ) ]
<tableName>
:要插入元组的基本表的名称;
<columnName1> [, <columnName2> ... ]
:指明被插入的元组按 <columnName1>
, <columnName2>
, … 指定的属性名称和顺序插入到基本表<tableName>
中;
该项可以省略,若省略则其查询出来的结果必须与<tableName>
表结构相同;
<subquery>
:由SELECT
语句引出的一个子查询。
DELETE FROM[WHERE ] :要删除记录的基本表的名称; [WHERE ]:指出被删除的元组所满足的条件.该项可以省略,若省略则表示删除表中的所有元组; WHERE子句中可以包含子查询。--例子:删除学号为1600001同学的选课记录。DELETE FROM Score WHERE studentNo='1600001'
UPDATESET = [, = ... ][FROM { | | } [AS] [ ] [, { | | } [AS] [ ] ... ][WHERE ]其中: :要进行修改数据的基本表的名称。SET = [, = ... ]: 用表达式的值替代属性列的值一次可以修改元组的多个属性列,之间以逗号分隔。[WHERE ]:指出被修改的元组所满足的条件该项可以省略,若省略,表示修改基本表中的所有元组;WHERE子句中可以包含子查询。
基于视图的操作包括:
视图的主要作用是:
顺序索引(ordered index):索引中的记录(索引项)基于搜索码值顺序排列。
散列索引:索引中的记录(索引项)基于搜索码值的散列函数(即哈希函数)的值平均、随机地分布到若干个散列桶中。
组织结构:在索引中按搜索码值的顺序存储索引项,并将索引项与包含该索引项中搜索码值的文件记录关联起来(通过指针).
如下图所示:
对于索引顺序文件而言,顺序索引有两类:稠密索引和稀疏索引。
即使采用稀疏顺序索引,对于一个大型数据库而言,顺序索引本身也可能变得很大。
如果索引过大,主存中不可能读入所有的索引块,也就是大部分索引块只能存储在磁盘上,这样在查询处理过程中,搜索索引就必须读大量的磁盘块。
通过多级索引技术能够较好地解决上述问题。所谓多级索引就是在索引之上再建立索引。
另外的,辅助索引通过使用指针桶的方式实现。将数据文件中具有该搜索码值的所有记录的指针存放在一个指针桶中。索引项中的指针会存放指向指针桶的指针。
B+树索引
B+树索引的结构满足:
对于一个表的索引而言,不是越多越好,因为会降低写的效率 。
对SELECT语句的结果集进行逐行处理,需使用游标。
**游标(cursor)**是系统为用户开设的一个数据缓冲区,用于存放SQL语句的执行结果(元组集合)。每个游标都有一个名字,用户可以用SQL提供的语句从游标中逐一获取元组(记录),并赋给主变量,交由主语言进一步处理。
用户定义在关系表上的一类由事件驱动的存储过程,由服务器自动激活。
查询处理过程:语法分析与翻译、查询优化、查询执行
查询优化:
数据库的安全性:保护数据库以防止不合法使用所造成的数据泄密、更改或破坏
数据库的完整性:防止数据库中存在不符合语义的数据,其防范对象是不合语义的、不正确的数据
授权用户才能访问数据库
安全:
权限管理:GRANT
和REVOKE
GRANT select ON Score TO u1, u2, u3
REVOKE select ON Score FROM u1
事务特性:
1)原子性:事务的所有操作要么全部都被执行,要么都不被执行
2)持久性:一个事务成功提交后,它对数据库的改变必须是永久的,即使随后系统出现故障也不会受到影响
3)一致性:一个单独执行的事务应保证其执行结果的一致性,即总是将数据库从一个一致性状态转化到另一个一致性状态
4)隔离性:当多个事务并发执行时,一个事务的执行不能影响另一个事务,即并发执行的各个事务不能互相干扰
并发控制:数据库的一致性经常会受到破坏,因此在事务访问数据对象前须采取一定措施加以控制,只有得到访问许可时,才能访问数据对象,如基于封锁的并发控制方法