数据库基本概念、基础知识和基本技术
0. 本文档的来源及目的
0.本文档为Tep个人学习笔记,不保证正确性。
1.本文档为 《数据库系统概论》(第五版) - 王珊、萨师煊著 的读书笔记。
2.本文档主要介绍数据库的一些基础概念,是数据库理论内容,并不涉及具体的数据库操作。
3.建议先看《MySQL必知必会》再看数据库理论,很多东西就好理解了。
1. 数据库简介
1.1 四个基本概念
数据(data):描述事物的符号记录。
数据库(DataBase,DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。
数据库管理系统(DataBase Management System,DBMS):数据定义;数据组织、存储和管理;数据操纵;数据库的事务管理和运行管理;数据库的建立和维护。
数据库系统(DataBase System,DBS):有数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DataBase Administrator,DBA):组成的存储、管理、处理和维护数据的系统。
图1.1 数据库系统 |
---|
图1.2 引入数据库后计算机系统的层次结构 |
---|
1.2 数据库系统的特点
数据结构化:数据库系统实现整体数据的结构化,即数据本身结构化,数据与数据之间的关系也是结构化的(优势)。这大大方便了数据的存储、管理、处理和维护,并提供统一的对外接口,方便使用和迁移。
数据的共享性高、冗余度低且易扩充:整体结构化的数据面对的不再是单一应用或单个用户,而是面向整个系统,在系统内只有一个正本,不会产生多个副本数据不一致的情况减少数据冗余。同时由于面向整个系统,可以被多个应用共享使用,易于扩充。
数据独立性高:
物理独立性——应用程序和数据库中数据的物理存储是相互独立的。
逻辑独立性——应用程序和数据库的逻辑结构是相互独立的。
数据库管理系统统一的管理和控制:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。
1.3 数据模型
1>概念模型:实体(entity)、属性(attribute)、码(key)、实体型(entity type)、实体集(entity set)、
联系(relationship)。
2> 数据模型
(1)层次模型:有且仅有一个结点没有双亲结点,这个结点称为根节点。
根以外的其他结点有且仅有一个双亲结点。
(2)网状模型:允许一个以上的结点无双亲。
一个结点可以有多于一个的双亲。
(3).关系模型是建立在集合代数的基础上的。1
组成元素:关系、元组、属性、码、域、分量、关系模式。
关系的每一个分量必须是一个不可分的数据项。
约束条件:实体完整性、参照完整性、用户定义的完整性。
数据模型的组成要素:数据结构、数据操作、数据完整性约束条件。
1.4 数据库系统的三级模式结构
图1.3 数据库系统的三级模式结构 |
---|
模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。三层模式结构的中间层,与硬件环境和应用环境皆无关。
外模式:模式与应用环境的接口,一个数据库可有多个外模式。
内模式:only one,模式与物理环境的接口。
2. 关系数据库
2.1 元组、域、笛卡尔积、关系、主码、关系模式
元组(tuple):实际记录的一条关系的记录。
域(domain):一组具有相同数据类型的值的集合。
笛卡尔积(cartesian product):域上的一种集合运算。
三者交叉形成的定理:
给定一组域 D 1 , D 2 , ⋯ , D n D_1,D_2,\cdots,D_n D1,D2,⋯,Dn,允许其中某些域是相同的, D 1 , D 2 , ⋯ , D n D_1,D_2,\cdots,D_n D1,D2,⋯,Dn的笛卡尔积为 D 1 × D 2 × ⋯ × D n = { ( d 1 , d 2 , ⋯ , d n ) ∣ d i ∈ D i , i = 1 , 2 , ⋯ , n } D_1\times D_2\times \cdots\times D_n = \{(d_1,d_2,\cdots,d_n)|d_i\in D_i,i=1,2,\cdots,n\} D1×D2×⋯×Dn={(d1,d2,⋯,dn)∣di∈Di,i=1,2,⋯,n}其中,每一个元素 ( d 1 , d 2 , ⋯ , d n ) (d_1,d_2,\cdots,d_n) (d1,d2,⋯,dn)叫做一个n元组(n-tuple),或简称元组。元素中的每一个值 d 1 d_1 d1叫做一个分量(component)。
一个域允许的不同取值个数称为这个域的基数(cardinal number)。
若
D
i
(
i
=
1
,
2
,
⋯
,
n
)
D_i(i=1,2,\cdots,n)
Di(i=1,2,⋯,n)为有限集,其基数
m
i
(
=
1
,
2
,
⋯
,
n
)
m_i(=1,2,\cdots,n)
mi(=1,2,⋯,n),则
D
1
×
D
2
×
⋯
×
D
n
D_1\times D_2\times \cdots\times D_n
D1×D2×⋯×Dn的基数M为
M
=
∏
i
=
1
n
m
i
M=\prod_{i=1}^nm_i
M=i=1∏nmi
关系(relation):
D
1
×
D
2
×
⋯
×
D
n
D_1\times D_2\times \cdots\times D_n
D1×D2×⋯×Dn的子集叫做在域
D
1
,
D
2
,
⋯
,
D
n
D_1,D_2,\cdots,D_n
D1,D2,⋯,Dn上的关系,表示为
R
(
D
1
,
D
2
,
⋯
,
D
n
)
R(D_1,D_2,\cdots,D_n)
R(D1,D2,⋯,Dn)
这里
R
R
R表示关系的名字,
n
n
n是关系的目或度(degree)。
关系中的每个元素是关系中的元组,通常用 t t t表示。
关系是笛卡尔积的有限子集,所以关系也是一张二维表,表的每行对应一个元组,表的每一列对应一个域。由于域可以相同,为了加以区分,每列称为属性(attribute)。
n
n
n目关系必有
n
n
n个属性。
候选码(candidate key):关系中的某一属性的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码。
主码(primary key):若一个关系有多个候选码,则选定其中一个为主码。
关系可以有三种类型:基本关系(又称基本表)、查询表和视图表。基本表是实际存在的表,它是实际存储数据的逻辑表示;查询表是查询结果对应的表;视图表是由基本表或其它视图表导出的表,是虚表,不对应实际存储的数据。
关系的每一个分量必须是一个不可分的数据项
关系的描述称为关系模式(relation schema)。它可以形式化的表示为 R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F)其中 R R R为关系名, U U U为组成该关系的属性名集合, D D D为 U U U中属性所来自的域, D O M DOM DOM为属性向域的映像集合, F F F为属性间数据的依赖关系集合。
2.2 关系操作
图2.1 基本的关系操作 |
---|
图2.2 关系数据语言 |
---|
2.3 关系完整性
实体完整性规则: 若属性(指一个或一组属性) A A A是基本关系 R R R的主属性,则 A A A不能取空值(null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。
外码定义: 设 F F F是基本关系 R R R的一个或一组属性,但不是关系 R R R的码, K s K_s Ks是基本关系S的主码。如果 F F F与 K s K_s Ks相对应,则称 F F F是 R R R的外码(foreign key),并称基本关系 R R R为参照关系(referencing relation),基本关系 S S S为被参照关系(referenced relation)或目标关系(target relation)。关系 R R R和 S S S不一定是不同的关系(即有可能是同一个关系)。
参照完整性规则: 若属性(或属性组) F F F是基本关系 R R R的外码,它与基本关系 S S S的主码 K s K_s Ks相对应(基本关系 R R R和 S S S不一定是不同的关系),则对于 R R R中每个元组在 F F F上的值必须:
- 或者取空值( F F F的每个属性均为空值)
- 或者等于 S S S中某个元组的主码值。
用户定义完整性: 用户声明的某属性的特性。
2.4 关系代数
2.4.1 传统的集合运算
传统集合运算是二目运算,包括并、差、交、笛卡尔积4种运算。
设关系 R R R和关系 S S S具有相同的目 n n n(即两个关系都有 n n n个属性),且相应的属性取自同一个域, t t t是元组变量, t ∈ R t\in R t∈R表示 t t t是 R R R的一个元组,则可定义如下:
- 并(union) R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t|t\in R\lor t\in S\} R∪S={t∣t∈R∨t∈S}
- 差(except) R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S=\{t|t\in R\land t\not\in S\} R−S={t∣t∈R∧t∈S}
- 交(intersection) R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\{t|t\in R\land t\in S\} R∩S={t∣t∈R∧t∈S}
- 广义笛卡尔积(extended cartesian product): R × S = { t r t s ⌢ ∣ t r ∈ R ∧ t s ∈ S } R\times S=\{\overset{\frown}{t_rt_s}|t_r\in R\land t_s\in S\} R×S={trts⌢∣tr∈R∧ts∈S}
2.4.2 专门的运算关系
专门的运算关系包括选择、投影、连接、除运算等。
为方便叙述,引入几个记号:
- 若有 R ( A 1 , A 2 , ⋯ , A n ) R(A_{1},A_{2},\cdots,A_{n}) R(A1,A2,⋯,An),则 t ∈ R t\in R t∈R表示 t t t是 R R R的一个元组。 t [ A i ] t[A_i] t[Ai]则表示元组 t t t中相应于属性 A i A_i Ai的一个分量。
- 若 A = { A i 1 , A i 2 , ⋯ , A i k } A=\{A_{i1},A_{i2},\cdots,A_{ik}\} A={Ai1,Ai2,⋯,Aik},其中 A i 1 , A i 2 , ⋯ , A i k A_{i1},A_{i2},\cdots,A_{ik} Ai1,Ai2,⋯,Aik 是 A 1 , A 2 , ⋯ , A n A_{1},A_{2},\cdots,A_{n} A1,A2,⋯,An 中的一部分,则 A A A 称为属性列或属性组。 t [ A ] = ( t [ A i 1 ] , t [ A i 2 ] , ⋯ , t [ A i k ] ) t[A]=(t[A_{i1}],t[A_{i2}],\cdots,t[A_{ik}]) t[A]=(t[Ai1],t[Ai2],⋯,t[Aik]) 表示元组 t t t 在属性列 A A A 上诸分量的集合, A ˉ \bar{A} Aˉ 则表示 { A 1 , A 2 , ⋯ , A n } \{A_{1},A_{2},\cdots,A_{n}\} {A1,A2,⋯,An} 中去掉 { A i 1 , A i 2 , ⋯ , A i k } \{A_{i1},A_{i2},\cdots,A_{ik}\} {Ai1,Ai2,⋯,Aik} 后剩余的属性组。
- R R R 为 n n n 目关系, S S S 为 m m m 目关系。 t r ∈ R , t s ∈ S , t r t s ⌢ t_r\in R,t_s\in S,\overset{\frown}{t_rt_s} tr∈R,ts∈S,trts⌢ 称为元组的连接(concatenation)或元组的串接。它是一个 n + m n+m n+m 列的元组,前 n n n 个分量为 R R R 中的一个 n n n 元组,后 m m m 个分量为 S S S 中的一个 m m m 元组。
- 给定一个关系 R ( X , Z ) , X R(X,Z),X R(X,Z),X 和 Z Z Z 为属性组。当 t [ X ] = x t[X]=x t[X]=x 时, x x x 在 R R R 中的象集(images set)定义为 Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x=\{t[Z]|t\in R,t[X]=x\} Zx={t[Z]∣t∈R,t[X]=x} 它表示 R R R 中属性组 X X X 上的值为 x x x 的诸元组在 Z Z Z 上分量的集合。
-
选择(selection)
选择又称为限制(restriction)。它是在关系 R R R 中选择满足给定条件的诸元组,记作 σ F ( R ) = { t ∈ R ∧ F ( t ) = ′ t r u e ′ } \sigma_F(R)=\{t\in R \land F(t)='true'\} σF(R)={t∈R∧F(t)=′true′} 其中 F F F 表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。选择操作从行角度进行的运算。
-
投影(projection)
关系 R R R 上的投影是从 R R R 中选择出若干属性列组成新的关系。记作 ∏ A ( R ) = { t [ A ] ∣ t ∈ R } \prod_A(R)=\{t[A]|t\in R\} A∏(R)={t[A]∣t∈R} 其中 A A A 为 R R R 中的属性列。投影操作从列角度进行的运算。
-
连接(join)
连接也称为 θ \theta θ 连接。它是从两个关系的笛卡尔积中选择属性间满足一定条件的元组。记作 R ⋈ A θ B S = { t r t s ⌢ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R\underset {A\theta B}\Join S=\{\overset{\frown}{t_rt_s}|t_r\in R\land t_s\in S\land t_r[A]\theta t_s[B]\} RAθB⋈S={trts⌢∣tr∈R∧ts∈S∧tr[A]θts[B]} 其中, A A A 和 B B B 分别为 R R R 和 S S S 上列数相等且可比的属性组, θ \theta θ 是比较运算符。连接运算从 R R R 和 S S S 的笛卡尔积 R × S R\times S R×S 中选取 R R R 关系在 A A A 属性组上的值与 S S S 关系在 B B B 属性组上的值满足比较关系 θ \theta θ 的元组。
θ \theta θ 为 “ = ” “=” “=” 的连接运算称为等值连接。即 R ⋈ A = B S = { t r t s ⌢ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] = t s [ B ] } R\underset {A=B}\Join S=\{\overset{\frown}{t_rt_s}|t_r\in R\land t_s\in S\land t_r[A]=t_s[B]\} RA=B⋈S={trts⌢∣tr∈R∧ts∈S∧tr[A]=ts[B]}
自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。即若 R R R 和 S S S 中具有相同的属性组 B B B , U U U 为 R R R 和 S S S 的全体属性集合,则自然连接可记作 R ⋈ S = { t r t s ⌢ [ U − B ] ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ B ] = t s [ B ] } R\Join S=\{\overset{\frown}{t_rt_s}[U-B]|t_r\in R\land t_s\in S\land t_r[B]=t_s[B]\} R⋈S={trts⌢[U−B]∣tr∈R∧ts∈S∧tr[B]=ts[B]}
一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行计算。
由于比较分量"x属性"在关系 R R R 中的值可能不全部包含在关系 S S S中的值(也可能反过来) ,所以在自然连接后有可能会抛弃一些元组,这些元组被称为悬浮元组。如果把悬浮元组保存在结果关系中,在其他属性上填空值(NULL),那么这种连接叫做外连接(outer join)。只保留左关系 R R R 中的悬浮元组则称为左外连接(left outer join 或 left join),若相反则称为右外连接(right outer join 或 right join)。
-
除运算(division)
设关系 R R R 除以关系 S S S 的结果为关系 T T T ,则 T T T 包含所有在 R R R 但不在 S S S 中的属性及其值,且 T T T 的元组与 S S S 的元组的所有组合都在 R R R 中。使用象集来定义除法:
给定关系 R ( X , Y ) R(X,Y) R(X,Y) 和 S ( Y , Z ) S(Y,Z) S(Y,Z) ,其中 X 、 Y 、 Z X、Y、Z X、Y、Z 为属性组。 R R R 中的 Y Y Y 和 S S S 中的 Y Y Y 可以有不同的属性名,但必须出自相同的域集。
R R R 与 S S S 的除运算得到一个新的关系 P ( X ) P(X) P(X) , P P P 是 R R R 中满足下列条件的元组在 X X X 属性列上的投影:元组在 X X X 上的分量值 x x x 的象集 Y x Y_x Yx 包含 S S S 在 Y Y Y 上投影的集合。 记作 R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ ∏ γ ( S ) ⊆ Y x } R\div S=\{t_r[X]|t_r\in R\land \prod_\gamma(S)\subseteq Y_x\} R÷S={tr[X]∣tr∈R∧γ∏(S)⊆Yx} 其中 Y x Y_x Yx 为 x x x 在 R R R 中的象集, x = t r [ X ] x=t_r[X] x=tr[X]。除操作是同时从行和列角度进行的运算。
2.5 空值和视图
2.5.1 空值
空值就是“不知道”或“不存在”或“无意义”的值。
空值的约束条件: 属性定义(或者域定义)中有NOT NULL 约束条件的不能取空值,加了UNIQUE 限制的属性不能取空值,码属性不能取空值。
空值的算术运算、比较运算和逻辑运算: 空值和另一个值(包括另一个空值)的算术运算的结果为空值,空值和另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。有了UNKNOWN后,传统的二值(TRUE,FALSE)逻辑就扩展成了三值逻辑。
2.5.2 视图
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
2.6 关系演算
分为元组关系演算和域关系演算。做操作时,两者都是对比某个或某几个属性值。
差别在于:
元组关系演算以元组为视角(以元组为基本单位),发出查询语句后返回的是元组(包含所有属性,若只想要某几个属性需要裁剪)。
域关系演算直接以域变量(属性)为视角(以域变量为基本单位),发出的查询语句需要指定返回哪个或哪几个属性。
PS:感觉是为了研究而研究生造出来概念,实际实现都是两者混杂的,或者说这根本不应该分成两个概念,两者是一体的。
3. SQL基础2
3.1 基本概念
表3.1 SQL动词 |
---|
图3.1 SQL对关系数据库模式的支持 |
---|
表3.2 SQL的数据定义语句 |
---|
4.关系数据库规范理论
4. 数据库安全性
4.1 概述
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
数据库的不安全因素:
- 非授权用户对数据库的恶意存取和破坏。
- 数据库中重要或敏感的数据被泄露。
- 安全环境的脆弱性。
4.2 数据库安全性控制
用户身份鉴别:
- 静态口令鉴别
- 动态口令鉴别
- 生物特征鉴别
- 智能卡鉴别
存取控制:
- 定义用户权限,并将用户权限登记到数据字典中。
- 合法权限检查。
自主存取控制(Discretionary Access Control,DAC):
用户权限是由两个要素组成的:数据库对象和操作类型。定义存取权限称为授权(authorization)。
存取控制的对象不仅又数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)
强制存取控制(Mandatory Access Control,MAC):
强制存取控制是系统为保证更高程度的安全性,用户不能直接感知或进行控制。强制存取控制适用于那些对数据有严格而固定密级分类的部门。
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。对于主体和客体,数据库系统为它们每个实例(值)指派一个敏感度标记(label)。
敏感度标记被分为若干级别,例如绝密(Top Secret,TS)、机密(Secret,S)、可信(Confidential,C)、公开(Public,P)等。
当某一用户(或某一主体)以标记lable注册系统时,系统要求它对任何客体的存取必须遵守如下规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
如果违反了规则2,就有可能把数据的密级从高流向低,造成数据的泄漏。
强制存取空值是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
4.3 其他
视图机制: 通过视图机制把要保密的数据对无权存取的用户隐藏起来。
审计: 审计功能把用户对数据库的所有操作自动记录下来放入审计日志(audit log)中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取的人、时间和内容等。
数据加密: 包括存储加密和传输加密。
其他还有推理控制以及数据库应用中隐蔽信道和数据隐私保护等技术。
5. 数据库完整性
数据库完整性(integrity)是指数据的正确性(correctness)和相容性(compat-ability)。
为维护数据库的完整性,数据库管理系统必须能实现以下功能:
- 提供完整性约束条件的机制。
- 提供完整性检查的方法。
- 进行违约处理。
关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提供一致的数据库完整性。
触发器: 是用户定义在关系表上的一类由事件驱动的特殊过程。