数据库笔记
2017-11-22 本文已影响0人
狼牙战士
一、数据库相关的一些基础概念
- 数据库系统主要特点:数据结构化;数据共享性好,冗余度小;数据独立性好;数据有DBMS统一管理和控制,从而保证多个用户能并发、安全、可靠地访问,而一旦出现故障,也能有效回复。
- 数据模型: 数据模型是人们对现实世界的数据特征的抽象。数据模型应满足三个要求:真实性、易理解、易实现。数据模型由三部分组成,称为三要素:数据结构、数据操作、完整性约束。
- 关系模型和关系数据库系统: 数据以关系的形式,也就是二维表的形式来表示,其数据模型就是关系模型。以关系模型为基础的数据库系统就是关系数据库系统。
- 数据库管理系统: DBMS是数据库系统核心,用户开发的数据库系统都是建立在特定的DBMS之上。DBMS的主要组成部分是:查询处理程序、事物管理程序和存储管理程序。
- 查询处理程序: 查询处理程序的一个重要任务是“优化”查询,即为给定的查询找出好的解答算法。
- 事务管理程序: 事务是数据库的基本工作单元。事务具有ACID特性,即原子性,一致性,隔离性和持久性。事务管理程序的作用就是保证多个事务并发执行。
- 存储管理程序: 存储管理程序既管理磁盘存储器上的数据文件,又管理存放数据文件部分内容的内存缓冲区。
- 客户程序/服务程序体系结构: 数据库管理系统通常支持客户程序/服务程序体系结构,DBMS的核心部分都属于服务程序,而客户程序则负责用户接口。
问题:如何让事务具有原子性、一致性、隔离性、持久性?
答:(1)加锁。对事务要访问的数据项加锁,其他的事务就不能访问它,直到该数据项解锁为止。(2)日志文件。事务管理程序记录了一个日志文件,包括事务的开始,引起的数据库的更新和每个事务的结束。日志文件存储在非易失性存储器上,即使掉电,日志也能完好保存。(3)事务提交。事务一般以“试验”的方式完成,在试验过程中,计算对数据库要做的更新,并不更新数据库本身,在事务提交之前,先把更新的内容复制到日志文件中,然后再把更新的内容写入到数据库。发生故障后,通过查看日志文件,就可以恢复系统。
二、数据库建模
- 数据库建模: 在设计数据库时,对现实世界进行分析、抽象,并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。数据库建模主要包括两部分内容:确定最基本的数据结构;对约束建模。
- 对象定义语言(object definition language,ODL): 通过给出类的属性、联系和方法来描述面向对象的模型。属性用数据类型来描述。常用的数据类型包括整型、字符串、枚举型以及结构、集合、数组、包和列表等形式的结构类型。其中集合、数组、包和列表又统称为聚集类型。联系用预制相连的类来描述。联系有单指联系和多值联系之分。
- 实体-联系模型(E-R图): 用形象化的形式来描述数据类型。在E-R图中,描述实体集之间的联系。E-R图中的实体集相当于ODL中的类,而属性和联系用词都一样,本质上是一致的。实体集的成员称为实体,相当于类的对象。
- 联系的三种类型: 二元联系可以分为一对一、一对多(或多对一)和多对多这三种不同的类型。在E-R图中允许有三个或三个以上实体集之间的联系,而ODL中只允许两个类之间的联系。当然,E-R图中的三元联系可方便的转换为三个二元联系。
- 设计原则: 为了有效地设计数据库,需要选择合适的表示法,合理的确定元素类型,简单清晰而又真实的反映现实世界,而且要避免冗余,当然,有时为了提高效率,可能只是要求减少不必要的冗余。
- 子类: 从一个类中取出具有某些附加特性的对象组成一个附属的类,称为子类。子类除了具有原有类的特性以外,还具有自己附加的特性-属性和联系。用这种类与子类的层次关系往往能更好地反应现实世界的层次结构。ODL和E-R图都支持这种层次结构。
- 对约束建模: 反映客观世界的各种数据,一般都不是孤立的,往往有着错综复杂的内在联系,而且对其取值也有一定的限制和要求,要使所建立的数据库准确、全面地反映现实世界,就要对这些内容进行说明、加以规范,这就是对约束建模。对约束建模是数据库建模的重要组成部分。对约束建模最重要的两部分是:说明某个属性或属性集构成键码;说明实体集之间的引用完整性约束。
- 键码: 在类的范围内唯一标识一个对象,或者在实体集范围内唯一标识一个实体,或者在一个关系范围内唯一标识一个元组的属性或属性集称为键码。由于键码的唯一性,决定了键码是单值约束的一个主要来源。在建立数据库时,一个实体的键码属性值不能为空,这就是实体完整性。当有多个键码时,通常选一个作为主键码,其余为次键码或候选键码。
- 引用完整性: 一个实体中某个特定属性的取值,如果不是空值,则只能引用另一个实体确实存在的键码属性的值,而不能引用该键码属性取值之外的任何值,两个实体之间的这种联系就称为引用完整性。它反映了现实世界中实体集之间存在的内在联系。有了引用完整性约束就可保证数据库中实体之间相关数据的一致性。
三、关系模式和关系运算
- 关系模型: 用称为关系的二维表来表示数据,其数据模型就称为关系模型。二维表的行称为元组,列以属性开头,对于每个属性,都有元组的一个分量与之对应。
- 模式与实例: 关系的名称和属性集总称为关系的模式。关系模式的集合称为关系数据库模式。一个关系或关系集合所对应的特定数据称为该关系模式或该数据库模式的实例。
- 实体集与联系转换为关系: 实体集可直接转换为关系,实体集的每个属性都对应于关系中的一个属性。E-R图中的联系转换为关系时,其属性由两部分组成:与该联系有关的每个实体集的键码属性;该联系本身的属性。
- 子类结构到关系的转换: 一种方法是为每个子类建立一个关系,而关系中含有子类及其超类的所有特性;另一种方法是,把子类结构划分为基本类和派生类(子类或通过属于联系扩展的实体集),用基本关系对应于基本类,而为每个派生类建立特定的关系,其中只包含基本类的键码属性和该派生类的特有属性。
- 关系代数: 是以代数的形式对关系模型进行查询的一种语言。其主要运算有并、交、差、选择、投影、笛卡尔积、自然连接、改名。综合使用这些运算可以表达各种各样的查询要求。
- 关系演算: 把数理逻辑中的谓词演算应用到关系中,就是所谓的关系演算。在关系演算中,以元组为变量称为元组关系演算,而以域为变量,则称为域关系演算。关系代数中的8种运算都可用元组关系演算表达式来表达。用关系演算表达查询时,还常用到存在量词和全称量词。
- 关系逻辑: 是以逻辑的形式对关系模型进行查询的一种语言,具体用的查询语言称为数据逻辑。在数据逻辑中,用规则来表达查询。对规则主要由称为头部的关系原子和含有一个或多个原子的体组成。体中的原子称为字目标,既可以是关系原子,也可以是算术原子。
四、SQL
- 结构化查询语言SQL: SQL是关系数据库系统最主要的查询语言。SQL集成了数据查询、数据操作、数据定义和数据控制等功能。
- 基本查询语句: SQL查询最基本的形式为SELECT-FROM-WHERE。其中,FROM子句给出要查询的关系;SELECT子句给出查询结果中所要的属性;WHERE字句给出查询的条件。WHERE子句虽然是可有可无的,但却因查询条件千差万别而变化万千。因此,WHERE子句成为掌握SQL查询语句的关键和难点。
- SQL查询中子句的顺序: 在SQL的SELECT-FROM-WHERE查询语句中,除这3种子句以外,还有另外3种:GROUP BY、HAVING 和 ORDER BY。6种子句中只有前2是必须的,其他附加的子句,如果需要,必须按上面列出的顺序出现。
- 连接查询: 对涉及两个或两个以上的关系进行查询,最基本的方法是采用连接查询。其查询语句把关系代数中的自然连接、选择和投影简单的融合在一起。
- 嵌套查询: 把SELECT-FROM-WHERE查询作为子查询用于另一个查询的WHERE子句中,称为嵌套查询。可把运算符EXISTS、IN、ALL和ANY用于子查询的结果关系来表示布尔值条件;若对表达式求反,可在适当位置加上NOT。如果能确信子查询的结果为单值,就可以在外层查询的WHERE子句中直接用比较运算符。
- SQL的关系模型: SQL实际上把关系看作是元组的包(允许有完全相同的元组),而不是元组的集合(不允许有完全相同的元组)。如果要求结果的关系为集合,则需另加关键字DISTINCT以删除重复的元组。
- 集合查询: 当两个查询生成具有相同属性集的关系时,可用关键字UNION、INTERSECT和EXCEPT进行关系代数中的集合运算:并、交、差,从而实现对多个关系的查询。用上述三种运算符将自动删除重复元组,若想保留重复元组,则需在运算符后加上关键字ALL。
- 聚合: 对关系中某一列的值可以用关键字SUM、AVG、MIN、MAX或COUNT加以汇总,这五种处理统称为聚合。可在聚合之前用关键字GROUP BY对元组进行分组,从而得到各分组的汇总数据。还可以在分组的基础上用关键字HAVING给出选择条件,从而取出具有给定条件的分组。
- 数据更新: SQL中的数据更新可利用关键字INSERT、DELETE、UPDATE来实现。更新语句既可处理单一元组,也可处理一批元组。
- 数据定义: 对数据库模式中的各个元素进行说明称为数据定义。SQL的数据定义包括定义和撤销模式、表、视图、索引等内容。其中,最基本的语句是CREATE TABLE,用于定义关系模式,指定其属性和类型,规定各种约束。此外,还可用ALTER语句更改模式,比如,在关系模式中增加或删除属性;或者用DROP与家具完全撤销关系或视图。
- 视图: 由已有的关系定义的、并不实际存在而只是逻辑上的关系称为视图。视图的定义以子查询为基础,这正体现了视图是由已有的关系构造而成。对视图可以像对关系一样进行查询,只是具体的执行过程有所不同。