数据库技术基础
基本概念
数据库技术是研究数据库的结构、存储、设计、管理和应用的一门软件学科。
数据库(Database,DB)是统一管理的、长期存储在计算机内的、有组织的相关数据的集合。
数据库系统(Database System,DBS)是一个采用了数据库技术,有组织地、动态地存储大量相关数据,方便多用户访问的计算机系统。
数据库管理系统(Database Management System,DBMS)是位于用户和操作系统之间的一层数据管理软件,其基本目标是提供一个可以方便、有效地存取数据库信息的环境。
数据库管理员(Database Administrator,DBA)负责数据库的总体信息控制。
DBMS 通常分为三类
- 关系数据库系统(Relation Database System,RDBS),支持关系模型,实体以及实体间的联系都是用关系来表示的。
- 面向对象的数据库系统(Object-Oriented Database System,OODBS),支持以对象形式对数据建模,包括对对象的类、类属性的继承和子类的支持。
- 对象关系数据库系统(Object-Oriented Relation Database System,ORDBS),在传统的关系数据库模型基础上提供元组、数组、集合等更为丰富的数据类型及处理新的数据类型操作的能力。
数据库系统的体系结构
- 集中式数据库系统
- 客户端/服务器体系结构
- 并行数据库系统
数据库的三级模式和两级映像
- 概念模式,也称模式,是数据库中全部数据的逻辑结构和特征的描述,由若干个概念记录类型组成。
- 外模式,也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述。
- 内模式,也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。
内、外模式通过概念模式连接,两级中任意一级改变都不受另外一级影响,而这是通过两级映像实现的,从而使得数据库中的数据具有较高的逻辑独立性和物理独立性。
- 模式/内模式映像,实现了概念模式和内模式之间的相互转换。
- 外模式/模式映像,实现了外模式和概念模式之间的相互转发。
数据模型
数据模型分为:概念数据模型和基本数据模型。
- 概念数据模型,也称信息模型,是按用户的观点对数据和信息建模,主要用于数据库设计,如实体-联系模型,简称 E-R 模型。
- 基本数据模型,是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于 DBMS 的实现。如层次模型、网状模型、关系模型和面向对象模型。
数据模型是数据库结构的基础,而其包含三个要素:数据结构、数据操作和数据的约束条件。
E-R 模型
概念模型是对信息世界的建模,1976 年提出的实体-联系方法(Entity Relationship Approach)便是使用 E-R 图来描述现实世界的概念模型,称为实体-联系模型(Entity-Relationship Model,E-R 模型)。
E-R 模型与计算机无关,容易理解,是用户和数据库设计人员交流的语言,但是它只能说明实体间的语义联系,不能进一步地详细说明数据结构。
设计一个 E-R 模型,主要是根据相同的属性确定实体,而后确定不同实体间的关系,以及实体内部的关系。
实体间的关系分为三种,分别为 1:1
、1:n
、n:m
。
多个实体间的关系可以表示为,1:n:m
或 r:n:m
。
在实体内部同样存在上述关系,如职工实体集中的领导和被领导的关系是 1:n 的,而婚姻关系则是 1:1 的。
同一个实体集中的实体具有相同的属性和相同的属性值域,属性可以有以下分类。
- 简单属性和复合属性
- 单值属性和多值属性
- NULL 属性
- 派生属性
在 E-R 图中,矩形表示实体集,菱形表示关系集,使用无向边(线段)将两者连接,并在边上写名数量对应关系。
构件 | 说明 |
---|---|
矩形 | 表示实体集 |
双矩形 | 表示弱实体集 |
菱形 | 表示联系集 |
双边菱形 | 表示弱实体集对应的标识性联系 |
椭圆 | 表示属性 |
线段 | 将属性与相关实体集相连,或将实体集与联系集相连 |
双椭圆 | 表示多值属性 |
虚椭圆 | 表示派生属性 |
双线 | 表示一个实体全部参与到联系集中 |
双竖线矩形 | 表示子类 |
有符合 U 的线 | 表示特殊化 |
圆圈中有 d | 表示不相交特殊化 |
圆圈中有 o | 表示重叠特殊化 |
另外,可以在属性中使用下划线表示该属性为主键。
弱实体,表示该实体总是依赖于其他实体存在的,如家属是某个职工的,所以家属集是依赖职工集存在的。
特殊化,将一个实体集按照某些特征区分为几个子实体的过程。
普遍化,将几个具有共同特性的实体集概括成一个更普遍的实体集的过程。
层次模型
层次模型(Hierarchical Model)采用树型结构表示数据与数据间的联系。在该模型中,每一个结点表示一个记录(实体),记录之间的联系用结点之间的连接表示,并且除根结点外的其他结点只有一个双亲结点。
层次模型只能表示一对多的关系,不能表示多对多的关系。但是,通过冗余结点法或虚拟结点分解法可以表示多对多的关系。
网状模型
采用网状结构表示数据与数据间联系的数据模型称为网状模型(Network Model)。该模型是层次模型的特例,只是去除了层次模型中层次的限制,并且允许结点间的联系是多种的,双亲结点也是任意个的。
网状模型同样不能表示记录间的多对多联系,但可以引入连接记录来表示多对多联系。
关系模型
关系模型(Relation Model)使用表格结构表达实体集以及实体集间的联系,特点是描述的一致性。关系模型是由若干个关系模式组成的集合,而一个关系模式如同一个记录型。
面向对象模型
面向对象模型(Object Oriented Model)的核心概念如下:
- 对象和对象标识(OID),是现实世界中实体的模型化。
- 封装(encapsulate),是对象状态和行为的封装,即对象属性和操作方法的封装。
- 对象的属性(object attribute),是对对象状态、组成、特性的描述,而属性值本身也是一个对象。
- 类和类层次(class and class hierarchy),具有相同属性和方法的对象的集合。类层次是所有类组成的有根有向无环图,且方向表示着继承方向。
关系代数
关系数据库的基本概念
- 属性和域:属性是描述事物的若干特征,而其值的取值范围称为域。
- 笛卡尔积与关系:集合与集合相乘,得到具有多个分量的元组,每个分量都来自其中一个集合。
关系的相关名词:
- 目或度
- 候选码
- 主码
- 主属性
- 非码属性
- 外码
- 全码
关系的 3 种类型:基本关系、查询表、视图表。
完整性约束,完整性规则提供了一种手段来保证当授权用户对数据库做修改时不会破坏数据的一致性,分为:实体完整性、参照完整性和用户定义完整性。
基本的关系代数运算
- 并,具有相同关系模式的两个关系 R 和 S 做并运算,结果是属于 R 或 S 的元组构成的集合。
- 差,具有相同关系模式的两个关系 R 和 S 做差运算,结果是属于 R 但不属于 S 的元组构成的集合。
- 广义笛卡尔积,两个关系 R 和 S 的笛卡尔积,其结果是两个关系中的各个元组分别拼接得到的新的元组的集合。
- 投影,从关系 R 中选出若干个属性列 A 组成新的关系。
- 选择,从关系 R 中选择满足给定条件的诸元组。
扩展的关系代数运算
-
交,具有相同关系模式的两个关系 R 和 S 做交运算,结果是属于 R 并且属于 S 的元组构成的集合。
-
连接,该运算实际是从两个关系 R 和 S 的笛卡尔积的结果中选择满足条件的元组。
- ? 连接,? 表示比较运算符,在笛卡尔积的结果中,如果指定的分量元组符合条件,那么选择其作为连接运算的结果之一。所以,笛卡尔积也被看作无条件连接。
- 等值连接,? 为等号时,即指定的元组的各个属性要相等。
- 自然连接,一种特殊的等值连接,即用于比较的元组中的分量是两个关系中都存在的分量。
-
除,对于给定的关系 R(X,Y) 和 S(Y,Z) ,X、Y、Z 为属性组,R÷S 要满足元组在 X 上的分量值 x 的象集 Y x Y_x Yx 包含关系 S 在属性组 Y 上投影的集合。反过来,R÷S 的结果和包含关系 S 在属性组 Y 上投影的集合的笛卡尔积的结果是被关系 R 包含的。
-
广义投影,允许在投影列表中使用算术运算,运算结果作为一个投影列。
-
外连接,外连接是对连接运算的扩展,可以处理由于连接运算而缺失的信息。
- 左外连接,在自然连接的基础上,保留所有左侧关系中无相应右侧关系匹配的元组,并用 null 填充右侧属性。
- 右外连接,在自然连接的基础上,保留所有右侧关系中无相应左侧关系匹配的元组,并用 null 填充左侧属性。
- 全连接,在自然连接的基础上,保留所有左/右侧关系中无相应右/左侧关系匹配的元组,并用 null 填充右/左侧属性。
关系数据库 SQL 语言简介
SQL(Structured Query Language)是关系数据库的标准语言,广泛用于 DBMS 产品。其包含以下特点:
- 综合统一
- 高度非过程化
- 面向集合的操作方式
- 两种使用方式(自含式语言、嵌入式语言)
- 语言简介易学,完成核心功能只要使用 select、create、drop、alter、insert、update、delete、grant、revoke 共 9 个关键词
SQL 数据定义
-
创建表
create table <表名> (<列名> <数据类型> [列级完整性约束条件] [,<列名> <数据类型> [列级完整性约束条件]] ... [,<表级完整性约束条件>]);
create table s (sno char not null unique, sname char, primary key(sno)); create table p (pno char not null unique, pname char, primary key(pno)); create table s_p (sno char, pno char, qty int, primary key(sno,pno), foreign key(sno) references s(sno), foreign key(pno) references p(pno));
-
修改或删除表
alter table <表名> [add <新列名> <数据类型> [完整性约束条件]] drop table <表名>
-
索引建立和删除
create [unique] [cluster] index <索引名> on <表名> (<列名> [<次序>] [,<列名> [<次序>]] ...); drop index <索引名>
次序,默认是 ASC(升序),DSC 为降序。
unique 表示索引值只对应一个数据记录。
cluster 表示索引为聚簇索引,即索引项的顺序是和表中记录的物理顺序一致的。
-
视图创建和删除
create view <视图名> <列名> as <查询子句> [with check option]; drop view <视图名>
with check option 表示对视图进行数据操作时要符合查询子句中的条件表达式,另外视图的列名如果不指定,则由查询子句中的列的主属性组成。
SQL 数据查询
SQL 数据操作功能包括增(insert)、删(delete)、改(update)、查(select),而查询则是数据库的核心操作。
select [all|distinct] <目标列表达式> [,<目标列表达式>] ...
from <表名|视图名> [,<表名|视图名>] ...
[where <条件表达式>]
[group by <列名1> [having <条件表达式>]]
[order by <列名2> [asc|desc] ...]
多表查询,实际是先对多个表进行笛卡尔积,而后根据条件进行选择运算,最后再进行投影运算。
select sno from sc scx, sc scy
where scx.sno=scy.sno and scx='c1' and scy='c3'
子查询即嵌套查询,表示查询可以嵌入在另一个查询块中。
select sno,sname from s
where sno in (select sno from sc
where cno in (select cno from c where cname='ms'))
聚集函数,是将查询的一个集合进行处理后输出单个值的函数。
聚集函数名 | 功能 |
---|---|
count([distinct|all] *) | 统计(不重复)元组的个数 |
count([distinct|all] <列名>) | 统计指定列(不重复)值的个数 |
sum([distinct|all]) <列名> | 计算指定列中(不重复)值的总和 |
avg([distinct|all]) <列名> | 计算指定列中(不重复)值的平均值 |
max([distinct|all]) <列名> | 求指定列中的最大值 |
min([distinct|all]) <列名> | 求指定列中的最小值 |
select max(g),min(g),max(g)-min(g) from sc where cno='c1'
使用 as 指定查询结果的列名
select sname as name, sage as age from s
SQL 数据更新
向数据库表中插入数据,可以直接指定插入的元组,也可以使用查询语句查询出待插入的元组。
insert into <表名> (字段名 [,字段名] ...) values (常量 [,常量] ...)
<查询语句> insert into <表名> (字段名 [,字段名] ...)
从数据库表中删除数据
delete from <表名> [where <条件表达式>]
修改数据库表中的数据
update <表名> set <字段名>=<值> [,<字段名>=<值>] [where <条件表达式>]
SQL 访问控制
为不同的用户指定不同的数据库访问权限是保证数据库中数据安全的必要规则。
对象 | 对象类型 | 操作权限 |
---|---|---|
属性列 | table | select、insert、update、delete、all privileges |
视图 | table | select、insert、update、delete、all privileges |
基本表 | table | select、insert、update、delete、alter、index、all privileges |
数据库 | database | createtab,创建表的权限,由 DBA 授予普通用户 |
-
授权语句格式
grant <权限> [,权限] ... on <对象类型> <对象名> [,<对象名>] to <用户> [,<用户>] ... [with grant option]; grant insert on table s to user1,user2 with grant option; grant createtab on database db1 to user1;
with grant option 表示获取权限的用户可以将权限授予他人。
-
收回权限语句格式
revoke <权限> [,<权限>] ... on <对象类型> <对象名> [,<对象名>] ... from <用户> [,<用户>] ... ; revoke all privileges on table s,j,k from user1,user2; revoke select on table keys from public;
public 表示全体用户