关系型数据库
- 绪论
- 概念间的关系
- 数据库的历史
- 信息和数据
- 数据模型
- 关系模型
- 数据结构
- 关系完整性
- 关系操作
- 语言
- 关系代数语言
绪论
概念间的关系
数据->数据库->数据库管理系统->数据库系统
数据库的历史
人工管理阶段 -> 文件系统阶段 -> 数据库系统阶段
数据库系统结构:三级模式、二级映射
- 外模式:用户
- [概念]模式
- 内模式:数据库的物理存储
信息和数据
信息抽象于现实,可用E-R图描述,包括:
- 实体 entity :具体的事物 或 抽象概念 或 他们之间的联系
- 实体集 entity set
- 属性 attribute
- 属性域 domain :属性的取值范围
- 码 key :唯一标识实体的属性(集)
- 实体型 entity type
- 联系 relationship
不同实体型之间有三种联系:1:1,1:n,m:n (可以没有)
数据由信息转化,对应计算机,包括:
- 字段 field 或数据项 data item:标记实体的属性
- 记录 record
- 记录型
- 文件
- 码 key
数据模型
分类:层次模型 hierarchical model ,网状模型 network model,关系模型 relational model ,面向对象数据模型 object oriented data model ,对象关系数据模型,半结构化数据模型等
操作:增删改查
数据结构:
- 码、主关键字 primary key:唯一标识
- 域 domain
- 行=元组 tuple =记录
- 列=属性 attribute =字段
- 主属性包括主码、候选码
- 分量
完整性约束:实体完整性、参照完整性、用户定义完整性(用户自定义域)
关系模型
描述:关系名(属性1,属性2,……属性n)
关系的每一个分量必须是不可分的数据项
数据结构
- 域 domain
值域,表示属性的取值范围
域中所包含的值的个数称域的基数(m) - 笛卡尔积 cartesian product
D 1 × D 2 = { ( d 1 , d 2 ) ∣ d i ∈ D i } D_1\times D_2=\{(d_1,d_2)|d_i\in D_i\} D1×D2={(d1,d2)∣di∈Di}
( d 1 , d 2 ) (d_1,d_2) (d1,d2)为 [二]元组,其中的每一个值叫做分量
笛卡尔积的基数是各域的基数之积 - 关系 relation
笛卡尔积的子集叫在域D1,…Dn上的关系,表示为 R ( D 1 , D 2 , . . . , D n ) R(D_1,D_2,...,D_n) R(D1,D2,...,Dn)
R是关系的名字,n是关系的目或度
若关系中,某一属性组的值能唯一地标识一个元组,而其子集不能,则称候选码,候选码的诸属性称为主属性。候选码可只包含一个属性,也可能包含全部属性,此时称为全码。
从候选码中选出一个来作为主码,主码也可以是多个属性共同构成的。
外部码,在本关系中不是码,但是其他某一关系的码。
笛卡尔积没有意义,其子集才有意义。关系必须是有限集合。
关系可有:基本表(实际)、查询表、视图表(虚表)
关系完整性
- 实体完整性 entity integrity
主属性不能取空 - 参照完整性 referential integrity
属性F是关系R的属性但不是R的码,K是关系S的主码,F与K定义在同一个域上(相对应),则F是R的外部码,R是参照关系,S是被参照关系(目标关系),R中任一元组在F上的值为:F=S中某个元组的K值 或 空值 - 用户定义完整性 user-defined integrity
用户自定义域
关系操作
增删改查
查询包括:选择、投影、连接、除、并、差、交、笛卡尔积
标粗的是基本操作,其他操作可以用五种基本操作来定义和导出
语言
- 关系代数语言 relational algebra 查询 ISBL
- 关系演算语言 relational calculus 查询 元组演算:ALPHA 域演算:QBE
- 关系数据库标准语言 SQL(structured query language) 更加强大
只需要给出查询,不需要考虑如何实现查询
关系代数语言
集合运算:
- 并union:R和S具有相同目n,且相应属性取自同一个域 R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t|t\in R\vee t\in S\} R∪S={t∣t∈R∨t∈S}
- 差except:R和S具有相同目n,且相应属性取自同一个域 R − S = { t ∣ t ∈ R ∧ t ∉ S } R- S=\{t|t\in R\wedge t\notin S\} R−S={t∣t∈R∧t∈/S}
从R中减去和S相同的 - 交intersection:R和S具有相同目n,且相应属性取自同一个域 R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\{t|t\in R\wedge t\in S\} R∩S={t∣t∈R∧t∈S}
- 广义笛卡尔积 cartesian product:连接
引入表示符号:
-
关系 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An)
有 t ∈ R , t\in R, t∈R,其中t是元组
t [ A i ] t[A_i] t[Ai]表示元组t中的分量Ai
A是属性列/域列
A ˉ \bar{A} Aˉ表示从关系中去掉A属性后剩余的属性组 -
R是n目关系,S是m目关系, t r ∈ R , t s ∈ S t_r\in R,t_s\in S tr∈R,ts∈S
是元组的连接 concatenation,是一个(n+m)列的元组 -
给定关系R(X,Z),XZ为属性组,定义当t[X]=x时,x在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中属性组X上值为x的各元组在Z上分量的集合
关系运算:
- 选择运算 selection/restriction:选择元组 σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = t r u e } \sigma_F(R)=\{t|t\in R\wedge F(t)=true\} σF(R)={t∣t∈R∧F(t)=true}
F是一个公式,由逻辑运算符 ∨ ∧ ¬ \vee \wedge \neg ∨∧¬连接算数表达式 > < ≥ ≤ = ≠ > < \ge \le = \ne ><≥≤==构成 - 投影运算projection:选择列 π A ( R ) = { t [ A ] ∣ t ∈ R } \pi_A(R)=\{t[A]|t\in R\} πA(R)={t[A]∣t∈R},取消重复行
- 连接运算join: R ⋈ F S R\underset{F}{\Join} S RF⋈S
- 等值连接:F中算数表达式是=, R ⋈ A = B S R\underset{A=B}{\Join} S RA=B⋈S
- 自然连接(常用且默认):进行比较的分量必须是相同的属性,并且在结果中去掉重复的属性 R ⋈ S R\underset{}{\Join} S R⋈S,会有悬浮元组消失
- 半连接 :自然连接后仅保留对R属性的投影
- 左外连接:若S中找不到匹配的元组,则不匹配的元素用空值匹配
- 右外连接:若R中找不到匹配的元组,则不匹配的元素用空值匹配
- 全外连接:所有不匹配的元组均用空值匹配
- 除:R(X,Y),S(Y,Z), R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Y X ⊇ π Y ( S ) } R\div S=\{t_r[X]|t_r\in R\wedge Y_X\supseteq \pi_Y(S)\} R÷S={tr[X]∣tr∈R∧YX⊇πY(S)}
X的象集Yx包含S在Y上的投影
运算之间的转换:
R ∩ S = R − ( R − S ) 或 S − ( S − R ) R\cap S=R-(R-S)或S-(S-R) R∩S=R−(R−S)或S−(S−R)
R ÷ S = π X ( R ) − π X ( ( T ∗ π Y ( S ) − R ) R\div S=\pi_X(R)-\pi_X((T*\pi_Y(S)-R) R÷S=πX(R)−πX((T∗πY(S)−R)
此处应看ppt