数据库系统(一)基础知识与关系模型


数据库系统(一)基础知识与关系模型

image-20250617162436390

列/字段/属性/数据项

行/元组/记录

关系第一范式:属性不可再分特性

候选码/候选键:关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。

有时,关系中有很多组候选码,例如:
学生(S#, Sname, Sage, Sclass, Saddress)
其中属性S#是候选码,属性组(Sname, Saddress)也是候选码(同名同地址的两个同学是不存在的)

再如
Employee(EmpID, EmpName, Mobile)
每一雇员有唯一的EmpID, 没有两个雇员有相同的手机号Mobile, 则
EmpID是候选码,Mobile也是候选码

主码(Primary Key)/主键

  • 当有多个候选码时,可以选定一个作为主码。
  • DBMS以主码为主要线索管理关系中的各个元组。
  • 例如可选定属性S#作为“学生”表的主码,也可以选定属性组(Sname, Saddress)作为“学生”表的主码。选定EmpID为Employee的主码。

主属性与非主属性

  • 包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性
  • 如 “选课”中的S# , C#为主属性,而Sname, Cname, Grade则为非主属性;
  • 最简单的,候选码只包含一个属性
  • 最极端的,所有属性构成这个关系的候选码,称为全码(All-Key)。
    • 比如:关系“教师授课”(T#,C#)中的候选码(T#,C#)就是全码。

外码(Foreign Key)/外键

  • 关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。
  • 例如“合同”关系中的客户号不是候选码,但却是外码。因它与“客户”关系中的候选码“客户号” 相对应。
  • 两个关系通常是靠外码连接起来的。

关系模型中的完整性

实体完整性

  • 关系的主码中的属性值不能为空值;
  • 空值:不知道或无意义的值;
  • 意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。

参照完整性

  • 如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2 中某个元组的Pk 值,或者为空值
  • 意义:如果关系R1的某个元组t1参照了关系R2的某个元组t2,则t2必须存在
    例如关系Student在D#上的取值有两种可能:
    • 空值,表示该学生尚未分到任何系中
    • 若非空值,则必须是Dept关系中某个元组的D#值,表示该学生不可能分到一个不存在的系中

用户自定义完整性

  • 用户针对具体的应用环境定义的完整性约束条件
  • 如S#要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4以内

DBMS对关系完整性的支持

  • 实体完整性和参照完整性由DBMS系统自动支持
  • DBMS系统通常提供了如下机制:
    (1)它使用户可以自行定义有关的完整性约束条件
    (2)当有更新操作发生时,DBMS将自动按照完整性约束条件检验更新操作的正确性,即是否符合用户自定义的完整性

关系模型之关系代数

(1)集合操作

image-20250618162046173

(2)纯关系操作

image-20250618162118388

关系代数之基本操作

某些关系代数操作,如并、差、交等,需满足“并相容性”
并相容性

  • 参与运算的两个关系及其相关属性之间有一定的对应性、可比性或意义关联性

  • 定义:关系R与关系S存在相容性,当且仅当:
    (1) 关系R和关系S的属性数目必须相同;
    (2) 对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域相同
    假设:R(A1, A2, … , An) , S(B1, B2, … ,Bm)

    R和S满足并相容性:n = m 并且 Domain(Ai) = Domain(Bi)

并(Union)

  • 定义:假设关系R和关系S是并相容的,则关系R与关系S的并运算结果也是一个关系,记作:R ∪S, 它由或者出现在关系R中,或者出现在S中的元组构成。
  • 数学描述: R ∪S ={ t | t∈R $\lor$ t∈S } ,其中t是元组
  • 并运算是将两个关系的元组合并成一个关系,在合并时去掉重复的元组。
  • R ∪S 与 S ∪R 运算的结果是同一个关系

差(Difference)

  • 定义:假设关系R 和关系S是并相容的,则关系R 与关系S 的差运算结果也是一个关系,记作:R - S, 它由出现在关系R中但不出现在关系S中的元组构成。
  • 数学描述: R - S ={ t | t∈R $\land$ t $\notin$ S } ,其中t是元组
  • R - S 与 S - R 是不同的

广义笛卡尔积 (Cartesian Product)

  • 定义:关系R (<a1 , a2, …, an >) 与关系S(<b1, b2, …, bm >) 的广义笛卡尔积(简称广义积,或 积 或笛卡尔积) 运算结果也是一个关系,记作: R x S, 它由关系R中的元组与关系S的元组进行所有可能的拼接(或串接)构成。

  • 数学描述: R x S ={ <a1 , a2, …, an, b1, b2, …, bm> | <a1 , a2, …, an > $\in\land$<b1, b2, …, bm> $\in$ S }

  • R x S = S x R : R x S为R中的每一个元组都和S中的所有元组进行串接。 S x R为S中的每一个元组都和R中的所有元组进行串接。结果是相同的。

  • 两个关系R和S,它们的属性个数分别为n和m(R是n度关系,S是m度关系)

    则笛卡尔积 R x S的属性个数 = n + m。即元组的前n个分量是R中元组的分量,后m个分量是S中元组的分量(R x S是n+m度关系).

  • 两个关系R和S,它们的元组个数分别为x和y(关系R的基数x, S的基数y),
    则笛卡尔积R x S的元组个数 =x * y。(R x S的基数是x * y).

选择(Select)

  • 定义:给定一个关系R, 同时给定一个选择的条件condition(简记con), 选择运算结果也是一个关系,记作$\sigma$con(R) , 它从关系R中选择出满足给定条件condition的元组构成。
  • 数学描述: $\sigma$con(R)={t | t (R)={t | t $\in$ R $\land$ con(t) = con(t) = ‘真’} ,
    • 设R(A1 ,A2 , … ,An), t是R的元组, t 的分量记为t[Ai], 或简写为Ai
    • 条件con由逻辑运算符连接比较表达式组成
    • 逻辑运算符: $\land,\lor,\neg$ 或写为 and , or, not
    • 比较表达式:X $\theta$ Y, 其中X, Y 是t的分量、常量或简单函数, $\theta$是比较运算符, $\theta \in { >,\ \geq,\ <,\ \leq,\ =,\ \neq }$

投影(Project)

  • 定义:给定一个关系R, 投影运算结果也是一个关系,记作 $ \Pi_{A}(R) $, 它从
    关系R中选出属性包含在A中的列构成。

  • 数学描述: $$ \Pi_{A_{i1}, A_{i2}, \ldots, A_{ik}}(R) = \left{ \langle t[A_{i1}], t[A_{i2}], \ldots, t[A_{ik}] \rangle \mid t \in R \right} $$

    设R(A1 ,A2 , … ,An)

    { Ai1, Ai2, … ,Aik }  { A1 ,A2 , … ,An }

    t[Ai]表示元组t中相应于属性Ai的分量

    投影运算可以对原关系的列在投影后重新排列

  • 投影操作从给定关系中选出某些列组成新的关系, 而选择操作是从给定关系中选出某些行组成新的关系

  • 如果投影后有重复元组,则应去掉

用户可以根据需要通过投影、选择操作查询他所关心的数据信息。

关系代数之扩展操作

交(Intersection)

  • 定义:假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,记作:R ∩S, 它由同时出现在关系R和关系S中的元组构成。
  • 数学描述: R∩S ={ t | t∈R $\land$ t∈S } ,其中t是元组 R∩S 和 S∩R 运算的结果是同一个关系
  • 交运算可以通过差运算来实现:
    R ∩ S = R - (R - S) = S - (S - R)

$\theta$-连接($\theta$-Join, theta-Join)

  • 投影与选择操作只是对单个关系(表)进行操作, 而实际应用中往往涉及多个表之间的操作, 这就需要连接操作
  • 比如:查询数据结构成绩在90分以上的学生姓名(涉及Student, Course, SC)
  • 定义:给定关系R和关系S, R与S的连接运算结果也是一个关系,记作$R\bowtie S$ ,它由关系R和关系S的笛卡尔积中, 选取R中属性A与S中属性
    B之间满足$\theta$ 条件的元组构成。
  • 数学描述:$$ R \times S = \sigma_{t[A]\ \theta\ s[B]}(R \times S) $$
  • 设R(A1 ,A2 , … ,An), A { A1 ,A2 , … ,An }
    S(B1 ,B2 , … ,Bm), B { B1 ,B2 , … ,Bm }
    t是关系R中的元组,s是关系S中的元组
    属性A和属性B具有可比性

等值连接(Equi-Join)

  • 定义:给定关系R和关系S, R与S的等值连接运算结果也是一个关系,记作 ,它由关系
    R和关系S的笛卡尔积中选取R中属性A与S中属性B上值相等的元组所构成。

自然连接(Natural-Join)

  • 定义:给定关系R和关系S, R与S的自然连接运算结果也是一个关系,记作 ,它由关系R和关系S的笛卡尔积中选取相同属性组B上值相等的元组所构成。

关系代数之复杂扩展操作

除(Division)

外连接(Outer-Join)

  • 定义:两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称之为外连接(Outer Join)。
  • 外连接 = 自然连接 (或连接) + 失配的元组(与全空元组形成的连接)
  • 外连接的形式:左外连接、右外连接、全外连接
  • 左外连接 = 自然连接(或连接) + 左侧表中失配的元组
  • 右外连接 = 自然连接(或连接) + 右侧表中失配的元组
  • 全外连接 = 自然连接(或连接) + 两侧表中失配的元组

关系运算的安全性

“不产生无限关系和无穷验证的运算被称为是安全的”

关系代数是一种集合运算,是安全的

  • 集合本身是有限的,有限元素集合的有限次运算仍旧是有限的。

关系演算不一定是安全的

关系运算有三种:关系代数、关系元组演算和关系域演算

  • 三种关系运算都是抽象的数学运算,体现了三种不同的思维
  • 关系代数—以集合为对象的操作思维,由集合到集合的变换
  • 元组演算—以元组为对象的操作思维,取出关系的每一个元组进行验证,有一个元组变量则可能需要一个循环,多个元组变量则需要多个循环
  • 域演算—以域变量为对象的操作思维,取出域的每一个变量进行验证看其是否满足条件

三种运算之间是等价的

  • 关系代数 与 安全的元组演算表达式 与 安全的域演算表达式 是等价的。即一种形式的表达式可以被等价地转换为另一种形式
  • 三种关系运算都可说是非过程性的
  • 相比之下:域演算的非过程性最好,元组演算次之,关系代数最差
  • 三种关系运算虽是抽象的,但却是衡量数据库语言完备性的基础
  • 一个数据库语言如果能够等价地实现这三种关系运算的操作,则说该语言是完备的
  • 目前多数数据库语言都能够实现这三种运算的操作,在此基础上还增加了许多其他的操作,如赋值操作、聚集操作等

文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录