数据库技术是应数据管理任务的需求而产生的,在应用需求的驱动下,在计算机硬件,软件发展的基础上,数据管理技术经历了人工管理,文件系统,数据库系统三个阶段。
一.人工管理阶段
在20世纪50年代中期以前,计算机主要用于科学计算。当时的硬件外存只有纸带,卡片,磁带,没有磁盘等直接存取的存储设备;而软件方面,没有操作系统,没有专门管理数据的软件;数据的处理方式是批处理。
人工管理阶段特点:
①数据不保存(当时计算机主要用于科学计算,一般不需要将数据进行长期保存)
②应用程序管理数据(数据需要由应用程序自己设计,说明和管理,没有相应的软件系统负责数据的管理工作。应用程序中不仅要规定数据的逻辑结构,而且要设计物理结构,包括存储结构,存取方法,输入方式等)
③数据不共享(数据是面向应用程序的,一组数据只能对应一个程序。当多个应用程序涉及某些相同的数据时必须各自定义,无法相互利用,参照,因此程序与程序之间有大量的冗余数据)
④数据不具有独立性(数据的逻辑结构或者物理结构发生变化后,必须对应用程序作相应的修改,数据完全依赖于应用程序,数据缺乏独立性)
应用程序与数据之间一一对应关系:
二.文件系统阶段
20世纪50年代后期到60年代中期,此时硬件方面有了发展,有了磁盘,磁鼓等直接存取存储设备。在软件方面,操作系统中已经有了专门的数据管理软件,一般称为文件系统。不仅有了批处理,还有了联机实时处理。
磁鼓是利用铝鼓筒表面涂覆的磁性材料来存储数据的。鼓筒旋转速度很高,因此存取速度快
文件管理系统管理数据特点:
①数据可以长期保存(计算机大量用于数据处理,数据需要长期保存在外存上反复进行查询,修改,插入和删除等操作)
②由文件系统管理数据(由专门的软件即文件系统进行数据管理,文件系统把数据组织成相互独立的数据文件,利用“按文件名访问,按记录进行存取”的管理技术,提供了对文件进行打开与关闭,对记录读取和写入等存取方式)
然而文件系统仍存在以下缺点:
①数据共享性差,冗余度大(在文件系统中,一个(或一组)文件基本上对应一个应用程序,即文件仍然是面向应用的。当不同的应用程序具有部分相同的数据时,也必须建立各自的文件,而不能共享相同的数据,因此数据冗余度大,浪费存储空间。同时,由于相同的数据重复存储,各自管理,容易造成数据的不一致性,给数据的修改和维护带来困难)
②数据独立性差(文件系统中的文件是为某一特定的应用服务的,文件的逻辑结构是针对具体的应用来设计和优化的,因此对文件中的数据再增加一些新的应用会很困难)
文件系统阶段的一一对应关系:
三.数据库系统阶段
20世纪60年代后期以来,计算机管理的对象规模越来越大,应用范围越来越广泛,数据量急剧增加,同时多种应用,多种语言互相覆盖的共享集合的要求越来越强烈。
在这种背景下,以文件系统作为数据管理手段已经不能满足应用的需求,为了解决多用户,多应用共享数据的要求,出现了统一管理数据的专门软件系统,数据库管理系统。
数据库系统的特点:
①数据结构化(数据库系统实现整体数据的结构化,在文件系统中,文件中的记录内部具有结构,但是记录的结构和记录之间的联系被固化在程序中。数据“整体”结构化是指数据库中的数据不再针对某一个应用,而是面向整个组织或企业)
②数据的共享性高,冗余度低且易扩充(由于数据是面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这使得数据库系统弹性大,易于扩充)
③数据独立性高(包括物理独立性(是指用户的应用程序与数据库中数据的物理存储是相互独立的)和逻辑独立性(是指用户的应用程序与数据库的逻辑结构是相互独立的))
④数据由数据库管理系统统一管理和控制
数据库系统阶段:
数据库是长期存储在计算机内有组织,大量,共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。数据库管理系统在数据库建立,运用和维护时对数据库进行统一的控制,以保证数据的安全性和完整性,并且在多用户同时使用数据库时进行并发控制,在发生故障后对数据库进行恢复。
数据管理三个阶段比较:
1、外模式
对应数据库的升级、外模式包括(子模式 用户模式) 用来描述用户看到或者使用那部分的数据的逻辑结构,用户根据外模式用户数据操作语句或者程序去操作数据库中的数据,外模式的主要特点用来描述组成用户视图各个记录的组成、相互联系、数据的完整性和安全性、数据项的特征等。
2、概念模式
对应数据库的概念模式,概念模式(概念、逻辑模式)用以描述整个数据库中的逻辑结构、用来描叙现实生活中的实体,以及它们之间的关系、从而定义记录数据项的完整性约束条件以及记录之间的联系是数据项的框架
概念模式是数据库中全体数据的逻辑结构和特征的描叙是所有用户数据的公共数据视图。
3、内模式
内模式对应物理级数据库,内模式是所有模式中的最低层的表示,不同于物理层,假设外存是一个无限性的地址空间,内模式是存储记录的类型,存储域以及表示以及存储记录的物理顺序,指示元索引,和存储路径的等数据的存储组织从而形成一个完整的系统。
结构图如下所示
一、层次数据模型
定义:层次数据模型是用树状<层次>结构来组织数据的数据模型。
其实层次数据模型就是的图形表示就是一个倒立生长的树,由基本数据结构中的树(或者二叉树)的定义可知,每棵树都有且仅有一个根节点,其余的节点都是非根节点。每个节点表示一个记录类型对应与实体的概念,记录类型的各个字段对应实体的各个属性。各个记录类型及其字段都必须记录。
特征:树的性质决定了树状数据模型的特征
1. 整个模型中有且仅有一个节点没有父节点,其余的节点必须有且仅有一个父节点,但是所有的节点都可以不存在子节点;
2. 所有的子节点不能脱离父节点而单独存在,也就是说如果要删除父节点,那么父节点下面的所有子节点都要同时删除,但是可以单独删除一些叶子节点;
3. 每个记录类型有且仅有一条从父节点通向自身的路径;
实例:
如图1,以学校某个系的组织结构为例,说明层次数据模型的结构。
1. 记录类型系是根节点,其属性为系编号和系名;
2. 记录类型教研室和学生分别构成了记录类型系的子节点,教研室的属性有教研室编号和教研室姓名,学生的属性分别是学号、姓名和成绩;
3. 记录类型教师是教研室这一实体的子节点,其属性由教师的编号,教师的姓名,教师的研究方向。
优点:
1. 层次数据模型的结构简单、清晰、明朗,很容易看到各个实体之间的联系;
2. 操作层次数据类型的数据库语句比较简单,只需要几条语句就可以完成数据库的操作;(百度百科)
3. 查询效率较高,在层次数据模型中,节点的有向边表示了节点之间的联系,在DBMS中如果有向边借助指针实现,那么依据路径很容易找到待查的记录;
4. 层次数据模型提供了较好的数据完整性支持,正如上所说,如果要删除父节点,那么其下的所有子节点都要同时删除;如图1,如果想要删除教研室,则其下的所有教师都要删除;
缺点:
1.结构呆板,缺乏灵活性。
2. 层次数据模型只能表示实体之间的1:n的关系,不能表示m:n的复杂关系,因此现实世界中的很多模型不能通过该模型方便的表示;
3.查询节点的时候必须知道其双亲节点的,因此限制了对数据库存取路径的控制。
二、网状数据模型
定义:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
其实,网状数据模型可以看做是放松层次数据模型的约束性的一种扩展。网状数据模型中所有的节点允许脱离父节点而存在,也就是说说在整个模型中允许存在两个或多个没有根节点的节点,同时也允许一个节点存在一个或者多个的父节点,成为一种网状的有向图。因此节点之间的对应关系不再是1:n,而是一种m:n的关系,从而克服了层次状数据模型的缺点。
特征:
1. 可以存在两个或者多个节点没有父节点;
2. 允许单个节点存在多于一个父节点;
网状数据模型中的,每个节点表示一个实体,节点之间的有向线段表示实体之间的联系。网状数据模型中需要为每个联系指定对应的名称。
实例:
同样是以教务管理系统为例,下面说明了院系的组成中,教师、学生、课程之间的关系。
图 2. 院系的教务管理系统
由上图中可以看出课程(实体)的父节点由专业、教研室、学生。以课程和学生之间的关系来说,他们是一种m:n的关系,也就是说一个学生能够选修多门课程,一门课程也可以被多个学生同时选修。
优点:
1. 网状数据模型可以很方便的表示现实世界中的很多复杂的关系;
2. 修改网状数据模型时,没有层次状数据模型的那么多的严格限制,可以删除一个节点的父节点而依旧保留该节点;也允许插入一个没有任何父节点的节点,这样的插入在层次状数据模型中是不被允许的,除非是首先插入的是根节点;
3. 实体之间的关系在底层中可以借由指针指针实现,因此在这种数据库中的执行操作的效率较高;
缺点:
1. 网状数据模型的结构复杂,使用不易,随着应用环境的扩大,数据结构越来越复杂,数据的插入、删除牵动的相关数据太多,不利于数据库的维护和重建。
2. 网状数据模型数据之间的彼此关联比较大,该模型其实一种导航式的数据模型结构,不仅要说明要对数据做些什么,还说明操作的记录的路径;
三、关系型数据模型
关系型数据模型对应的数据库自然就是关系型数据库了,这是目前应用最多的数据库。
定义:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
关系型数据库是目前最流行的数据库,同时也是被普遍使用的数据库,如MySQL就是一种流行的数据库。支持关系数据模型的数据库管理系统称为关系型数据库管理系统。
特征:
1. 关系数据模型中,无论是是实体、还是实体之间的联系都是被映射成统一的关系---一张二维表,在关系模型中,操作的对象和结果都是一张二维表;
2. 关系型数据库可用于表示实体之间的多对多的关系,只是此时要借助第三个关系---表,来实现多对多的关系,如下例子中的学生选课系统中学生和课程之间表现出一种多对多的关系,那么需要借助第三个表,也就是选课表将二者联系起来;
3. 关系必须是规范化的关系,即每个属性是不可分割的实体,不允许表中表的存在;
实例:
下面以学生选课系统为例进行说明。学生选课系统的实体包括:学生、教师、课程;其联系一般为学生与课程之间是一种多对多的关系,教师与课程之间是多对多的关系。学生可以同时选择多门课程,一门课程也可以同时被多个学生同时选择;一位教师可以教授多门课程,一门可能可以由多个教师教授。因此他们之间的联系如下:
图 3 学生选课系统示意图
将该图映射为关系数据模型中的表格为图4。从中可以看到学生与课程之间的联系以及教师和课程之间的多对多联系都被映射成了表格。其中选课表中的sut_id和cour_id分别是引用学生表和课程表的cour_id的外键;教课表也是如此。
图 4 关系数据模型的表格
优点:
1. 结构简单,关系数据模型是一些表格的框架,实体的属性是表格中列的条目,实体之间的关系也是通过表格的公共属性表示,结构简单明了;
2. 关系数据模型中的存取路径对用户而言是完全隐蔽的,是程序和数据具有高度的独立性,其数据语言的非过程化程度较高;
3. 操作方便,在关系数据模型中操作的基本对象是集合而不是某一个元祖;
4. 有坚实的数学理论做基础,包括逻辑计算、数学计算等;
缺点:
1. 查询效率低,关系数据模型提供了较高的数据独立性和非过程化的查询功能(查询的时候只需指明数据存在的表和需要的数据所在的列,不用指明具体的查找路径),因此加大了系统的负担;
2. 由于查询效率较低,因此需要数据库管理系统对查询进行优化,加大了DBMS的负担;
关系数据模型的三种约束完整性:
关系数据模型定义了三种约束完整性:实体完整性、参照完整性以及用户定义完整性。
实体完整性:实体完整性是指实体的主属性不能取空值。实体完整性规则规定实体的所有主属性都不能为空。实体完整性针对基本关系而言的,一个基本关系对应着现实世界中的一个主题,例如上例中的学生表对应着学生这个实体。现实世界中的实体是可以区分的,他们具有某种唯一性标志,这种标志在关系模型中称之为主码,主码的属性也就是主属性不能为空。
参照完整性:在关系数据库中主要是值得外键参照的完整性。若A关系中的某个或者某些属性参照B或其他几个关系中的属性,那么在关系A中该属性要么为空,要么必须出现B或者其他的关系的对应属性中。如上表中的选课关系的stu_id和cour_id分别是参考学生和课程的外键,那么对于现实的系统而言,stu_id和cour_id必须分别出现在学生和课程关系中,这就是外键参考的完整性,同时删除的时候根据设置的不同有不同的处理方式。
用户定义完整性:用户定义完整性是针对某一个具体关系的约束条件。它反映的某一个具体应用所对应的数据必须满足一定的约束条件。例如,某些属性必须取唯一值,某些值的范围为0-100等。