数据库系统概论【二】

一、关系模型


1、基本概念

形象地说,一个关系(relation)就是一个Table。关系模型就是处理Table的,它由三个部分组成

  • 描述DB各种数据的基本结构形式(Table/Relation)
  • 描述Table与Table之间所可能发生的各种操作(关系运算)
  • 描述这些操作所应遵循的约束条件(完整性约束)

(1)基本结构

①“列”的取值范围“域(Domain)”

域是一组具有相同数据类型的值的集合,如整数的集合、字符串的集合、全体学生的集合

集合中元素的个数称为域的基数(Cardinality)

②“元组”及所有可能组合成的元组:笛卡尔积(Cartesian Product)

笛卡尔积是由n个域形成的所有可能的n-元组的集合,也就是所有域取值的任意组合

若Di的基数为mi,则笛卡尔积的基数,即元组个数为:m1×m2×…×mn

③关系(Relation)

关系(Relation)是一组域D1 , D2 ,…, Dn的笛卡尔积的子集

笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation)

④属性名

由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个名字,该名字即为属性名。

⑤关系模式(Schema)或表标题(head)

关系可用R(A1:D1 , A2:D2 , … , An:Dn )表示,可简记为R(A1 , A2 , … ,An )这种描述又被称为关系模式(Schema)或表标题(head)在计算机中域名及属性向域的映象常常直接说明为 属性的类型、长度例如:

Student( S# char(8), Sname char(10), Ssex char(2),Sage integer, D# char(2), Sclass char(6) )

R是关系的名字, Ai 是属性, Di 是属性所对应的域, n是关系的度或目(degree), 关系中元组的数目称为关系的基数(Cardinality)

例如:家庭(丈夫:男人,妻子:女人, 子女:儿童)或家庭(丈夫,妻子, 子女)

关系模式是对关系的描述, 关系是关系模式在某一时刻的数据,所有同一关系模式下,可有很多的关系

例如:

⑥码(key)
  • 候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,则称该属性
    组为候选码
    • 所以候选码可以是一个或者多个且关系中可以有很多组候选码,即具有几组选择,没一组都是可以唯一表示一个元组,例如学生学号,和学生的家庭住址+名字,就是两组候选码
  • 全码(All-key):最极端的情况:关系模式的所有属性组是这个关系模式的候选码,
    称为全码(All-key)
  • 主码:若一个关系有多个候选码,则选定其中一个为主码(Primary key)DBMS以主码为主要线索管理关系中的各个元组
  • 主属性:候选码的诸属性称为主属性(Prime attribute)不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)
    • 有多组候选码则这些组中的属性每一个都是主属性
  • 外码(Foreign Key)/外键:关系R中的一个属性组(可一个或多个),它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。两个关系通常是靠外码连接起来的。
    • 外码是非主属性的子集的值
    • 一个关系中含有外码,则该关系称为为参照关系(Referencing Relation),以该外码为主码的关系称为被参照关系(Referenced Relation)或目标关系(Target Relation)可以理解为作为外码就是参照该码作为候选码的关系的信息来构建的
    • 一个关系可以是参照关系同时也可以是被参照关系

例如“合同”关系中的客户号不是候选码,但却是外码。因它与“客户”关系中的候选码“客户号” 相对应。

⑦基本关系的性质
  • 列是同质的(Homogeneous),即来自同一个属性,每一列中的分量来自同一域,是同一类型的数据

列不同质的例子:

  • 不同的列可出自同一个域
  • 列的顺序无所谓,列的次序可以任意交换,即区分哪一列是靠列名
  • 行的顺序无所谓,行的次序可以任意交换,即:区分哪一行是靠某一或某几列的值(关键字/键字/码字)
  • 任意两个元组的候选码不能相同
  • 分量必须取原子值
    • 若纵向具有合并项,可以拆开;若横向具有合并项则需要分成两个表。这是一般处理
⑧关系和表的联系

理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有相同的两个元素);现实应用中,表(Table)可能并不完全遵守此特性。

关系是对表的数学描述,表示关系的体现,在现实应用中,表可以出现一些元素相同的特殊情况,而作为严格的数学,关系则不能

(2)基本操作

之后再细致介绍

(3)完整性约束

关系的三类完整性约束:实体完整性、参照完整性、用户定义的完整性

①实体完整性(Entity Integrity)

实体完整性要求每个表都有唯一标识符,每一个表中的主键字段不能为空或者重复的值。

关系的主属性不能取空值,空值就是“不知道”或“不存在”或“无意义”的值

关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。

非主属性可以取空指,但不提倡在进行关系操作时,有时关系中的某属性值在当前是填不上的,比如档案中有“生日不详”、“下落不明”、“日程尚待公布”等,这时就需要空值来代表这种情况。关系模型中用‘?’表征。数据库中有了空值,会影响许多方面,如影响聚集函数运算的正确性,不能参与算术、比较或逻辑运算等。有空值的时候是需要特殊处理的,要特别注意。

