目录
关系数据库系统是支持关系模型的数据库系统。本章将从数据模型的三个组成部分展开,2.4则介绍了关系代数,这是关系数据库系统中实现关系操作的一种语言,2.5介绍关系验算。
2.1关系数据结构及形式化定义
2.1.1关系
关系模型的数据结构很简单,只包含单一的数据结构--关系。
关系模型是建立在集合代数的基础上的,这里从集合论角度给出关系数据结构的形式化定义。
1、域domain--一组具有相同数据类型的值的集合。
2、笛卡儿积--域上的一种集合运算。(直接看例子再看定义)
给定一组域D1,D2,…,Dn,允许其中某些域是相同的。
D1,D2,…,Dn的笛卡儿积为:D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}。‘
笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。
笛卡尔积元素(d1,d2,…,dn)中的每一个值di 叫作一个分量(component)。
一个域的不同取值个数称为这个域的基数(cardinal number)。若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
笛卡尔积可表示为一张二维表
表中的每行对应一个元组,表中的每列对应一个域。
Eg:给出3个域:
D1=导师集合SUPERVISOR={张清玫,刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}
则D1,D2,D3的笛卡尔积为
D1×D2×D3={
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }
其中,(张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨) 等都是元组n-tuple。
张清玫、计算机专业、李勇、刘晨等都是分量component。
基数cardinal number为2×2×3=12,也就是说,D1×D2×D3一共有2x2x3=12个元组。这12个元组可以列成一张二维表:
3、关系relation
1)基本概念
D1,D2,…,Dn的笛卡尔积的某个子集才有实际含义,称之为在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)。其中,R是关系的名称,n是目或度degree。
(注意:关系是笛卡尔积的有限子集。无限关系在数据库系统中是无意义的。)
当n=1时,称该关系为单元关系(Unary relation)或一元关系;
当n=2时,称该关系为二元关系(Binary relation)。
因为关系是笛卡尔积的有限子集,所以关系也可以表示为一张二维表。
元组tuple--关系中的每个元素是关系中的元组,通常用t表示。
属性attribute—每一列。
候选码candidate key—所有可以唯一标识每一个tuple的属性,这些属性叫prime attribute,其他叫no-key attribute或no-prime attribute。当所有属性都是prime attribute时,称为all-key。
主码primary key—指定的一个候选码
Eg:关系SAP(supervisor,specialty,postgraduate)不同属性的域是可以相同的。
2)三类关系
基本关系(基本表或基表)--实际存在的表,是实际存储数据的逻辑表示
查询表--查询结果对应的表
视图表--由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
3)基本关系(基本表或基表)的性质
① 列是同质的(Homogeneous)。列中的分量是同类型数据,
② 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名。
③ 列的顺序无所谓,列的次序可以任意交换
④ 任意两个元组的候选码不能相同
⑤ 行的顺序无所谓,行的次序可以任意交换
⑥ 分量必须取原子值。即每个分量都是不可分的数据项。(属性是不可分割的数据项)
4)范式
关系模型要求关系必须是规范化的,有一定的规范条件。
最基本的一条就是,每个分量都是不可分的数据项,不可以表中有表。
2.1.2关系模式R(U,D,DOM,F)
在数据库中要分清型和值(1.3.1),关系数据库中,关系模型是型,关系是值,关系模型是对关系的描述。
对关系的描述--关系模式,R(U,D,DOM,F):
R:关系名
U:组成该关系的属性名集合
D:U中属性所来自的域
DOM:属性向域的映像集合??DOM(SUPERVISOR)= DOM(postgraduate)= PERSON
F:属性间数据的依赖关系集合??第6章
2.1.3关系数据库
所有关系的集合构成一个关系数据库。
关系数据库也有型和值(1.3.1)之分,型叫做关系数据库模式,是对关系数据库的描述。
2.1.4关系模型的存储结构—再说
2.2关系操作
不同的关系数据库管理系统可以定义和开发不同的语言来实现这些操作。
2.2.1基本的关系操作
包括两大部分:
1)查询query操作(最主要)
选择select、投影project、连接join、除divide、并union、差except、交intersection、笛卡儿积等。选择select、投影project、并union、差except、笛卡儿积是5种基本操作,其他可以由此来导出。
2)插入insert、删除delete、修改update操作
!!关系操作的特点是集合操作方式,即操作的对象和结果都是集合,一次一集合。
2.2.2关系数据语言的分类
早期的关系操作能力通常用代数方式或演算方式来表示,分别称为关系代数和关系演算。
1)关系代数用对关系的运算来表达查询要求;
2)关系演算用谓词来表达查询要求。
3)另外还有介于关系代数和关系演算之间的结构化查询语言Structured Query Language(SQL)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、DDL、DML和DCL于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标注语言。SQL是高度非过程化的语言!
以上三种为抽象的关系数据语言,与具体的某一关系数据库管理系统中实现的实际语言并不完全一样,但这些抽象语言是实际运用的语言的标准或基础。实际的语言还会多一些功能,使得查询语言更加强大。
2.3关系的完整性
关系模型的完整性规则是对关系的某种约束条件。有三类:实体完整性entity integrity、参照完整性referential integrity、用户定义的完整性user-defined integrity。
前两个是关系模型一定要满足的,被称作关系的两个不变性,应该有关系系统自动支持;user-defined integrity是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
2.3.1实体完整性
关系数据库中每个元组应该是唯一的、可区分的,于是有了entity integrity。
实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null)
2.3.2参照完整性
参照完整性用来描述关系与关系之间的关系,参照完整性规则就是定义外键与被参照的主键之间的引用规则。
比如以下两个关系:(下划线为主码)
学生R(学号Kr,姓名,性别,联系方式,专业号F)
专业S(专业号Ks,专业名称,所属学院)
其中,学生的专业号应该对应专业中的专业号,则学生是参照关系,专业是被参照关系。F称为R的外码foreign key。R和S不一定不同。
参照完整性规则:若F是R的外码,与S的Ks相对应,则在R中每个F的值必须:
1)取空值;
2)或者等于S中的Ks的某一个主码值。(一定是主码!!)
2.3.3用户定义的完整性
2.4关系代数
关系代数是一种抽象的查询语言,用对关系的运算来表达查询。
关系代数可以分为传统的集合运算和专门的关系运算两类。
2.4.1传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡儿积四种。
进行集合运算的前提是关系R和关系S具有相同的目n,且相应的属性取自同一个域。
1、并 : R∪S = { t| t∈Rt∈R ∨ t∈St∈S }
2、差 : R-S = { t| t∈Rt∈R ∨ t∉St∉S }
3、交 : R∩S = { t| t∈Rt∈R ∧ t∉St∉S }
4、笛卡儿积 :(以元组为单位)
2.4.2专门的关系运算
(7条消息) 关系代数内容学习(交、并、差、投影、选择、连接、重命名)_five-five的博客-CSDN博客_关系代数投影
1、选择selection—在关系R中选择条件C为真值的元组。注意!是单引号!
2、投影projection—从关系R中选择属性组L组成新的关系,去掉重复元组(因为去掉一些属性后,可能会出现相同的元组)。
3、连接join—从两个关系的笛卡儿积中选择满足一定条件的元组。R ⋈ S
(7条消息) 数据库关系代数详解_Charon_cc的博客-CSDN博客_关系代数
1)非等值连接—R.C和S.E的比较,不是等号,列数相等(说明可以不止比一列)且可比的属性之间比较。
2)等值连接-- R.C和S.E是否相等,列数相等(说明可以不止比一列)且可比的属性之间比较。
3)自然连接—特殊的等值连接,R.B和S.B是否相等,且比较完把这两列相同的合为一列
自然连接时会产生一些不相等的元组,称为悬浮元组。R ⋈ S注意符号不同!!
1)外连接—把悬浮元组都放进来。
2)左外连接—把R的悬浮元组放进来。
3)左外连接—把S的悬浮元组放进来。
4、除运算division
讲超好!!(7条消息) 数据库关系代数详解_Charon_cc的博客-CSDN博客_关系代数
某人说:RS÷S的意义就是“在R和S的联系RS中,找出与S中所有的元组有关系的R元组”。
我说:R÷S就是在R中找出和所有S都有关的属性。
重新看看定义!!你需要更多例子!