《1》数据库系统(Database System,DBS) 由一个相互关联的数据的集合和一组用以访问这些数据的程序组成;这个数据集合通常被称作数据库(Database);
DBS的主要目标是提供一种可以方便、高效地存取数据库信息的途径;
《2》设计数据库的目的是为了管理大量信息;
对数据库的管理既涉及信息存储结构的定义,又涉及信息操作机制的提供;
此外数据库系统还必须提供所存储信息的安全性保证,即使在系统崩溃或有人企图越权访问时也应保证信息的安全性;
如果数据将被多用户共享,那么系统还必须设法避免可能产生的异常结果;
《3》在早期,很少有人直接和数据库打交道,而是间接的和数据库打交道,如:打印报表(如信用卡的对账单)或者通过代理(银行的出纳员和机票预定代理等)与数据库打交道;
自动存取款机的出现,使用户可以直接和数据库进行交互;
计算机的电话界面(交互式语音互答系统)也使得用户可以直接和数据库进行交互,呼叫者可以通过拨号和按电话键来输入信息或选择可选项;
20实际90年代末的互联网革命急剧的增加了用户对数据库的直接访问;很多组织将他们的访问数据库的电话页面改为web页面,并提供了大量的在线服务和信息;如,当你访问一家在线书店,浏览一本书或一个音乐集时,其实就是在访问某个数据库的数据;
尽管用户界面隐藏了访问数据库的细节,大多数人甚至没有意识到他们正在和一个数据库打交道,然而访问数据库已经成为当今几乎每个人生活中必不可少的组成部分;
《4》数据库系统作为商业数据计算机化管理的早期方法而产生的;
早期存储在文件处理系统(file-processing system)
文件处理系统中存储组织信息的主要弊端:
① 数据的冗余和不一致(data redundancy and inconsistency)
由于文件和程序是很长的一段时间内由不同的程序员创建的,不同文件可能有不同的结构,不同程序可能采用不同的程序设计语言写成。此外,相同的信息可能在几个地方(文件)重复存储;
这种冗余除了导致存储和访问开销增大以外,还可能导致数据不一致性(data inconsistency),即同一数据的不同副本不一致;
② 数据访问困难(difficult in accessing data)
传统的文件处理环境不支持一种方便而高效的方式去获取所需数据;
如:假设大学的某个办事人员需要找出居住在某个特定邮政编码的所有学生的姓名,由于原始系统的设计者未预料到有这样的需求,因此没有现成的应用程序去满足这个需求;
③ 数据孤立(data isolation)
由于分散在不同文件中,这些文件又可能具有不同的格式,因此,编写新的应用程序来检索适当数据是很困难的;
④ 完整性问题(integrity problem)
数据库中所存储的数据的值必须满足某些特定的一致性约束(consistency constraint);
如:大学为每个系维护一个账户,并且记录各个账户的余额,要求每个系的账户余额永远不能低于零,开发这可以在不同应用程序中加入适当的代码来强制系统的这些约束,然而,当新的约束加入时,很难通过修改程序来体现这些新的约束,尤其是当约束涉及不同文件的多个数据项时,问题就变得更加复杂了;
⑤ 原子性问题(atomicity problem)
如同别的设备一样,计算机系统也会发生故障,一旦故障发生,数据就应恢复到故障发生以前的一致的状态,对于很多应用来说,这样的保证时至关重要的;
在传统的文件处理系统中,保持原子性是很难做到的;
⑥ 并发访问异常(concurrent- access anomaly)
为了提高系统的总体性能以及加快响应速度,很多系统允许多个用户同时更新数据。实际上,如今最大的互联网零售商每天就可能有来自购买者对其数据的数百万次访问;
在这样的环境中,并发的更新操作可能相互影响,有可能导致数据的不一致;
由于数据可能被多个不同的应用程序访问,这些程序相互间事先又没有协调,管理就很难了;
如:为保证注册一门课程的学生人数不超过上限,注册程序维护一个注册了某门课的学生人数;当一个学生注册时,该程序读入这门课程的当前计数值,核实该计数还没有到达上限,给计数值加1,将计数存回数据库;假设两个学生同时注册,而此时的计数值是39,尽管两个学生都成功地注册了这门课程,计数值应该是41,然而两个程序可能都读取到值39,然后都写回值40,导致不正确只增加了一个注册人数;此外,假设该课程的注册人数上限是40,在上面的例子里,两个学生都注册成功,就导致违反了40个学生为注册上限的规定;
⑦安全性问题(security problem)
并非数据库系统的所有用户都可以访问所有数据;
《5》数据库系统(Database System,DBS) 是一些相互关联的数据以及一组使得用户可以访问和修改这些数据的程序的集合;
数据库系统的一个主要目的是给用户提供数据的抽象视图,也就是说,系统隐藏关于数据存储和维护的某些细节;
一个可用的系统必须能高效地检索数据;这种高效的需求促使设计者在数据库中使用复杂的数据结构来表示数据;由于许多数据库系统的用户并未受过计算机专业训练,系统开发人员通过以下几个层次上的抽象来对用户屏蔽复杂性,以简化用户与系统交互:
①物理层(physical level)
最低层次的抽象,描述数据实际上怎么存储的;物理层详细描述复杂的底层数据结构;
② 逻辑层(logical level)
比物理层层次稍高的抽象,描述数据库中存储什么数据及这些数据间存在什么关系;
这样逻辑层就通过少量相对简单的结构描述了整个数据库;
虽然逻辑层的简单结构的实现可能涉及复杂的物理层结构,但逻辑层的用户不必知道这样的复杂性,这称之为物理数据独立性(physical data independence)
数据管理员使用抽象的逻辑层,他必须确定数据库中应该保存那些信息;
③视图层(view level)
最高层次的抽象,只描述整个数据库的某个部分;
尽管在逻辑层使用了比较简单的结构,但由于一个大型数据库中所存信息的多样性,仍存在一定程度的复杂性;
数据库系统的很多用户并不关系所有的信息,而是只需要访问数据库的一部分;
视图层抽象的定义正式为了使这样的用户和系统的交互更简单,系统可以为同一数据库提供多个视图;
通过程序设计语言中数据结构的概念进行类比,我们可以弄清个层抽象间的区别,大多数高级程序设计语言支持结构化的概念;
例如:
type instructor = record
ID : char (5);
name : char (20);
dept name : char (20);
salary : numeric (8,2);
end;
这段代码定义了一个具有四个字段的新纪录instructor,每个字段有一个字段名和所属类型;
对于一个大学来说,可能包括几个这样的记录类型:
• department, 包含字段 dept name, building, and budget
• course, 包含字段 course id, title, dept name, and credits
• student, 包含字段 ID, name, dept name, and tot cred
在物理层,一个instructor,department 或 student记录可能被描述为连续存储位置组成的存储块。编译器为程序设计人员屏蔽了这一层细节。与此类似,数据库系统为数据库程序设计人员屏蔽了许多底层的存储细节,而数据库管理员可能需要了解数据物理组织的某些细节;
在逻辑层,每个这样的记录通过类型定义进行描述,正如前面的代码段所示。在逻辑层上同时还要定义这些记录的相互关系。程序设计人员正是在这个抽象层次上使用某种程序设计语言进行工作。与此类似,数据库管理员常常在这个抽象层次上工作;
在视图层,计算机用户看见的是为其屏蔽了数据类型细节的一组应用程序。与此类似,视图层上定义了数据库的多个视图,数据库用户看到的是这些视图。除了屏蔽数据库的逻辑层细节以外,视图还提供了防止用户访问数据库的某些部分的安全性机制。
如:大学注册办公室的职员只能看见数据库中关于学生的那部分信息,而不能访问涉及教师工资的信息。
《6》示例和模式
特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance)。
而数据库的总体设计称作数据库模式(schema)。数据库模式即使发生变化,也不频繁。
数据库模式和实例的概念可以通过与程序设计语言写出的程序进行类比来理解。数据库模式对应于程序设计语言中的变量声明(以及与之关联的类型的定义)。每个变量在特定的时刻会又特定的值,程序中变量在某一时刻的值对应于书库模式的一个实例;
数据库系统可以分为几种不同的模式:
①物理模式(physical schema)在物理层描述数据库设计;
②逻辑模式(logical schema)在逻辑层描述数据库的设计;
③数据库在视图层也可以有几种模式,有时称为子模式(subschema),它描述了数据库的不同视图;
在这些模式中,因为程序员使用逻辑模式来构造数据库应用程序,从其对应用程序的效果来看,逻辑模式是目前最重要的一种模式;
物理模式隐藏在逻辑模式下,并且通常可以在应用程序中丝毫不受影响的情况下被轻易的修改;
应用程序如果不依赖物理模式,它们就称为是具有物理数据独立性(physical data independence),因此即使物理模式改变了它们也无需重写;
《7》数据模型
数据库结构的基础是数据模型(data model)
数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合;
数据模型提供了一种描述物理层、逻辑层以及视图层数据库设计的方式;
数据模型可以被划分为四类:
① 关系模型(relation model):
关系模型用表的集合来表示数据和数据间的联系;
每个表有多个列,每列有唯一的列名;
关系模型是基于记录的模型的一种,基于记录的模型的名称的由来是因为数据库是由若干种固定格式的记录构成;
每个表包含某种特定类型的