欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库系统概念笔记(一)

程序员文章站 2022-06-27 11:52:52
...

第一章 引言

数据库管理系统(DataBase-Management System,DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库(database)。

​ DBMS的主要目标是提供一种可以方便、高效地存取数据库信息的途径。

​ 设计数据库系统的母的是为了管理大量信息。此外,数据库还必须提供所存储信息的安全性保证,即使在系统崩溃或有人企图越权访问时也应保障信息的安全性。

​ 如果数据被多用户共享,系统还必须设法避免可能产生的异常结果。

1.1 数据库系统的应用

1.2 数据库系统的目标

​ 在数据库之前,普遍采用文件处理系统(file-processing system)来永久记录数据。其具有以下弊端:

  • 数据的冗余和不一致(data redundancy and inconsistency):由于文件和程序是在很长的一段时间内由不同程序员创建,不同文件可能有不同结构,不同程序可能采用了不同的程序设计怨言。同时相同信息可能在多个文件或位置重复存储,这种冗余会导致存储和访问开销增大,且可能造成数据不一致性(data inconsistency),也就是统一数据的不同副本不一致。
  • 数据访问困难(difficulty in accessing data):传统文件处理环境不支持以一种方便而高效的方式去获取所需的数据。
  • 数据孤立(data isolation):数据分散在不同文件中,这些文件可能具有不同的格式,因此编写新的应用程序来检索适当数据时很困难的。
  • 完整性问题(integrity problem):数据库中所存储数据值必须满足某些特定的一致性约束(consistency constraint)。例如,人的年龄不应该为负数,文件处理系统很难实现约束的管理。
  • 原子性问题(atomicity ploblem):当计算机发生故障,数据应该被恢复到故障发生以前的一致的状态。
  • 并发访问异常(concurrent-access anornaly):为了提高系统的总体性能以及加快响应速度,许多系统允许多个用户同时更新数据。同时并发对数据操作,会相互影响,可能会产生数据异常的情况。
  • 安全性问题(security problem):并非数据库系统的所有用户都可以访问所有数据。

1.3 数据视图

​ 数据库系统是一些互相关联的数据以及一组使得用户可以访问和修改这些数据的程序的集合。数据库系统的一个主要目的是给用户提供数据的抽象视图,也就是说,系统隐藏关于数据存储和维护的某些细节。

1.3.1 数据抽象

​ 一个可用的系统必须能高效的检索数据。抽象的目的在于简化用户与系统的交互,具有已下抽象层次:

  • 物理层(physical level):最低层次的抽象,描述数据实际上是怎样存储的。物理层详细描述复杂的底层数据结构。
  • 逻辑层(logical level):比物理层层次稍高的抽象,描述数据库中存储什么数据及这些数据间存在什么关系。
  • 视图层(view level):最高层次的抽象,只描述整个数据库的某个部分。

1.3.2 实例和模式

  • 实例(instance):特定时刻存储在数据库中的信息的集合
  • 模式(schema):数据库的总体设计。
    • 物理模式(physical schema):物理层描述数据库的设计
    • 逻辑模式(logical schema):在逻辑层描述数据库的设计。

​ 应用程序如果不依赖与物理模式,它们就被称为是具有物理数据独立性(physical data independence),因此即使是物理模式改变了它们也无需重写。

1.3.3 数据模型

​ 数据库的基础就是数据模型(data model)。数据模型是一个描述数据、数据联系、数据予以以及一致性约束的概念工具的集合。数据模型提供了一种物理层、逻辑层以及视图层数据库设计的方式。

​ 数据模型被分为四类:

  • 关系模型(relational model):关系模型用表的集合来表示数据和数据之间的联系。
  • 实体-联系模型(entity-relationship model):实体-联系(E-R)数据模型基于对现实世界的认识:现实世界是由一组称为实体的基本对象以及这些对象之间的联系构成。实体是显式世界中可区别于其他对象的意见“事情”或一个“物体”。实体-联系模型被广泛用于数据库设计。
  • 基于对象的数据模型(object-based data model):面向对象的程序设计已经成为占主导地位的软件开发方法。这导致面向对象数据模型的发展,面向对象的数据模型可以堪称是E-R模型增加了封装、方法(函数)和对象标识等概念后的扩展。对象-关系数据模型结合了面向对象的数据模型和关系数据模型的特征。
  • 半结构化数据模型(semistructured data model):半结构化数据模型允许那些相同类型的数据项含有不同的属性集的数据定义。这和早先提到的数据模型形成了对比:在那些数据模型中所魔种特定类型数据项必须有相同的属性集。可扩展标记语言(eXtensible Markup Language,XML)被广泛地用来表示半结构化数据。

​ 网状数据模型(network data model)和层次数据模型(hierarchical data model)先于关系数据模型出现。这些模型和底层的实现联系很紧密,并且使数据建模复杂化。因此,除了某些地方仍然在使用的就数据库之外,如今它们呢已经很少被使用了。

1.4 数据库语言

​ 数据库系统提供数据定义语言(data-definition language)来定义数据库模式,以及数据操纵语言(data-manipulation language)来表达数据库的查询和更新。数据定义和数据操纵并不是两种分离的语言,一同构成了单一的数据库语言(SQL)的不同部分。

1.4.1 数据操纵语言

​ 数据操纵语言(Data-Manipulation Language,DML)能够使得用户可以访问或操纵那些按照某种适当的数据模型组织起来的数据。由以下访问类型:

  • 对存储在数据库中的信息进行检索。
  • 向数据库插入新的信息。
  • 从数据库中删除信息。
  • 修改数据库中存储的信息。

​ 通常由两类基本的数据操纵语言:

  • 过程化DML(procedural DML):要求用户指定需要什么数据以及如何获得这些数据。
  • 声明式DML(declarative DML)(也称非过程化DML):要求用户指定需要什么数据,而不指明如何获得这些数据。

查询(query)是要求对信息进行检索的语句。DML中涉及信息检索的部分称作查询语言(query language)。

1.4.2 数据定义语言

​ 数据模式是通过一系列定义来说明的,这些定义由一种称作数据定义语言(Data-Definition Language,DDL)的特殊语言来表达。DDL也可用于定义数据的其他特征

​ 数据库系统所使用的存储结构和访问方式是通过一系列特殊的DDL语句来说明的,这种特殊的DDL称作数据存储和定义(data storage and definition)语言。这些语句定义了数据库模式的实现细节,而这些细节对用户来说是不可见的。

​ 存储在数据库中的数据值必须满足某些一致性约束(consistency constraint)。DDL语言提供了这种约束的工具。每当数据库被更新时,数据库系统都会检查这些约束。通常约束检查约束的代价比较高。数据库提供了实现可以以最小代价测试的完整性约束。

  • 域约束(domain constraint):每个属性都必须对应于一个所有可能的取值构成的域(整数、字符、日期等),必须响应的取值。
  • 完整性参照(referential integrity):当希望一个关系中给定属性值的取值也在另一关系的某一属性集的取值中出现(参照完整性)。数据库的修改会导致参照完整性的破坏。当参照i完整性约束被违反时,通常的处理是拒绝执行导致完整性被破坏的操作。
  • 断言(assertion):一个断言就是数据库需要时刻满足的某一条件。域约束和参照完整性约束是断言的特殊形式。断言创建以后,系统会检测其有效性。如果断言有效,则以后只有不破脚踝断言的数据库更新才被允许。
  • 授权(authorization):当需要对用户进行区分,对于不同的用户在数据库中的不同数据值上允许不同的访问类型。这些区别以授权来表达,最常见有:读权限(read authorization);插入权限(insert authorization),允许插入新数据,但不允许修改已有数据;更新权限(update authorization),允许修改,但不允许删除;删除权限(delete authorization):允许删除数据。

1.5 关系数据库

​ 关系数据库基于关系模型,使用一系列表来表达数据以及数据之间得联系。关系数据库也包括了DML和DDL。

1.5.1 表

​ 每个表有多个列,每个列有唯一的名字。

​ 关系模型是基于记录模型的一个实例

1.5.2 数据操纵语言

​ SQL查询语句是非过程化的。它以几个表作为输入(也可以是一个),总是近返回一个表。下面有一个SQL查询示例:

select instructor.name
from instructor
where instructor.dept_name = 'History';

1.5.3 数据定义语言

​ SQL提供了一个丰富的DDL语言,通过它,可以定义表、完整性约束、断言,等等。下面为DDL语句示例:

create table department
( dept_name char(20),
  building  char(15),
 budget  numeric(12,2)
);

1.5.4 来自应用程序的数据库访问

​ SQL不支持诸如获取用户输入、输出到显示器,或者通过网络通信这样的动作。这些计算和动作必须用一种宿主语言来写,如C、C++或Java。应用程序在这里是指以这种方式和数据库进行交互的程序。

​ 为了访问数据库 ,DML语句需要由宿主语言来执行。有以下两种途径可以做到这一点

  • 一种是通过提供应用程序接口(过程集),它可以用来将DML和DDL的语句发送给数据库,再取回结果。与C语言一起使用的开放数据库连接(ODBC)标准,是一种常用的应用程序接口标准。Java数据库连接(JDBC)标准为Java语言提供了相应的特性。
  • 另一种是通过扩展宿主语言的语法,在宿主语言的程序中嵌入DML调用。通常用一个特殊字符作为DML调用的开始,并且通过预处理器,称为DML与编译器(DML precompiler),来将DML语句转变成属猪语言中的过程调用。

1.6 数据库设计

​ 数据库是被用来管理大量信息。数据库设计的主要内容是数据库模式的设计。

1.6.1 设计过程

​ 高层的数据模型为数据库设计者提供了一个概念框架,去说明数据库用户的数据需求,以及将怎样构造数据库结构以满足这些需求。所以在数据库设计的初始阶段就是全面刻画预期的数据库用户的数据需求。该阶段的成果是制定出用户需求的规格文档。

​ 接下来,设计者选择一个数据模型,并运用该选定的数据模型概念,将那些需求转换成一个数据库的概念模式。在这个概念设计(conceptual-design)阶段开发出来的模式提供了企业的详细概述。设计者再复审这个模式,确保所有的数据需求都满足并且相互之间没有冲突,再检查过程中设计者也可以去掉一些冗余的特性。这一阶段的重点是描述数据和它们呢之间的联系,而不是指定物理的存储细节。

​ 从关系模型的角度看,概念设计阶段涉及决定数据库中应该包括那些属性,以及如何将这些属性组织到多个表中。关于将属性组织到多个表主要通过两种方式:

  • 实体-联系模型
  • 引入一套算法(通称为规范化),这套算法将所有属性作为输入,生成一组关系表。

​ 一个开发完全的概念模式还将指出企业的功能需求。在功能需求说明(specification of functional requirement)中,用户描述数据之上的各种操作(或事务),比如更新数据、检索特定的数据、删除数据等。在概念设计的这个阶段,设计者可以对模式进行复审,确保它满足功能需求。

​ 接着,在逻辑设计阶段,设计者将高层的概念模式映射到要使用的数据库系统的实现数据模型上;

​ 然后设计者将得到的特定于系统的数据库模式用到物理设计阶段(physical-design phrase)中,在这个阶段中指定数据库的物理特性,这些特性包括文件组织结构形式以及内部的存储结构。

1.6.2 大学机构的数据库设计

1.6.3 实体-联系模型

​ 实体-联系(E-R)数据模型使用一组称为实体的基本对象,以及这些对象间的联系。实体是现实世界中可区别于其他对象的一件“事物”或一个“物体”。

​ 数据库中实体通过属性(attribute)集合来描述。

​ 联系(relationship)是几个实体之间的关联。同一类型的所有实体的集合称作实体集(entity set),同一类型的所有联系的集合称作联系集合(relationship set)。

​ 数据库的总体逻辑结构(模式)可以用实体-联系图(entity-relationship diagram,E-R图)进行图形化表示。有几种话这样的图。最常用的是采用统一建模语言(Unified Modeling Language,UML)。

  • 实体集采用矩形框表示,实体名在头部,属性名列在下面。
  • 联系集用连接一对相关的实体集的菱形表示,联系名放在菱形内部。

​ 除了实体和联系外,E-R模型还描述了数据库必须遵守的对其内容的某些约束。一个重要的约束是映射基数(mapping cardinality),它通过某个联系集能于一实体进行关联的实体数目。

1.6.4 规范化

​ 设计关系数据库所用到的另一种方法是通常被称为规范化的过程。其目标是生成一个关系模式集合,使我们存储信息时没有不必要的冗余,同时又能很轻易地检索数据。这种方法是设计一种符合适当的范式(normal form)的模式,

相关标签: 数据库 mysql