②参照完整性规则

参照完整性要求关系中不允许引用不存在的实体。设定相应的更新删除插入规则来更新参考表。

如果关系R1的外码Fk与关系R2的主
码Pk相对应,则R1中的每一个元组的
Fk值或者等于R2 中某个元组的Pk 值,
或者为空值

即如果关系R1的某个元组t1参照了关系R2的某个元组t2,则t2必须存在。

例如:R1的专业选项D#的值必须是专业关系中存在的值

③用户自定义完整性

即用户针对具体的应用环境定义的完整性约束条件

例如:

二、关系代数


1、关系代数操作包括:集合操作和纯关系操作

2、为什么要提出关系代数

SQL实际上就是一个程序,SQL语言描述的就是各种关系运算,DBMS解析为关系模型的基本运算,再执行各种基本运算。用户只需要使用SQL语言即可,非常方便

3、基本操作

(1)补充:并相容性

定义:关系R和关系S的属性数目必须相同,对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域相同

例如:

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

(2)“并”操作

定义:假设关系R和关系S是并相容的,则关系R与关系S的并运算结果也是一个关系,记作:R ∪S, 它由或者出现在关系R中,或者出现在S中的元组构成。

通俗:并运算就是将两个关系的元组合并成一个关系,在合并时去掉重复的元组。

例如:

(3) “差”操作

定义:假设关系R 和关系S是并相容的,则关系R 与关系S 的差运算结果也是一个关系,记作:R- S, 它由出现在关系R中但不出现在关系S中的元组构成。

通俗:差运算就是保留R中各个不再S中的元组

例:

(4) “笛卡尔积”操作

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

通俗:积运算就是R中的元组和S中的元组,以元组为单位,进行组合排列的结果组成一个新表

例如:

(5)“选择”操作

给定一个关系R, 同时给定一个选择的条件condition(简记con), 选择运算结果也是一个关系,记作con(R) , 它从关系R中选择出满足给定条件condition的元组构成。

通俗:就是选择符合条件的元组(行)

条件的书写很重要:

θ可以为:>、=、<、<>、≥、≤

例如:

(6)“投影”操作

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

通俗:就是选择符合条件的属性(列)

例如:

4、扩展操作

所有的扩展操作都能通过基础操作表达实现

(1)交(Intersection)

定义:假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,记作:R ∩S, 它由同时出现在关系R和关系S中的元组构成。

通俗:交运算就是将取交集元组

*注意:交运算可以通过差运算来实现R∩ S = R - (R - S) = S - (S - R) *

例如:

(2)“连接”操作

本质:两个关系的笛卡尔积经过选择操作的结果,只是选择条件必须是两个具有可比性的属性

注意:虽然我们理解成先积后选,但是实际上当引入连接操作后,DBMS可直接进
行连接操作,而不必先形成笛卡尔积,效率更高。原因之后会学到

例如:

(3)“等值-连接”操作

等值连接是一种特殊的连接

本质:两个关系的笛卡尔积经过选择操作的结果,只是选择条件必须是两个具有可比性的属性且比较符号为=

例如:

(4) “自然连接”操作

自然连接是一种特殊的等值连接

本质:两个关系的笛卡尔积经过选择操作的结果,只是选择条件必须是两个相同属性且1、比较符号为=2、属性组是相同的可去掉一组

(5) “除”操作

除法常用于“包含了所有的”这种字样,一般S就是“XX所有的”这种XX条件表示

除操作的结果保证和S进行积操作的结果全部在R中

!R中减去S的属性,剩下的属性能够包含所有的S的属性的行选择出来!

通俗:若为R÷S,则选择R中对应属性含有S的属性值元组,在每个元组中除了S的属性组中的属性组,找出能和所有的S元组构成当前R中元组的属性组。例如:

  • (1)中S为属性A3,所含元组为c,则在R中找到前三组,因为S中只有一个元组c,所以对应R中三个元组前面的A1、A2值组成的元组就组成的最后的R÷S结果
  • (2)中S为属性A3,所含元组为c、f、g、h,则在R中找到前七组被A3分为四类,这四类元组中只有(a,e)都存在于四类元组中,所以为最后的R÷S结果
  • (3)(4)均为如此

“除”操作的基础操作解释:

(6)“外连接”操作

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

悬浮元组(Dangling tuple):两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组。

外连接具有三种形式:左外连接、右外连接、全外连接

*通俗:就是在连接的基础上,对于找不到匹配元组的元组,进行保留防止信息丢失,那边开那边元组数目不丢失,不匹配的相关信息使用?或null标记 *

全外连接:

左外连接和右外连接:

*SELECT __ From __ Where__ *

*Π、([表、连接])、σ *

not in —> -(差)

    • θ可以为:>、=、<、<>、≥、≤

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~