1 数据库基本概念
1.1数据库和数据库管理系统
Q:数据库和数据库管理系统是啥
数据库管理系统:由一个互相关联的数据的集合和一组用以访问这些数据的程序组成,这个数据集合一般叫做数据库
。
数据库管理系统(Database Management System,简称DBMS)是一种操纵和管理数据库的大型软件
,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。它可以支持多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分DBMS提供数据定义语言(Data Definition Language,DDL)和数据操作语言(Data Manipulation Language,DML),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
数据库:数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
从数据库管理系统的定义可知,数据库是数据库管理系统的子集
。
<br/>
1.2 数据库系统和文件系统
Q:设计数据库系统的目的是为了管理
大量信息。那为什么我们有文件系统了,可以放数据了,为啥还要用到数据库呢?
在早期的计算机中,保存信息的方法是将它们保存在操作系统文件中。为了使用户可以对信息进行操作,系统中应该有一些对文件进行操作的应用程序。这个谈到的应用程序不是我们说的QQ啊,网易云啊这种程序,而是针对某种功能设计的特殊程序。比如大学学生管理系统中增加新的学生、教师和课程;为课程注册学生,并产生班级花名册。这些应用程序都是由系统程序员根据大学的需求编写的。
也就是说,当我们追求越完美的学生管理系统,所需要的文件和应用程序可能就越来越多。而这似乎有一些弊端。
<br/>
文件和数据库的区别(这里我们讲的是在应用开发上的区别)
其实文件和数据库我们都可以用来存数据,但是文件是操作系统提供的一个最简单最基本的一个存取数据的机制;在操作系统里,数据在文件里没有结构,而是一串平滑的字符流。对于数据管理,文件系统只提供了简单create,open,read,write,lseek等简单的操作,如果对数据管理有复杂的管理的话,文件系统是远远不够用的。
然而,使用数据库管理系统可以提高数据管理的能力,一些非常底层的操作DBMS都能帮你去做。
综上所述,文件系统明显地有下列5个缺点:
- 数据访问困难;编写应用程序很不方便。由于操作系统只提供打开、关闭、读、写等几个低级的文件操作系统,对文件的查询、修改等处理都必须在应用程序解决。
- 数据冗余不一致;文件的设计很难满足多种应用程序的不同要求,数据冗余往往是不可避免的 。相同的信息可能在几个地方重复存储,比如一个学生是学数学和音乐的,数学课的文件上面有他的名字和学号,音乐课上面也有;这样的话如果该学生学号改变,两个文件都要改,假如一个地方没改,就会造成
数据不一致
。
- 维护艰难;对文件结构的每个修改将导致应用程序的修改,应用程序的维护工作量很大。
- 并发访问异常;文件系统一般不支持对文件的并发访问。
- 数据孤立;由于数据缺少同一管理,在数据的结构、编码、表示格式、命名以及输出格式等方面不容易做到规范化、标准化;在数据的安全和保密方面,也难以采取有效的措施。
- 原子性问题;传统的文件处理系统中,保持原子性很难做到。比如两个发生银行的转账,两个账户的文件都要同时修改,也就是说,转账这个操作必须是原子的——要么不发生要么全发生,而这个是传统的文件系统很难做到的。
也就是说,我们使用数据库管理系统的优点即为文件系统的缺点。
数据库管理系统的好处
- 数据独立性和有效访问。
- 减少应用开发时间。
- 数据完整性和安全性。
- 对数据库的统一管理。
- 故障恢复。
<br/>
1.3 数据模型
在讲解这一部分之前,我们需要对几个概念有些许了解。
数据:就是描述现实世界的符号,它是信息存在的形式。
数据模型:数据模型就是来描述数据的一组概念和定义;也可以理解为数据结构,实际上就是描述现实世界的方法。
数据模式:用一个给定的数据模型对一个具体数据的描述。
实际上,如果学过数据结构,就可以很轻松地了解以上的概念。你也可以这么理解:数据模型相当于编程语言,比如C++,Java等,数据模式就是用对应的编程语言写出来的软件。
或者说,我受某个企业所托,用某种形式去描述它们企业内的数据。那么这句话中所谓的某种形式就是数据模型,数据模式就是我描述的结果。
目前数据库中主流的数据模型是关系数据模型,在数据库原理的课程中一般都是围绕关系数据模型作为讲解。数据模型可以分为以下四类:
关系模型
使用关系模型的数据库我们叫做`关系型数据库`。在上世纪七十年代,关系数据库已是主流。关系数据库的基本数据结构就是`关系`,换而言之就是一张特殊的二维表,这个表有行有列,其中的行我们称为元组,其中的列我们称为属性。 |
实体联系模型(E-R模型)
基于对象的数据模型
面向对象的程序设计已经目前称为主流的软件开发方法。这导致面向对象数据模型的发展,面向对象的数据类型可以看成是E-R模型增加了封装,方法(函数)和对象标识等概念的扩展。对象-关系数据模型结合了面向对象的数据模型和关系数据模型的特征。 **半结构化数据模型**
这里我们不过多累述,但是我们要知道可扩展标记语言被广泛地用来表示半结构化数据。 > **提示** > > 需要注意的是,实际上在以前还有网状数据模型和层次数据模型,下面我们也有讲述,不过由于他们已经过时了,除了在某些地方仍旧是用的旧数据库之外,现在已经很少使用了。 ## 1.4 数据库三级模式和两级独立性 ### 1.4.1 三级模式 --- 三级模式指的是:许多`视图`、简单的`概念(逻辑)模式`和`物理模式`。这和Java中的`MVC设计框架`有点类似。 > > > - 外模式(视图)描述的是如何去看数据。 > > - 概念模式定义逻辑结构。 > > - 物理模式描述文件和索引的使用。 一个数据库中的文件,最终会以文件的形式存储在磁盘上。那么表在磁盘上会怎么存呢?比如说学生基本信息表,你是用一个堆文件来存,还是用一个哈希文件来存,还是用一个簇集,这都是取决于我们用什么结构来存,而存法,就是physical Schema(物理模式)。 概念模式,就是我们刚刚说的表,表的结构是什么,属性有多少,长度如何,这就是概念模式,我们把概念模式里的表叫做基表,基表是用真正的某种结构存储在磁盘上的。而外模式(视图),是通过对基表的改造,来呈现不同的样子给用户看,不同权限的用户看到的视图是不一样的。 > **不同的术语** > > 概念模式一般也叫`结构模式`或简称`模式`,其作用是对数据库中全体数据的整体逻辑结构和特征的描述。 > > 而外模式也叫`子模式`或`用户模式`,是数据库用户看到的视图。 > > 物理模式也叫`存储模式`或`内模式`,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。 举个例子,如果拿大学数据库的例子来说明上面的三级模式的话: >***概念模式*** > >``` >Student(sid:string,name:string,login:string,age:integer,gpa:real) >Course(cid:string,cname:string,credits:integer) >Enrolled(sid:string,cid:string,grade:integer) >``` > ***物理模式*** > > - 以堆文件来存放 > - 在学生表的第一列建一个B+树索引 >***视图*** > >``` >Course_info(cid:string,enrollment:integer) >``` > >视图可以不是基表的信息,可以是通过基表的信息计算出来的。 基表是真真实实存在的,他的数据显式地存储在数据库中,或者换一种说法就是,你当时存的时候什么样基表就长什么样。 而虚表是仅有逻辑定义,可以根据其定义从其他表(包括视图)中导出,但不作为一个表显式地存储在数据库中。换一种说法就是,比如你数据库里面已经有个基表了,然后我通过某些要求过滤了一些条件,查询出来的表就是虚表,虚表实际上不存在数据库里,他只是通过一些计算和逻辑语言提取出来的。 当基表的模式修改时,通过定义适当的视图,仍可以为用户提供修改前的数据模式,避免修改应用程序,从而有利于提高数据的逻辑独立性。也就是说,即使你基表改了,但是为了视图还是和以前一样,我们可以在基表的基础上做一些其他的操作,使他改变操作后算出来的虚表和之前没改的虚表一模一样。 ### 1.4.2 二级映像功能 --- 数据库管理系统的三级模式对应数据库中数据的三个抽象级别。为了能够在数据库内部实现这三个抽象层次的联系和转换,数据库系统提供了三级模式之间的`两层映像`。 两层映像指的是`外模式/模式映像`和`模式/内模式映像`。 ### 1.4.3 数据独立性 --- 实际上对于应用程序来说,其可以不在意数据库中的数据是怎么存放的,这是由于数据库中的数据具有数据独立性。 >**逻辑数据独立性:保护数据的逻辑结构的改变** > >一个在数据库的基础之上开发的应用程序不受数据逻辑结构的影响。 > >假如基表变动(也就是数据结构变动),那么通过改变一些逻辑,能够使得原来基表还未变动之前的视图不受改变。即基表虽然改变,但是视图为了保证不变,我修改基表和视图的映射。 >**物理数据独立性:保护数据的物理结构的改变** > >一个表结构变化,比如我前面使用哈希文件存的,但是现在用堆文件存,只要表逻辑结构不变,物理结构变化是没事的。 数据独立性是DBMS最大的好处之一。因为文件系统是没有这样的优点的。 ## 1.5 数据库发展历史及分类 --- 发展历史我觉得几个特别的需要记住,其他的就算了。 - 1964年,第一个DBMS:美国通用电气公司Bachman等人开发的IDS,采用网状数据模型。 - 1969年,IBM公司推出了IMS,采用层次数据模型。 - 1970年,E.Fcodd(IBM)提出了关系数据模型,以关系(表)作为描述数据的基础。 如果根据DBMS的发展历史来分类的话: 在计算机发展早期,那时候没有网络,一台主机带着一堆终端,大家通过终端来访问一台机器,很明显,那时候数据库也是集中放在一台机器上,所以当时DBMS早期是一种`集中式数据库结构`。 70年代中后期,随着局域网的发展还有其他网络的普及,出现了分布式数据库系统;所谓并行计算机系统就是在一台计算机上,可能会有多个CPU,每个CPU可能带有自己的内存甚至带有自己的硬盘。在考虑并行计算机系统的软硬件特点,前人做出了能够提高效率的`并行式数据库系统`;由于当时电脑配置还不是很高级,很多时候用一个分布式操作系统通过网络控制多台机器,使其协调共同完成一个数据库系统的工作。 随着无线网络的发展,后来又出现了`移动数据库`的概念,也就是充分利用移动网络的能力,在随时随地都能够访问到数据库。网格计算和云计算都是这方面的技术。 根据数据库架构的话可以分为以下两种: >**CS结构(两层体系架构)** > >C/S又称Client/Server或`客户/服务器模式`,服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。也就是说,在CS架构中,应用程序驻留在客户机上,通过查询语言表达式来调用服务器上的数据库系统功能。像ODBC和JDBC这样的应用程序接口标准被用于进行客户端和服务器的交互。 > > >**BS结构(三层数据库结构)** > >B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。BS结构中用户端的浏览器通过应用服务器同数据库进行数据交互。 > > > >拿VPN来说,现在比如说校园网,都是通过IE浏览器然后访问互联网,然后互联网给Web服务端(应用服务器)发请求,如果成功,则通过App服务端(用户端)访问校园网数据库,如果失败则进入不了校园网。 C/S架构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个: 只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。 客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。 ## 1.6 数据库系统的组成和生命周期 ### 1.6.1 三个概念 --- 在最开始的时候我们提到数据库是数据库管理系统的一个子集,对于很多人来说,数据库、数据库管理系统、数据库系统三个概念常常容易混淆,这里给出三者定义方便做对比: > 数据库是长期存储在计算机内有组织、可共享的数据集合,数据库中的数据按一定的数据模型组织、描述、存储,冗余度小,具有较高的数据独立性、共享性和易扩展性。 > > 数据库管理系统是数据库系统的核心组成部分,它是介于`用户与操作系统`之间的一层数据管理软件,是用户和数据库的接口。 > > 数据库系统是带有数据库的计算机系统,一般由数据库、数据库管理系统(及其开发工具)、相关的硬件、软件和各类人员组成。数据模型是数据库的核心。 > > > > 综上所述:`数据库系统=应用+DBMS+数据库+DBA` ### 1.6.2 生命周期 --- 数据库和软件一样,也有一个生存周期,它包含下列五个阶段。 1. **数据库系统的规划** 它包含系统的应用和功能的确认、应用环境的分析、DBMS及其支持环境的选择和配置、人员的配置和培训以及投资估算和效益分析等活动。 2. **数据库设计** 数据库设计实际上主要是数据的表示方法和存储结构的设计。 3. **数据库建立** 4. **数据库的运行、管理和维护** 数据库投入运行后,还必须监视和调优其性能,听取用户的反馈,必要时对数据库做相应的调整 5. **数据库的扩充和重构** 一个单位的组成、结构和功能是会变化的,其对应的数据模式也须做相应的改变。 ### 1.6.3 存储管理器 --- 存储管理器负责数据库中数据的存储、检索和更新,其和文件管理器进行交互,原始数据通过操作系统提供的文件系统存储在磁盘上。 存储管理器一般包括以下几类: | 存储管理部件 | 说明 | | :----------------: | :----------------------------------------------------------: | | 权限及完整性管理器 | 它检测是否满足完整性约束,并检查视图访问数据的用户的权限 | | 事务管理器 | 它保证即使发送了保障,数据库也保持在一致的状态,并保证并发事务的执行不发生冲突 | | 文件管理器 | 它管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构 | | 缓冲区管理器 | 它负责将数据从磁盘上取到内存来,并决定哪些数据应该缓冲存储在内存中 | 存储管理器还实现了一些数据结构,可以作为系统物理实现的一部分: | 数据结构 | 说明 | | -------- | ----------------------------------------------------- | | 数据文件 | 存储数据库自身 | | 数据字典 | 存储关于数据库结构的元数据,尤其是数据库模式 | | 索引 | 用于提供对数据项的快速访问,在MySQL中一般采用B+树索引 | ## 1.7 数据库用户和管理员 --- 使用数据库的人员一般分为`数据库用户`和`数据库管理员`。 举个简单的例子,我们要登录QQ,那么在登录界面当你输入账号密码后,后端马上会去数据库寻找关于你的数据,一旦找到了就通过登录。那么作为登录用户,你就是`数据库用户`;而对于后台管理数据库的人来说,它要设计你所在数据库中对应的表,还有负责一系列优化、并发、恢复工作,这类人就叫`数据库管理员`,即DBA。 DBA主要的作用如下: | 作用 | 说明 | | -------------------------- | ------------------------------------------------------------ | | 模式定义 | DBA利用DDL来书写关于表的定义 | | 存储结构以及存取方式的定义 | | | 模式和物理组织的修改 | DBA设计模式来适应不同的需求,并且选择不同的物理结构来提高性能 | | 数据访问授权 | 对不同类型的权限,DBA可以给不同权限看不同的视图 | | 日常维护 | 主要是定期备份、监视磁盘空间、监视数据库运行 | |
|