数据库基本概念
1. 什么是数据库
在计算机中,和我们的操作系统一样,有一套软件。这种软件用于管理我们存储的数据,这个软件称为数据库管理系统(DBMS),而我们平时说的数据库,指的就是这个数据库管理系统。在我们的生活中,处处都有数据的身影。而我们每天都在产生着数据,这些数据在计算机中怎么存储呢?总不能随便乱放吧,这样,如果我们在需要的时候要获取这些数据,那么不是得找死人啊。要是可以把那些数据进行分类,并进行管理,那么就可以对这些数据进行有效的利用。而数据库管理系统就是担当这个重任,用于对数据的管理。当然,数据库管理系统的能力是很强大的,不只是这些。
有些人可能觉得,我在文件夹中保存数据,通过不同的目录结构来对数据进行组织,也可以达到对数据的有效管理。但是,数据库的出现,除了要对数据进行有效的组织,关键是为了解决如下的问题:
- 数据的冗余和不一致:如果相同的信息被存储在不同的位置,那么可能会出现数据的冗余,就是可以在一个地方存的数据,偏偏要分好多的地方存储。而且如果在不同的位置存储了相同的数据,而且在存储的时候存储的结果不同,那么就会导致数据存储的不一致。
- 数据访问困难:如果用户需要查看一些数据,那么在没有数据库管理系统的情况下,即使数据组织的很好,但是在查询的时候也可能会不可避免的需要手工劳动,更加别提在混乱的数据中查找自己需要的信息了。
- 数据孤立:由于数据存储在不同的文件中,在需要的时候必须分散到每个文件中收集信息。
- 完整性问题:在数据库中,可以定义完整性约束条件,使得数据在保存的时候可以满足一定的约束性条件。
- 原子性问题:在访问数据数据的时候,可能需要进行原子操作(所谓的原子操作,如果一个操作是不能分多步进行的,那么这个操作就是原子的)。如银行账户的存取款操作,就需要涉及到原子操作。
- 并发操作:在访问数据的时候,可能会出现多个用户访问同一个数据源,那么这需要保证数据是可以被并发访问的。
- 安全性问题:有些数据是需要保护的,不是所有的数据都是公开给每一个用户的。所以需要对数据访问设置安全措施。
2. 数据视图
数据库系统是一些相关联的数据和一组访问数据库和修改数据库的程序的集合。数据库系统提供给用户抽象的视图,并且隐藏了低层的存储细节。
2.1 数据抽象
数据库为了方便对数据的检索,对数据进行分层次来屏蔽复杂性
数据抽象对数据分为3层:
- 物理层:最低层次的抽象,描述数据是怎样存储的。
- 逻辑层:处在物理层之上,逻辑层描述数据库中存储了什么数据以及这些数据间存在的关系。逻辑层通过简单的结构描述了整个数据库。
- 视图层:处在最高的层次,描述了整个数据库的某个部分,为了适应用户的不同需求,该层可以利用数据库中多样的信息,构建出用户需要的数据。
2.2 实例和模式
特定时刻存储存储在数据库中的信息集合称为数据库的一个实例,而数据库的总体设计称为数据库模式。这个有点抽象,形象的说,类比C语言,模式就相当于是定义的一个变量,而实例就相当于是变量存储的值,而变量的值在不同的时刻是不同的。
对于数据库的不同抽象层次,数据库的模式可以分为物理模式,对应了数据库层次中的物理层;逻辑模式对应了数据库抽象层次中的逻辑层;而对于视图层次,则可以分为多个子模式,对应了多个视图。
2.3 数据模型
数据库结构的基础是数据模型。数据模型是一个描述数据,数据联系,数据语义以及一致性约束的概念工具集合。数据模型提供了一种描述物理层,逻辑层以及视图层数据库设计的方式。
数据模型可以被分为:
- 关系模型:关系模型使用表来表示数据之间的关系,是目前主流数据库管理系统使用的数据模型,关系型数据库,如MySQL数据库。
- 实体联系模型
- 基于对象的数据模型
- 半结构化数据模型
3. 数据库语言
3.1 数据操纵语言
数据操纵语言(DML)是一种使用户可以访问或操作那些通过一定的数据模型组织起来的数据的语言。
数据操纵语言可以分为:
- 过程化DML:要求用户指定需要的数据已经获取这些数据的方式。
- 声明式DML:只要求用户指定需要的数据,而不需要用户指明获取数据的方式。
查询是要求对信息进行检索的语句。DML中涉及信息检索的部分称为查询语言。
3.2 数据定义语言
数据库模式是通过一系列定义来说明的,这些定义由一种称作数据定义语言(DDL)的特殊语言来定义的。数据库系统使用的存储结构和访问方式是通过一系列特殊的DDL语句来说明,这种特殊的DDL称作数据存储和定义语言。这些语言定义了数据库模式的实现细节,而这些细节对用户来说通常是不可见的。
存储在数据库中的数据值必须满足一些一致性约束,约束条件包括:
- 域约束:每个属性都必须对应一个所有可能的值构成的域(如:整数型,字符型,日期类型)。声明一种属性属于某种具体的域就相当于约束它可以取得值。域约束是完整性约束的最基本形式。
- 参照完整性:如果一个关系中给定属性集上的取值也在另一个关系中出现,这就是需要满足参照完整性。
- 断言:一个断言就是数据库需要时刻满足的某一个条件,域约束和参照完整性约束是断言的特殊形式。
- 授权:对于不同的用户,对数据库的访问权限是不同的,这些需要通过授权来表达。
4. 关系数据库
4.1 关系数据库的结构
在关系数据库中,关系是通过表来表示的。在一个表中,每一行代表一个联系,而一个关系就是由许多的联系组成的集合。表的概念和数学上的关系的概念是密切相关的。在数学中,一个元组就是一组值得序列,在n个值之间的联系可以在数学上用关于这些值得一个n元组表示。
这样,在关系模型中,关系用来指代表,而元组用来指代行,属性就是表中的列。
对于每一个属性,都存在一个允许取值的集合,称为该属性的域。
4.2 数据库模式
在数据库中,数据库模式就相当于编程语言中定义的变量,而数据库实例就相当于是这个变量保存的值。在不同的时刻,数据库中保存的内容是可能改变的,而数据库的逻辑定义一般是不会被改变的。
一般来说,关系模式由属性序列以及各属性对应的域组成。关系实例由数据库中存储的内容组成。
4.3 码
在数据库中,必须有一种可以区分给定关系中的不同的元组的方法。也就是说,一个元组的属性值必须是能够唯一区分元组的。
超码是一个或多个属性的集合,这些属性的组合可以使得我们在一个关系中唯一地标识一个元组。在一个超码中,可能包含了无关紧要的属性,如果对于一些超码,他们的任意真子集都不能成为超码,这样的最小超码称为候选码。
当数据库的设计者在候选码中选中了一个码用来在一个关系中区分不同的元组,那么这个被选中的候选码就被称为主码。
4.3.1 参照关系和被参照关系:
一个关系模式R1,在它的属性中包含了另一个关系模式R2的主码,那么这个属性在R1上被称为是一个参照R2的外码。关系R1也称为这个外码依赖的参照关系,R2被称为外码的被参照关系。在参照关系和被参照关系上的约束被称为参照完整性约束。参照完整性约束要求在参照关系中,任意一个元组在特定属性上的取值必然等于被参照关系中某个元组在特定属性上的取值。
参考:《Database System Concepts》
posted on 2014-03-06 19:45 Now&Fight 阅读(1391) 评论(0) 编辑 收藏 举报