数据库概论

关系数据库系统

2020-01-01 00:13 CST
2020-01-01 00:13 CST
CC BY-NC 4.0

关系数据库系统

关系数据库系统

3.1 关系数据库系统概述

3.2 关系数据库系统的衡量准则

  • 完全关系型的十二条衡量准则
  • 空值(NULL)的定义

3.3 关系模型数学理论—关系代数

3.3.0 关系模型(概念)

  • 关系数据结构
  • 表结构(表头):表框架,表的元数与基数
  • 关系:关系的性质
  • 关键字:候选关键字,主关键字,外关键字
  • 关系数据库:关系子模式-视图(view)
  • 关系操纵
  • 数据查询:两个关系的合并,单个关系内的元组选择,单个关系内的属性指定
  • 元组的删除、插入、修改
  • 空值的处理
  • 关系中的数据约束
  • 实体完整性约束,参照完整性约束,用户定义的完整性

3.3.1 关系的表示

  • 关系的表示,迪卡尔乘积

3.3.2 关系操纵的表示

  • 关系代数中的五种基本运算:选择,投影,笛卡儿积,并,差(请注意每个运算符的执行条件和结果关系的关系模式)
  • 基本运算的应用

3.3.3 关系模型与关系代数

3.3.4 关系代数中的扩充运算

  • 交,除法,联接与自然联接,θ-联接
  • 扩充运算与基本运算之间的关系
  • 扩充运算的应用实例

3.3.5 关系代数的应用

  • 综合的关系代数应用表示,复杂查询的关系代数表达式
  • 关系代数的应用
  • 单个关系上的选择与投影
  • 两个关系的并、交、差
  • 两个关系的迪卡尔乘积、自然联接、θ-联接
  • 两个关系的除法

难点

  • 查询条件带有‘否定’语义:‘不等’比较 & 减法运算
  • 使用表联接查询,还是使用除法?
  • 正确使用自然连接运算 和 除法运算
  • 表的自联接

3.3.6 关系演算

  • 原子公式,公式的定义
  • 基于关系演算的数据查询表示:单表查询,多表连接查询,复杂查询的表示(逻辑非、蕴涵操作符)

关系数据库系统衡量准则

十二条标准:

  • 信息准则(关系数据库中的所有信息都能在逻辑一级唯一的用表中的值显示表示,结构描述信息在逻辑上组织成关系形式)
  • 确保访问准则(能够用逻辑方式依靠表名、关键字值与列名的组合来访问数据库中每一个原子数据)
  • 空值的关系处理准则(系统应当具有处理空值的能力,空值:无意义或当前未知的值)
  • 基于资源管理的动态联机目录(数据库的描述信息数据字典与用户数据有着相应的形式与操作方式)
  • 统一易用的数据子语言(数据定义、视图定义、数据操纵、完整性约束能力、授权机制、事务处理能力)
  • 视图更新准则
  • 高级的插入、删除及修改操作
  • 物理数据独立性
  • 逻辑数据独立性
  • 数据完整性准则
  • 分布独立性
  • 无损害准则

关系代数

关系模型

