一、关系模型简述

1.1 关系模型的提出

* 最早由E.F.Codd在1970年提出
* 是从表(Table)及表的处理方式中抽象出来的,是在对传统表及其操作进行数学化严格定义基础上,引入集合理论与逻辑学理论提出的
* 是数据库的三大经典数据模型之一,也是现在大多数商品化数据库系统所仍然使用的数据模型
* 标准的数据库语言(SQL语言)是建立在关系模型基础之上的,数据库领域的众多理论也是建立在关系模型基础之上的
1.2 关系模型研究什么

* 形象的说,一个关系(relation)就是一个Table
* 关系模型就是处理Table的,它由三个部分组成
* 描述DB各种数据的基本结构形式(Table/Relation)
* 描述Table与Table之间所可能发生的各种操作(关系运算)
* 描述这些操作所应遵守的约束条件(完整性约束)

1.3 关系模型的三要素

* 基本结构:Relation/Table
* 基本操作:Relation Operator
* υ(并, UNION)、-(差, DIFFERENCE)、×(广义积, PRODUCT)、σ(选择, SELECTION)、∏(投影,
PROJECTION)
* ∩(交, INTERSECTION)、⋈(连接, JOIN)、÷(除, DIVISION)运算
* 完整性约束:实体完整性,参照完整性和用户自定义完整性
1.4 关系模型与数据库语言的关系

* 关系运算:关系代数和关系演算;关系演算:元组演算和域演算。
* 关系代数示例:基于集合的运算
*
即:操作的对象及结果都是集合,是一次一集合(Set-at-a-time)的操作。而非关系型的数据操作通常是一次一记录(Record-at-a-time)的操作

* 基于关系代数设计的数据库语言(ISBL):用计算机可识别的符号表征关系代数的运算符号

* 元组演算示例:基于逻辑的运算

* 基于关系元组演算设计的数据库语言(Ingres系统的QUEL):用计算机可识别的符号表征元组演算的运算符号 range of t is R range
of u is W retrieve t where t.sage < u.sage
* 域演算示例:基于示例的运算

* 基于域演算设计的数据库语言示例:QBE(Query By Example)

1.5 为什么要学习关系模型与关系数据库语言

二、什么是关系

2.1 “表”的基本构成要素

2.2 “表”的严格定义--关系

2.2.1 定义“列”的取值范围“域(Domain)”

* 域(Domain)
* 一组值的集合,这组值具有相同的数据类型
* 如整数的集合、字符串的集合、全体学生的集合
* 再如,由8位数字组成的数字串的集合,由0到100组成的整数集合
* 集合中元素的个数称为域的基数(Cardinality)

2.2.2 "元组"及所有可能组合成的元组:笛卡尔积

* 笛卡尔积(Cartesian Product)
* 一组域的笛卡尔积为:
* 笛卡尔积的每个元素称作一个n-元组(n-tuple)
* 元组的的每一个值叫做一个分量(component)
* 元组是从每一个域任取一个值所形成的一种组合,笛卡尔积是所有这种可能组合的集合,即:笛卡尔积是由n个域形成的所有可能的n-元组的集合
* 若的基数是,则笛卡尔积的基数,即元组的个数为

2.2.3 关系

* 一组域的笛卡尔积的子集
* 笛卡尔积中具有某一方面意义的那些元素元组被称作一个关系(Relation)
* 由于关系的不同列可能来自同一个域,为了区分,需要为每一个列起一个名字,该名字即为属性名
* 关系可用表示,可简记为,这种描述又被称为关系模式(Schema)或者标题(head)
* R是关系的名字,是属性,是属性所对应的域,n是关系的度或目(degree),关系中的元组数目称为关系的基数(Cardinality)
* 关系模式中属性向域的映像在很多DBMS中一般直接说明为属性的类型,长度等

2.2.4 关系模式与关系

* 同一关系模式下,可有很多的关系
* 关系模式是关系的结构,关系是关系模式在某一时刻的数据
* 关系模式是稳定的;而关系是某一时刻的值,是随时间可能变化的

2.3 关系的特性

* 列是同质:即每一列中的分量来自同一域,是同一数据类型

* 不同的列可来自同一个域,称其中的每一个列为一个属性,不同的属性要给予不同的属性名
* 关系模式中,必须是不同的,而可以是相同的
* 例如:我们定义一个域为Person=所有男人、女人和儿童的集合={李基,张
鹏,王芳,刘玉,李健,张睿,张峰},则下述“家庭”关系的三个列将来自同一个域Person,因此需要不同的属性名“丈夫”“妻子”“子女”以示区分

* 列位置互换性:区分哪一列是靠列名
* 行位置互换性:区分哪一行是靠某一列或某几列的值(关键字/键字/码字)
* 关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分
* 如下面两个关系是完全相同的关系

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

* 属性不可再分特性:又称为关系第一范式

2.4 关系上的一些重要概念

2.4.1 候选码/候选键

* 关系中的一个属性组,其值能唯一表示一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。
* 例如:“学生(S#, Sname, Sage, Sclass)”,S#就是一个候选码,在此
关系中,任何两个元组的S#是一定不同的,而这两个元组的Sname, Sage, Sclass都可能相同(同名、同龄、同班),所以S#是候选码。
* 在例如:“选课(S#, C#, Sname, Cname, Grade)”,(S#,C#)联合起来是一 个候选码
* 有时,关系中有很多组候选码
* 例如:学生(S#, Sname, Sage, Sclass, Saddress),其中属性S#是候选码,属性组(Sname,
Saddress)也是候选码(同名同地 址的两个同学是不存在的)
* 在例如:Employee(EmpID, EmpName, Mobile),每一雇员有唯一的EmpID, 没有两个雇员有相同的手机号Mobile, 则
EmpID是候选码,Mobile也是候选码
2.4.2 主码(Primary Key)/主键

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

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

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

三、关系模型中的完整性

3.1 实体完整性

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

3.2 空值及其含义

* 空值的含义
* 空值:不知道、不存在或无意义的值
* 在进行关系操作时,有时关系中的某属性值在当前是填不上的,比如档案中有“生日不详”、“下落不明”、“日程尚待公布”等,这时就需要
空值来代表这种情况。关系模型中用‘?’表征
* 数据库中有了空值,会影响许多方面,如影响聚集函数运算的正确性,不能参加算术、比较逻辑运算等
* 例如:“3 + ?”结果是多少呢? “3 * ?”结果是多少呢? “? and (A=A)”结果又是多少呢?
* 再例如:一个班有30名同学,如所有同学都有成绩,则可求出平均 成绩;如果有一个同学没有成绩,怎样参与平均成绩的计算呢,是当作
0,还是当作100呢?还是不考虑他呢?
* 有空值的时候是需要特殊处理的,要特注意
3.3 参照完整性

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

3.4 用户自定义完整性

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

3.5 DBMS对关系完整性的支持

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

技术
©2019-2020 Toolsou All rights reserved,
css中上下左右居中的几种实现方法[CISCN 2019 初赛]Love Mathc/c++语言实现登陆界面Unity3D 人称设置(第一人称视角、第三人称视角)Fastadmin框架自定义搜索操作流程2021最新Python自动化软件测试笔试题(含答案)黑客帝国装逼的代码雨mysql数据库设置字符集配置修改my.ini文件(windows)python之panda模块1Python学习笔记:基础+进阶10道练习题