目录
本章主要讨论数据库管理系统,同引入了数据库管理系统的三层体系结构,重点讲解了关系数据库模型并举例说明其运算。同时加少了SQL语句和数据库设计相关概念。
数据库是一种组织内被应用程序使用的逻辑组一致的相关数据的集合。
数据库体系结构
数据库建立了三层体系结构,内层、概念层、外层
内层:直接和硬件交互,决定数据在硬盘中的诗句位置,这个层次处理低层次的数据存取方法和在存储设备之间存储字节。
概念层:该层定义了数据模式,数据库管理系统的逻辑处理都在此层,这个一个中介层,连接外层和内层。
外层:直接和用户交互。
数据库模型
数据库模型定义了数据的逻辑设计,它也描述了不同数据之间的联系,在数据库设计的发展史中,出现过层次模型、网状模型和关系模型。在此只要展开关系模型。
关系数据库模型
如今,关系模型是数据库设计中最常用的模型。关系模型中,数据组织成二维表(这种数据组织称为关系),表或关系相互关联。
关系就是二维表,数据的外部试图就是关系或表的集合,但这并不代表数据以表的形式存储。数据的物理存储和逻辑组织的方式毫无关系。
关系的操作
在关系模型中,可以定义一些操作来处理已知的关系来创建新的关系。在此定义了9种 插入、删除、更新、选择、投影、连接、并、交和差。接下来将使用SQL来描述这几种关系。
插入
插入是一元操作,在表中插入新的元祖
insert into TableName values (..., ..., ...);
删除
删除也是一元操作,在表中查出特定的元素
delete from TableName where Criteria;
更新
更新是一元操作,用来更新某些元祖中的部分属性的值。
updata TableName set attribute1=newValue1, attribute2=newValue2 where Criteria;
选择
一元操作,基于某种条件产生另一个新关系,相较于之前的关系元祖减少,属性并不减少。
select * from TableName where Criteria;
投影
一元操作,基于某种条件产生另一个新关系,相较于之前的关系元祖数量不变,只选择部分属性。
select attribute1, attribute2 from TableName;
连接
二元操作,基于把共有属性的两个关系组合。
select attibute_list from TableName1, TableName2 where Criteria;
并
把两个具有相同属性的关系取并集,构成一个新的关系,新关系中的每一元组或者在第一个关系、第二个关系或者在两个关系中皆有。
select * from TableName1 union select * from TableName2;
交
把两个具有相同属性的关系取交集,构成一个新的关系,新关系中的每一个元祖在两个关系中都有。
select * from TableName1 intersection select * from TableName2;
差
把两个具有相同属性的关系差集,构成一个新的关系,新关系的元祖存在于第一个关系中但不在第二个关系中。
select * from TableName1 minus select * from TableName2;
数据库设计
数据库设计是一个循序渐进的过程,第一步通常收集需要存储的信息和各种存取需求,第二部是建立一个实体关系模型(ERM),这种模型定义了一些信息需要维护的实体、这些实体的属性和实体间的关系。
实体关系模型(ERM)
通过建立实体关系(E-R)图来表示那些关系。
矩形表示实体集
椭圆表示属性
菱形表示关系集
线连接属性和实体以及连接实体集和关系集
下图是一个简单的实体关系图:
关系(用菱形表示)可以是一对一、一对多、多对一和多对多。
从E-R图到关系
在E-R图完成后,关系数据库中的关系就能建立了。
1、实体集上的关系
E-R中的每个实体集都创建一个关系表,关系具有多个属性对应这个表的多个字段。
2、关系集上的关系
E-R中的每个关系集都创建一个关系表,这个关系中有一个列对应于这个关系所涉及的实体集的关键字。
规范化
通过规范化的处理过程,将一组关系转化为一组更坚固结构的新关系,规范化过程定义了一组层次范式(NF),这里只讲三种范式。
第一范式(1NF)
每个列属性都必须是原子性的,是不可分割的,第一范式就是无重复的域。解决的方法数据和将集合属性拆分为多个原子性的属性。
第二范式(2NF)
在1NF情况下,非码属性必须完全依赖于候选码,消除非主属性对主码的的部分依赖。比如有些主码是有多个字段组合的,在2NF下,其他属性必须都依赖这个组合码。解决方法是拆成多个表。
第三范式(3NF)
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。解决方法是拆成多个表。
其他数据库模型
除了关系数据库,另两种通用模型是:分布式数据库和面向对象数据库。
凡是过往,即为序章