二维表的组成:

  • 表框架(n个命名的属性,n被称为表的元数
  • 元组(一个表框架存放了m个元组,m称为表的基数)

满足以下7个性质的二维表称为关系

  • 元组个数有限
  • 元组唯一
  • 元组次序无关
  • 元组分量的原子性
  • 属性名唯一性
  • 属性名次序无关性
  • 分量值域同一性

Relational Rules:

  • Rule 1. First Normal Form Rule:Can't have multi-valued fields.
  • Rule 2. Access Rows by Content Only Rule
    • No order to the rows
    • No order to the columns
  • Rule 3. The Unique Row Rule
    • Two rows can't be same in all attributes at once. So that a relation is an unordered SET of tuples.
    • But many products allow this for efficiency of load.

每个关系都有一个名称关系名,关系中的每一个属性有一个名称属性名,关系名和所有的属性名构成了关系框架

超键:set of colunms that has the uniqueness property

键:minimal superkey

候选关键字,主关键字,外关键字

待补充:关系数据库:关系子模式-视图(view)

关系操纵

查询:单表查询可以有纵向定位(行选择)横向定位(选择列),多表查询先将多张表合并再用单表查询操作。可以被分解为三个基本操作:两个关系的合并,单个关系内元组指定,单个关系内属性指定

插入:一条数据插入操作只能向一个关系中增加元组

删除:删除的基本单位是元组,一次操作只能删除一个关系内的元组

修改:不是一个基本操作,可以通过先删再插的操作实现

操纵对象是关系

空值处理

关系的主键中不允许出现空值(完整性约束)

算数表达式中出现空值,结果为空值

逻辑表达式中出现空值,为逻辑假

如果是出现了集合中的空值元素,那么仍可使用SUM,AVG,MAX,MIN,COUNT等统计运算,空值不被计算

如果是对空集进行统计运算,则SUM,AVG,MAX,MIN为空值,COUNT为0

注意:COUNT(*)是统计元组个数,不存在空值元素问题

三类数据完整性约束

实体完整性约束:主键中的属性不为空

参照完整性约束:外键要么取空值,要么是被引用表中当前存在的某元组上的主键值

用户定义的完整性:用户自己定义的属性取值约束

关系操纵的表示

n元关系R是一个n元有序组的集合,关系R是n个属性的属性域的笛卡尔乘积的子集

关系上的基本操作与关系代数中的五种基本运算:

  • 元组选择-选择运算
  • 属性指定-投影运算
  • 关系的合并-笛卡尔乘积
  • 元组的插入-并运算
  • 元组的删除-差运算

相容表(compatible tables):Head(R)=Head(S),属性值域相同(不代表一个表中这个属性的所有值要在另一个表中出现)且有相同的意思

并运算

  • 条件:参与运算的两个关系为同类关系(具有相同属性个数且值域相同)
  • 结果:关系模式不变

差运算(R-S):

  • 条件:参与运算的为同类关系
  • 结果:关系模式不变,由所有属于关系R但是不属于关系S的元组所构成的集合

差运算不满足结合律

投影运算:略去关系中某些列而重新安排剩余列的排列次序的运算 $\pi_{B_1,B_2,..B_m}$

  • 运算结果:一个由 $B_1,B_2,..B_m$ 组成的m元关系,注意消除结果中可能出现的重复元组

选择运算:根据给定条件F从关系R中选出符合条件的元组, $\sigma_F(R)$

  • 结果:关系模式不变,由属于R且满足F的元组组成

可以解和投影与选择来实现单张表中的数据查询,在没有括号的情况下,运算顺序从右到左

笛卡尔乘积:两个关系的合并运算,$R\times S$,若R,S分别有n,m个属性,p,q个元组,则笛卡尔乘积有$n+m$ 个属性,$pq$ 个元组

如果笛卡尔乘积中存在相同的属性名,必须在结果中选择一个进行换名

关系模型与关系代数

关系:n元有序组的集合

关系操纵:关系上的集合运算

关系代数:$(A,\pi,\sigma,\times,\cup,-)$

注意最大最小的比较的时候用$< \text{or},\leq$.

关系代数中的扩充运算

交运算:

  • 条件:同类关系
  • 结果:关系模式不变,既属于R也属于S的元组
  • 可以用差运算实现 $ R-(R-S) $

除运算($R\div S$):

  • 运算条件:$Head(S)\subset Head(R)$
  • 运算结果:$ Head(T)=Head(R)-Head(S) $ ,结果元组T中的元组在S和R中对应同一个值
  • $$R\div S = \pi_{A_1,..A_n}(R)-\pi_{A_1,..,A_n}((\pi_{A_1,..,A_n}(R)\times S)-R)$$

注意的是用商和除数进行笛卡尔乘积,得到的是原被除数的一个子集

连接运算($\theta-连接$,$R {\bowtie}_{F}S$):对满足条件F的R中和S中的元组合并为一个关系

  • 结果:$Head(T)=Head(R)\cup Head(S)$,不必消除同名属性但是要换名
  • 推导:$\sigma_F(R\times S)$

自然连接:( $R\bowtie S$ ):自动根据两个关系中的同名属性进行等值连接(即把R和S中同名属性相同的连接在一起)

关系代数的应用

在订单类的题目中,如果需要使用减法,注意从订单中减还是顾客/供应商减

关系演算

原子公式,公式的定义

在关系演算中,关系用谓词来表示,关系上的操作可以用**关系演算公式(简称公式)**来表示

元组关系演算:公式中的每个变元都是一个元组

域关系演算:每个变元的取值都是单个的属性值

关系演算就是对于所有在关系中的元组对这个谓词是成真指派,其余全是成假指派

原子公式:

  • 谓词R(t)是原子公式
  • $ u(i)\theta v(j)$是原子公式,其中u,v为元组变量,u(i)表示元组u上的第i个属性
  • $u(i)\theta a$是原子公式,其中a为常量

所有的目标属性以自由变元的形式出现,其他属性以约束变元的形式出现,如检索学生的学号姓名,可以$\exist sd,sa(S(sno,sn,sd,sa))$.

当变元与常量进行相等比较的时候,可以直接用常量值代替变元出现在谓词中,如$\exist cn,pno(C(cno,cn,pno)\wedge pno='C2')$和$\exist cn(C(cno,cn,'C2'))$是等价的

关系的联结:

  • 可以通过相关谓词的逻辑与运算实现两个关系的笛卡儿乘积:R(p) ∧ S(q)
  • 在1)的基础上再通过选择条件 F 实现两个关系的θ-联结:$R(p) ∧ S(q) ∧ F$
  • 可以通过两个谓词中的公共变元(同名变元)实现两个关系的自然联结:$R(x,y,z) ∧ S(y,u,v)$

自联结:谓词名不变,对部分变元进行重命名,从而实现关系的自联结(同名变元取值相等)

关系演算与关系代数:假设公式$\phi1$代表关系R1,$\phi2$对应R2

  • $\phi1 \wedge \phi2$:
    • 有公共变元表示R1,R2的自然连接
    • 无公共变元表示笛卡尔积
  • $\phi1 \rightarrow \phi2$: $R2 \div R1$