概念性的东西我总是很容易搞混,想着一边学习一边整理出来,如果这次没有考过的话下次还可以继续学习……
学习资料《软件设计师教程(第4版)》褚华 主编,清华大学出版社
对这本书有点小小的意见,没有课后习题,虽然说有对应的上下午科目的真题的书,但是感觉还是有一两道题会好一些
数据库系统DBS
组成:数据库、硬件、软件、人员。
从最终用户角度,体系结构分类:集中式数据库系统、客户端/服务器(C/S)体系结构、并行数据库系统、分布式数据库系统。
三级模式结构“三级模式和两级映像”:外模式(用户模式/子模式)、概念模式(模式)、内模式(存储模式)、外模式/模式映像、模式/内模式映像。二级映像功能保证了数据的独立性。
数据库管理系统DBMS是DBS的核心软件
功能:数据定义(数据定义语言DDL)、数据库操作(数据操纵语言DML)、数据库运行管理、数据的组织、存储和管理、数据库的建立和维护、其他功能。
特征:数据结构化且统一管理、有较高的数据独立性(物理独立性、逻辑独立性)、数据控制功能(数据库的安全性、数据的完整性、并发控制、故障恢复)。
分类:关系数据库系统RDBS、面向对象的数据库系统OODBS、对象关系数据库系统ORDBS
大数据BigData特征:“4V”——大量化Volumn、多样化Variety、价值密度低Value、快速化Velocity。
三大挑战:软件和数据处理能力、资源和共享管理、数据处理的可信力。
安全风险:大数据成为网络攻击的显著目标、大数据加大了隐私泄露风险、大数据威胁现有的存储和安防措施、大数据技术成为黑客的攻击手段、大数据成为高级可持续攻击的载体、(新机遇)大数据技术为信息安全提供新支撑。
分类:概念数据模型(信息模型,其中最著名的是E-R模型)、基本数据模型(用于DBMS的实现,包括层次模型、网状模型、关系模型、面向对象模型)。
三要素:数据结构、数据操作、数据的约束条件。
强调语义,与现实世界的问题密切相关,容易理解、与计算机无关,只能说明实体间的语义联系,解决实际应用问题时,通常先设计一个E-R模型,然后再转换成计算机能够接受的数据模型。
实体:矩形表示。
联系:菱形表示,用无向边连接有关实体。实体内部的联系、实体与实体之间的联系(两个不同实体之间的联系:1:1、1:n、m:n;两个以上不同实体集之间的联系:1:1:1、1:1:n、1:m:n、r:m:n;同一实体集内的二元联系)
属性:实体某方面的特征。椭圆表示,实体集中作为主码的一部分属性以下划线标明。分类:简单属性和复合属性、单值属性和多值属性、NULL属性、派生属性(派生属性可以从其他属性得来)。
E-R方法:概念模型中最常用的方法。其他构件:双边矩形表示弱实体集、双边菱形表示弱实体集对应的标识性联系、双椭圆标识多值属性、虚椭圆表示派生属性、双线表示一个实体全部参与到联系集中。
扩充的E-R模型:弱实体(一个实体的存在必须以另一个实体为前提)、特殊化(一个实体可以按照某些特征区分为几个子实体)、普遍化(将几个具有共同特征的实体集概括成一个更普遍的实体集)。
层次模型(Hierarchical Model)采用树型结构表示数据与数据间的联系。每一个结点表示一个记录类型(实体),记录之间的联系用结点之间的连线表示,并且根结点以外的其他结点有且仅有一个双亲结点。典型的层次模型系统:IMS系统(信息管理系统,IBM推出)。
特点:记录之间的联系通过指针实现,比较简单,查询效率高。
缺点:只能表示1:n联系,由于层次顺序严格、复杂,插入、删除操作的限制比较多,应用程序编制比较复杂。
表示多对多联系的方法:冗余结点法(两个实体的多对多联系转换为两个一对多联系,优点:结点清晰,允许结点改变存储位置;缺点:额外的存储空间,潜在的数据不一致性);虚拟结点分解法(将冗余结点转换为虚拟结点,优点:减少空间浪费、避免数据不一致性;缺点:改变存储位置可能引起虚拟结点中指针的修改)。
网状模型(Network Model,DBTG模型)采用网络结构表示数据与数据间联系。允许一个以上的结点无双亲,一个结点可以有多于一个的双亲。每个结点表示一个记录类型(实体),每个记录类型可以表示若干个字段(实体的属性),结点间的连线表示记录类型之间一对多的联系。
是层次模型的一个特例,不能表示记录之间的多对多联系,需要引入连接记录来表示多对多联系。
(我对于网状模型和层次模型之间的联系还是不是很了解,感觉讲得很抽象,有更好的了解方法的时候再更新)
优点:直接地描述显示时间,具有良好的性能,存取效率高。
缺点:结构复杂、
目前最常用的数据模型之一。采用表格结构表达实体集以及实体集之间的联系,最大的特色是描述的一致性。关系模型是由若干个关系模式组成的集合,一个关系模式相当于一个记录型,对于程序设计语言中类型定义的概念。关系是一个实例,也是一张表,对应于程序设计语言中变量的概念。
面向对象模型(Object Oriented Model)核心概念:对象和对象标识(OID)、封装(encapsulate)、对象的属性(object attribute)、类和类层次(class and class hierarchy)、继承(inherit)。
优点:更加丰富的表达能力。
缺点:模型相对复杂,实现起来较困难。
关系数据库
属性和域:属性是描述事物的特征,属性的域是每个属性的取值范围。在关系数据模型中所有的域应是原子数据。这种限制成为第一范式(first normal form,1NF)条件。存在非1NF的关系数据模型。
笛卡尔积与关系:笛卡尔积可以用二维表来表示,一个关系也可以用二维表来表示。
目或度、候选码、主码、主属性、非码属性、外码、全码。
关系的3种类型:基本关系(基本表/基表)、查询表、视图表(虚表)。
关系的描述成为关系模式(Relation Schema):R(U,D,dom,F),简记为R(U)或R(A1,A2,A3,...,An)。R表示关系名,U是组成该关系的属性名合集,D是属性的域,dom是属性向域的映像集合,F为属性间数据的依赖关系集合。
关系的完整性:实体完整性(Entity Integrity)、参照完整性(Referential Integrity)、用户定义完整性(User defined Integrity)。
关系操作的特点是操作对象和操作结构都是集合。
关系数据语言分为三类:关系代数语言、关系演算语言(包括元组关系演算语言如Aplha和Quel、域关系演算语言如QBE)、具有关系代数和关系演算双重特点的语言(如SQL)。其中关系代数语言、元祖关系演算和域关系演算是抽象查询语言。
关系代数运算
4类关系运算符:集合运算符(并∪、差-、交∩、笛卡尔积×)、专门的关系运算符(选择σ、投影π、连接▷◁(θ连接、等值连接、自然连接)、除÷)、算术比较符(大于>、大于等于≥、小于<、小于等于≤、等于=、不等于≠)、逻辑运算符(非¬、与∧、或∨)。
5种基本的关系代数运算:并、差、笛卡尔积、投影、选择。其他关系代数运算可以通过这5中基本关系代数运算导出。
扩展的关系代数运算:交、连接、除、广义投影、外连接(左外连接、右外连接、全外连接)
个人觉得这一块的运算和记忆都不是很容易,因为之前学了sql,所以有一些方法,但是不一定准确,在这里分享一下,等到之后完全掌握了之后若是发现有错误的话,会过来改正。
↑其实看书看到SQL的时候有讲明其对应关系。
① SELECT A.NAME FROM A WHERE A.ID='001'
→πA.NAME(σA.ID='001'(A))
关系数据库SQL语言(Structured Query Language)
关系数据库标准语言,功能:数据查询(SELECT)、数据操纵(INSERT、DELETE、UPDATE)、数据定义(CREATE、DROP、ALTER)、数据控制(GRANT、REVORK)。
特点:综合统一、高度非过程化、面向集合的操作方式、两种使用方式(自含式语言、嵌入式语言)、语言简洁易学易用。
支持数据库的三级结构模式:视图对应外模式、基本表对应模式、存储文件对应内模式。
基本组成:数据定义语言、交互式数据操纵语言、事务控制、嵌入式SQL和动态SQL、完整性、权限管理。
平时用SQL用得比较多,关于SQL的比较基本的语句就不赘述了,只抽取自己不是掌握得不是很好的部分做个笔记。
关于CREATE VIEW中的WITH CHECK OPTION: |
假设创建如下的VIEW: CREATE VIEW CS-STUDENT AS SELECT Sno,Sname,Sage,Ssex FROM Student WHERE SD='CS' WITH CHECK OPTION 则对CS-STUDENT进行操作时都会保证SD='CS' 如以下操作是错误的不会被执行: UPDATE CS-STUDENT SET SD='DB' WHERE Sno='3001' |
对于没有经过复杂处理的单表视图,修改视图时会修改原表 对于经过负责处理的单表视图或者多表视图,则需要分情况 |
SELECT | 投影运算 |
FROM | 笛卡尔积 |
WHERE | 选择谓词 |
5个预定义聚集函数:AVG、MIN、MAX、SUM、COUNT。
定义转义符:ESCAPE。 如LIKE 'ab\%ab%'ESCAPE'\' → 匹配的是以'ab%ab'开头的字符串。
关系数据库的规范化
函数依赖:函数依赖、非平凡的函数依赖、平凡的函数依赖、完全函数依赖、部分函数依赖、传递依赖、码、主属性和非主属性、外码、函数依赖的公理系统/Armstrong公理系统(自反律、增广律、传递率、合并规则、伪传递率、分解规则;参考资料https://baike.baidu.com/item/Armstrong公理)。
平凡的函数依赖 | 如:(id,name)->id、(id)->id是平凡的函数依赖 |
非平凡的函数依赖 | 如:(id)->name、(id)->sex是非平凡的函数依赖 |
完全函数依赖 | 如:SC(Sno,Cno,grade,Sage),对于(Sno,Cno)的任意真子集Sno或Cno,都不能决定grade,所以(Sno,Cno)→grade是完全函数依赖。只有当函数依赖的决定方是组合属性时,讨论部分函数依赖才有意义,当函数依赖的决定方是单属性时,只能是完全函数依赖。(cr: https://baike.baidu.com/item/部分函数依赖) |
部分函数依赖 | 如:SC(Sno,Cno,grade,Sage),对于(Sno,Cno)的真子集Sno,可以决定Sage,所以(Sno,Cno)->Sage是部分函数依赖。(cr: https://baike.baidu.com/item/部分函数依赖) |
规范化:1NF、2NF、3NF。1NF的级别最低。通过分解,可以将一个低一级范式的关系模式转换成若干个高一级范式的关系模式,这个过程称为规范化。对于非3NF的1NF、2NF,其性能弱,一般不宜作为数据库模式,要将其变换为3NF或更高级别的范式。
1NF | 关系模式R的每一个分量是不可再分的数据项 | 冗余度大、引起修改操作的不一致性、插入异常、删除异常 |
2NF | 每一个非主属性完全依赖于码 | 当1NF消除了非主属性对码的部分函数依赖 |
3NF | 产生冗余和异常的两个重要原因是部分函数依赖和传递函数依赖,因为3NF不存在非主属性对码的部分函数依赖和传递函数依赖,所以具有很好的性能。 | 当2NF消除了非主属性对码的传递函数依赖 |
分解:对一个给定的模式进行分解,是的分解后的模式是否与原来的 模式等价有3种情况:①分解具有无损连接性;②文杰要保持函数依赖;③分解既要无损连接性,又要保持函数依赖。
数据库的控制功能
SQL中事务定义的语句:BEGIN TRANSACTION、COMMIT、ROLLBACK。
事务的特性(事务的ACID性质):原子性atomicity、一致性consistency、隔离性isolation、持久性durability。
数据库的4类故障:事务内部故障、系统故障(软故障)、介质故障(硬故障)、计算机病毒。
数据库的备份和恢复:恢复的基本原理是建立数据冗余(重复存储)。建立冗余数据的方法和是进行数据转储(静态转储和动态转储、海量转储和增量转储)和登记日志文件。
恢复的3个步骤:①反向扫描文件日志,查找该事务的更新操作;②对事务的更新操作执行逆操作;③继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。
并发操作带来的三类问题:丢失修改、不可重复读、读脏数据。主要原因是事务的并发操作破坏了事务的隔离性。解决该问题可以从保证事务的隔离性入手。
并发控制技术:封锁(排它锁/X锁/写锁、共享锁/S锁/读锁)。三级封锁协议(一级封锁协议解决丢失修改、二级封锁协议解决丢失修改和不可重复读,三级封锁协议解决丢失修改和不可重复读和读脏数据)。
死锁:两个以上的事务分别请求封锁对方已经封锁的数据,导致了长时间等待而无法继续进行下去的现象。
并发调度的可串行性:可串行性是并发事务正确性的准则,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
两段封锁协议
封锁的粒度:封锁对象(可以是逻辑单元,也可以是物理单元)的大小。