数据库DB
一、数据库系统概论
基本概念
数据库的四个基本概念:数据、数据库、数据库管理系统、数据库系统
- 数据DATA:描述事物的符号记录,数据的含义称为数据的语义,数据与其语义不可分
- 数据库DB:长期存储在计算机内、有组织的、可共享的大量数据的集合,数据库中的数据按一定数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性、易扩展性
- 数据库管理系统DBMS:位于操作系统和用户之间的一层数据管理软件,包括:数据定义、组织、存储、管理、操纵;数据库的事务管理、运行管理、建立、维护;其他;
- 数据库系统DBS:由数据库、数据库管理系统、应用程序、数据库管理员DBA组成的存储、管理、处理和维护的系统
数据库技术发展
人工管理阶段、文件系统阶段、数据库系统阶段
数据库系统特点
- 数据结构化:是与文件系统的本质区别
- 数据的共享性高、冗余度低且易扩充
- 数据独立性高
- 数据由数据库管理系统统一管理和控制:安全性保护、完整性保护、并发控制、数据库恢复
数据模型:是对现实世界数据特征的抽象,是数据库系统的核心和基础
两类数据模型
- 第一类概念模型(信息模型):按用户的观点对数据和信息建模,主要用于数据库设计——面向用户
- 第二类逻辑模型:包括层次模型、网状模型、关系模型、面向对象模型、对象关系模型、半结构化模型;是按计算机系统的观点对数据建模——面向设计人员
- 第二类物理模型:是对数据最底层的抽象,面向计算机系统
概念模型
基本概念
- 实体:客观存在并且可相互区别的事物
- 属性:实体具有的某一特性
- 码:唯一标识实体的属性集
- 实体型:用实体名及属性名集合来抽象和刻画同类实体
- 实体集:同一类型实体的集合
- 联系:实体之间的联系通常是指不同实体集之间的联系,一对一、一对多、多对多等类型
一种表示方法:实体-联系方法
- E-R模型
组成要素:数据模型通常由数据结构、数据操作、数据的完整性约束条件组成
- 数据结构:描述数据库的组成对象以及对象之间的关系
- 数据操作:对数据库中的各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则(SQL)
- 数据的完整性约束条件:是一组完整性规则,保证数据的正确、有效和相容,任何关系需满足实体完整性和参照完整性(DBMS自动完成,之外的由设计人员完成,用户自己的完整性也需设计人员完成);在某个表中某一个属性不能重复且不能为空
常用数据模型
- 层次模型(非关系模型)
- 网状模型(非关系模型)
- 关系模型(表)
- 面向对象模型(对象)
- 对象关系模型
- 半结构化模型
层次模型
早期的数据组织方式,IBM的IMS,在数据库中定义满足
- 有且只有一个结点没有双亲结点,这个结点叫根结点
- 根以外的其他结点有且只有一个双亲结点
层次模型更像是一颗倒立的树
网状模型
- 允许一个以上的结点无双亲
- 一个结点可以有多于一个的双亲
层次模型中子女结点与双亲结点的联系是唯一的,网状模型不唯一
关系模型
IBM E.F.Codd
数据结构
- 关系:一个关系对应一个表
- 元组:表中的一行
- 属性:表中的一列
- 码:表中某个属性组,可以唯一确定一个元组
- 域:一组有相同数据类型的集合
- 分量:元组的一个属性值
- 关系模式:关系的描述(关系名(属性1,属性2,...,属性n))
要求关系必须规范化,每一个分量必须是一个不可分的数据项
数据库系统的结构
- 单用户结构
- 主从式结构
- 分布式结构
- 客户-浏览器结构
- 浏览器-应用服务器、数据库服务器多层结构
系统模式的概念
在数据模型中有“型”和“值”的概念,型是指对某一类数据的结构和属性的说明,值是型的一个具体赋值
模式是数据库中全体数据的逻辑结构和特征的描述,涉及型的描述,不涉及具体的值
模式是相对稳定的,而实例是相对变动的
数据库系统的三级模式:外模式、模式、内模式
- 模式:又称逻辑模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据试图,是与某一用户有关的数据的逻辑表示
- 外模式:通常是模式的子集,一个数据库可以有多个外模式,如果不同的用户在应用需求、看待的数据方式、对数据保密的要求等方面存在差异,则其外模式描述是不同的;同一模式也可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式
- 内模式:又称存储模式或物理模式,一个数据库只有一个内模式,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式
数据库二级映像功能与数据独立性
- 外模式/模式映像:模式描述的是数据全局逻辑结构,外模式描述的是数据的局部逻辑结构,对于每一个外模式,数据库系统都有一个外模式/模式映像,定义了外模式与模式之间的对应关系,通常包含在各自的外模式描述中;当模式改变时,有数据库管理员对各个外模式/模式的映像做相应改变,可使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
- 模式/内模式映像:数据库只有一个模式,也只有一个内模式,模式/内模式是唯一的,定义了数据全局逻辑结构与存储结构之间的对应关系;当数据库的存储结构发生改变,由数据库管理员对模式/内模式映像作相应改变,可使模式保持不变,从而应用程序不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性
数据库系统的组成
- 硬件平台&数据库
- 软件
- 人员
二、关系数据库
《Communications of the ACM》E.F.Codd
关系数据结构及形式化定义:单一的数据结构,在用户看来逻辑结构是一张二维表
-
域:一组具有相同数据结构的值的集合
$$
\begin{aligned}
&D_1, D_2, \dots, D_n\
\end{aligned}
$$ -
笛卡尔积:域上的一种集合运算
$$
\begin{aligned}
&D_1 * D_2 * \dots * D_n = {(d_1, d_2, \dots, d_n)|d_i\in D_i, i = 1, 2, \dots, n}\
&每一个元素(d_1, d_2, \dots, d_n)叫做一个n元组\
&元组每一个值d_i叫做一个分量\
&基数:一个域允许的不同取值个数M=\prod_{i=1}^{n}{m_i}
\end{aligned}
$$ -
关系:
$$
\begin{aligned}
&D_1 * D_2 * \dots * D_n的子集叫做在域D_1, D_2, \dots\
&D_n上的关系,表示为R(D_1, D_2, \dots, D_n)\
&R表示为关系的名字,n是关系的目或度\
&n=1,单元关系\
&n=2,二元关系\
&某一个属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码\
&若一个关系有多个候选码,则选定一个为主码\
&候选码的诸属性成为主属性,不包含在任何候选码中的属性成为非主属性或非码属性\
&在最简单情况下,候选码只包含一个属性;在最极端情况下,关系模式的所有属性是这个关系模式的候选码,称为全码\
&关系有三种类型:\
&基本关系(基本表或基表):实际存在的表,实际存储数据的逻辑表示;\
&查询表:查询结果对应的表;\
&视图表:基本表或其他视图表导出的表,虚表,不对应实际存储的数据\
&关系是一个无限的集合,由于笛卡尔积的域不满足交换律\
&(d_1, d_2, \dots, d_n) \neq (d_2, d_1, \dots, d_n)(i, j =1, 2, \dots, n)\
&对关系数据模型的限定和扩充:\
&(1)无限关系在数据库系统中是无意义的,限定关系数据模型中的关系必须是有限集合\
&(2)通过关系的每个列附加一个属性名的方法取消属性的有序性\
&基本关系的性质:\
&(1)列是同质的\
&(2)不同列可出自同一个域\
&(3)列顺序可无序\
&(4)任意两个元组的候选码不能取同值\
&(5)行的顺序可无序\
&(6)分量必须取原子值\
&这些规范中最基本的是每一个分量必须是一个不可分的数据项\
\end{aligned}
$$
关系模式:必须指出这个元组集合的结构,即由哪些属性构成,属性来自哪些域,属性和域之间的映像关系
$$
\begin{aligned}
&关系模式:R(U, D, DOM, F)\
&R:关系名\
&D:U中属性所来自的域\
&DOM:属性向域的映射集合\
&F:属性间数据的依赖关系\
\end{aligned}
$$
关系模式是静态的、稳定的,而关系是的动态的、随时间变化的;
关系数据库:有型和值的区分
- 型:关系数据库模式,是对关系数据库的描述
- 值:关系模式在某一时刻对应的关系的集合
关系操作
基本操作:查询、插入、删除、修改
查询:选择、投影、连接、除、并、差、笛卡尔积;{选择、投影、并、差、笛卡尔积}是5种基本操作
关系操作的特点:集合操作方式,一次一集合操作;非关系模型的数据操作为一次一记录方式
关系数据语言:关系代数、关系演算
- 关系代数:用对关系的运算来表达查询要求
- 关系演算:用谓词来表达查询要求,按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算
SQL(Structured Query Language)是集查询、数据定义语言、数据操纵语言和数据控制语言DCL(Data Control Language)于一体的关系数据语言
- 关系代数语言:ISBL
- 关系演算语言:元组关系演算语言:ALPHA、QUEL;域关系演算语言:QBE
- 关系代数&关系演算-语言:SQL
关系的完整性:是对关系的某种约束条件,有三类约束:
实体完整性:若属性A是基本关系R的主属性,则A不能取空值;关系数据库中每个元组是可区分的,是唯一的,这点用实体的完整性来保证
实体完整性规则说明:
(1)实体完整性是针对基本关系而言,一个基本表对应现实世界的一个实体集
(2)现实世界中的实体是可区分的,即它们具有某种唯一标识
(3)关系模型中以主码作为唯一性标识
(4)主码中的属性即主属性不能取空值
参照完整性:定义外码与主码之间的引用规则
$$
\begin{aligned}
&设F是基本关系R的一个或一组属性,但不是关系R的码,K_s是基本关系S的主码\
&如果F与K_s相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系\
&关系R和S不一定是不同的关系\
&目标关系S的主码与K_s和参照关系R的外码F必须定义在同一个(同一组)\
\end{aligned}
$$
参照完整性规则
$$
\begin{aligned}
&若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K_s相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须\
&取空值 \space 等于S中某个元组的主码值 \space空值 \space非空值\
\end{aligned}
$$
用户定义的完整:与现实语义相结合
关系代数:抽象的查询语言,使用对关系的运算来表达查询[运算对象、运算符、运算结果];按运算符分为传统的集合运算和专门的关系运算
传统的集合运算(二目运算):并、差、交、笛卡尔积
$$
\begin{aligned}
&设关系R和S具有相同的目n(即两个关系都有的n个属性)\
&具有相应的属性取自同一个域,t是元组变量,t\in R表示t是R的一个元组\
&(1)并\
&R \cup S = { t | t\in R \vee t\in S}\
&(2)差\
&R - S = { t | t\in R \wedge t\notin S}\
&(3)交\
&R \cap S = { t | t\in R \wedge t\in S}\
&(4)广义笛卡尔积\
&R \times S = { \widehat{t_r t_s} | t_r\in R \wedge t_S\in S}\
\end{aligned}
$$
$\large{R}$:
A | B | C |
---|---|---|
$a_1$ | $b_1$ | $c_1$ |
$a_1$ | $b_2$ | $c_2$ |
$a_2$ | $b_2$ | $c_1$ |
$\large{S}$: | ||
A | B | C |
-- | -- | -- |
$a_1$ | $b_2$ | $c_2$ |
$a_1$ | $b_3$ | $c_2$ |
$a_2$ | $b_2$ | $c_1$ |
$\large{R\cup S}$: | ||
A | B | C |
-- | -- | -- |
$a_1$ | $b_1$ | $c_1$ |
$a_1$ | $b_2$ | $c_2$ |
$a_2$ | $b_2$ | $c_1$ |
$a_1$ | $b_3$ | $c_2$ |
$\large{R\cap S}$: | ||
A | B | C |
-- | -- | -- |
$a_1$ | $b_2$ | $c_2$ |
$a_2$ | $b_2$ | $c_1$ |
$\large{R\times S}$: | ||
R.A | R.B | R.C |
-- | -- | -- |
$a_1$ | $b_1$ | $c_1$ |
$a_1$ | $b_1$ | $c_1$ |
$a_1$ | $b_1$ | $c_1$ |
$a_1$ | $b_2$ | $c_2$ |
$a_1$ | $b_2$ | $c_2$ |
$a_1$ | $b_2$ | $c_2$ |
$a_2$ | $b_2$ | $c_1$ |
$a_2$ | $b_2$ | $c_1$ |
$a_2$ | $b_2$ | $c_1$ |
专门的关系运算:选择、投影、连接、除运算
(1)设关系模式为R($A_1$,$A_2$,$\dots$,$A_n$),它的一个关系为R
$t\in R$表示t是R的一个元组
t$[A_i]$表示元组中相应的属性$A_i$的一个分量
(2)若$A={A_{i1}, A_{i2}, \dots, A_{ik}}$ ,其中$A_{i1}, A_{i2}, \dots, A_{ik}$是$A_1, A_2, \dots, A_n$中的一部分,则$A$称为属性列或属性组
$t[A]=(t[A_{i1}], t[A_{i2}], \dots, t[A_{ik}])$表示元组$t$在属性列$A$上诸多分量的集合
$\overline{A}$则表示$A={A_{1}, A_{2}, \dots, A_{n}}$中去掉$A={A_{i1}, A_{i2}, \dots, A_{ik}}$后剩余的属性组
(3)$R$为$n$目关系,$S$为$m$目关系,$t_r\in R, t_s \in S$,$\widehat{t_r t_s}$ 为元组的连接(串接)
是一个$n+m$的元组
(4)给定一个关系$R(X,Z)$,$X$和$Z$为属性组
$t[X]=x$,$x$在$R$中的象集:$Z_x={t[Z]|t\in R, t[X]=x}$
表示R中属性组X上的值为x的诸多元组在Z上的分量集合
$\large{R}$
$x$ | $Z$ |
---|---|
$x_1$ | $Z_1$ |
$x_1$ | $Z_2$ |
$x_1$ | $Z_3$ |
$x_2$ | $Z_2$ |
$x_2$ | $Z_3$ |
$x_3$ | $Z_1$ |
$x_3$ | $Z_3$ |
$x_1$在$R$中的象集$Z_{x_1}={Z_1, Z_2, Z_3}$
$x_2$在$R$中的象集$Z_{x_2}={Z_2, Z_3}$
$x_3$在$R$中的象集$Z_{x_3}={Z_1, Z_3}$
(1)选择(限制):在关系$R$中选择满足条件的诸多元组
$\sigma_{F}(R)={t|t\in R \cap F(t)='True'}$ $F(t)=X_1 \theta Y_1$ $\theta$:比较远算符
(2)投影:关系$R$选择出若干属性列组成新的关系
$\prod_A(R)={t[A|t \in R}$ $A$是$R$的属性列
投影之后不仅取消原关系中的某些列,而且还可能取消某些组
查询关系Student在所在属性上的投影$\large{\prod_{Sdept}(Stud)}$
$\LARGE{b = \prod_{Sdept}(a)}$
$\LARGE{a}$
Sname | Sdept |
---|---|
Nick | CS |
Cay | CS |
John | MA |
West | IS |
$\LARGE{b}$
Sdept | -- |
---|---|
CS | -- |
MA | -- |
IS | -- |
(3)连接($\theta$连接):从两个关系的笛卡尔积中选取属性间满足一定条件的元组
$R\mathop{\bowtie}\limits_{A \theta B} S ={\widehat{t_r t_s}|t_r \in R \cap t_s \in S \cap t_r[A] \theta t_s[B]}$