数据库(二)—— 关系模型概述

目录

前言

一、关系数据库的结构(Structure of Relation Database)

1.基本结构

2.属性的值说明

3.Keys 键/码

(1)超级码(superkey)

(2)候选码(candidate key)

(3)主码(primary key)

(4)外码(foreign key)

二、关系查询语言(Relational Query Language)

一些“纯”语言("Pure" languages)

三、关系代数操作符(Relational-Algebra Operations)

1.基本操作符

(1)选择(select)​

(2)投影(project)

(3)并(union)

(4)集合差(set difference)​

(5)笛卡尔积(Cartesian product)​

(6)重命名(rename)​

2.附加操作符

(1)集合交(set intersection)

(2)自然连接(natural join)  

(3)除法(division)


前言

本篇文章重点为代数关系的运算符,应掌握如何使用基本运算符和附加运算符解决用户需求。


一、关系数据库的结构(Structure of Relation Database)

1.基本结构

该关系的模式(schema)是:instructor = (ID,name,dept_name,salary)。

行记录具有无序性,但往往会根据操作时间排序。

2.属性的值说明

(1)每个属性有属性类型(attribute type),该属性类型可以规定属性的值域(value domain),一个关系的值域是每个属性值域的乘积

(2)属性值应该是原子的(atomic)不可分的(indivisible)

(3)特殊值null是任何值域中的成员,代表的是不知道具体值(unknown),而不是C语言中的空值的含义

3.Keys 键/码

(1)超级码(super key)

能够确定唯一一个元组(行记录)的一个或几个属性所构成的集合。

例如:{ID}和{ID, name}都是instructor的超级码。

(2)候选码(candidate key)

超级码中最小的是候选码。

例如:{ID}是instructor的候选码。

(3)主码(primary key)

从候选码中选一个作为主码,至于选哪一个候选码作为主码取决于业务规则。

(4)外码(foreign key)

在一个关系中的一个或几个属性也出现在其他的关系中,这些属性构成外码。外码可以关联多个关系,使得关系之间存在引用(referencing)和被引用(referenced)的关系。

二、关系查询语言(Relational Query Language)

查询语言可以分为过程化的非过程化的 过程化语言 (procedural language) 中, 用户指导系统对数据库执行一系列操作以计算出所需结果 非过程化 nonprocedural language) 用户只需描述所需信息 而不用给出获取该信息的具体过程

一些“纯”语言("Pure" languages)

(1)关系代数(relational algebra)

(2)元组关系演算(tuple relational calculus)

(3)域关系演算(domain relational calculus)

以上三者等价,它们说明了从数据库中提取数据的基本技术。

三、关系代数操作符(Relational-Algebra Operations)

1.基本操作符

(1)选择(select)\sigma

形式\sigma _{p}(r)

定义:返回输入关系r中满足选择谓词p的行记录

示例\sigma _{deptname="Physics"}(instructor)表示从instructor关系中选出所有物理学院的老师

注释:1.选择操作不改变schema,也就是说所挑出的行记录属性个数不变

           2.选择谓词p中可以有多个条件(term)通过\wedge(与)、\vee(或)、┐(非)连接

           3.term的形式为<attribute>  =/≠(<>)/>/</≥/≤ <attribute>/<constant>,也就是属性等于或不等于或大于或小于或大于等于或小于等于某个属性或常量

适用场景:需要选出某些属性条件的数据时

例题

(2)投影(project)\pi

形式\pi _{A_{1},A_{2},...,A_{k}}(r)

定义:对输入关系r中所有的行记录只挑选出A_{1},A_{2},...,A_{k}这些属性的值,并完成去重

示例\pi _{ID,name,salary}(instructor)表示从instructor关系中选出老师的ID,姓名和年薪,并做去重

注释:1.投影操作改变schema,也就是说所挑出的行记录属性会改变

           2.投影操作可能改变行记录的个数,也可能不改,在有重复的行记录的情况下,行记录的个数会发生改变

适用场景:用户只关注某些属性的数据时

例题

(3)并(union)\cup

形式r\cup s

定义:返回关系r关系s的并集

示例\pi _{ID}(\sigma _{deptname="Physics"}(instructor))\cup\pi _{ID}(\sigma _{salary>50000}(instructor))表示将物理学院的老师和年薪大于50000的老师合并,即找出物理学院的老师和年薪大于50000的老师

注释:1.r和s必须有相同的schema

           2.结果会自动去重

适用场景:需要一张或多张表的相同属性的数据进行结合时

例题

(4)集合差(set difference)-

形式r-s

定义:返回在输入关系r中但不在输入关系s中的行记录

示例\pi _{ID}(\sigma _{deptname="Physics"})-\pi _{ID}(\sigma _{salary>50000}(instructor))表示选出年薪小于等于50000的物理老师

注释:r和s必须有相同的schema

适用场景:需要排除某些数据时

例题

(5)笛卡尔积(Cartesian product)\times

形式r\times s

定义:从两个输入关系r、s中输出所以的行记录(将两个关系结合在一起)

注释:1.做完笛卡尔积后schema可能会改变,在不去掉不合法的行记录之前产生的新关系中行记录的个数是r和s中行记录个数的乘积

           2.只有两个关系中均有的属性会自动重命名为<关系名>.<属性名>

           3.做完笛卡尔积后会产生一些不合法的行记录,在应用时一定要再用选择操作只选择出合理的行记录(一般利用是各自的主码且二者相同的属性作为选择条件,e.g. \sigma _{r.a = s.a}(r\times s)

适用场景:需要的数据在多张表中或需要比较不同的行记录(做自身笛卡尔积)

例题

(6)重命名(rename)\rho

形式\rho _{x}(E)

定义:将E的名字改成x

示例\rho _{s}(r)将r关系改名为s

注释\rho _{x}(E)中的x可以改成 x(A_{1},A_{2},...,A_{n})(n表示原关系中有n个属性)表示将属性名称也改成A_{1},A_{2},...,A_{n}

适用场景:需要更改名字,做自身的笛卡尔积时,或者想把名字简化、更改时

例题

 

几种问题:

(1)找最值

(2)直接比属性

(3)至少问题

(4)个数问题

2.附加操作符

(1)集合交(set intersection)\cap

形式r\cap s

定义:选出关系r关系s相同的行记录

示例\pi _{customername}(borrower)\cap \pi _{customername}(depositor)找到在银行中既有贷款(loan)又有账户(account)的顾客。

注释1.r和s有相同的schema

           2.r\cap s =r-(r-s)

适用场景:需要选出的满足两个条件的行记录,这两个属性在不同的关系中

(2)自然连接(natural join)  \bowtie

形式r\bowtie s

定义:输出输入的r和s关系中的公共属性中的公共属性值所在的行记录结合起来,只公共属性只保留一列。

注释:1.内连接(inner join)与自然连接相似,不过不要求输入的两个属性重名,可以用on来指定;输出的关系中,公共属性也保留了两列,但有时也不做区分

           2.两个关系只有一个公共属性的时候才能使用自然连接,如果要用到多个属性,则考虑用笛卡尔积联系多个关系

           3.连接操作(join operations)包括内连接(inner join)自然连接(natural join)左外连接(left outer join)自然左外连接(natural left outer join)右外连接(right outer join)自然右外连接(natural right outer join)全外连接(full outer join)具体定义见例题便可一目了然,带有“自然(natural)”的公共属性应重名,不带有“自然(natural)”的公共属性可以不重名,但需要用on/using指定

            4.自然连接操作可结合,即r\bowtie s\bowtie t=(r\bowtie s)\bowtie t=r\bowtie (s\bowtie t)

适用场景:需要将多个关系连接成一个关系

例题

 

 

(3)除法(division)\div

形式r\div s

定义:除运算是同时从关系的水平方向垂直方向进行运算。给定关系R(X,Y)和S(Y,Z),X、Y、Z为属性组。r\div s应当满足元组在X上的分量值x的象集Y_{x}包含关系S在属性组Y上投影的集合。(看不懂就看“示例”) 

示例:(计算过程

1.挑出关系s中关系r和s相同属性所在的列,本题为D和E

2..挑出关系r中关系s没有的属性所在的列,并做去重,本题为A,B和C,去重后为:

ABC
\alphaa\alpha
\alphaa\gamma
\betaa\gamma
\gammaa\gamma
\gammaa\beta

3.求2中的每个元组对应的象集D、E

ABCDE
\alphaa\alphaa1

 

ABCDE
\alphaa\gammaa1
b1

 

ABCDE
\betaa\gammaa1
b3

 

ABCDE
\gammaa\gammaa1
b1

 

ABCDE
\gammaa\betab1

 4.判断3中五个表格中哪些对应的象集包含关系s中属性D、E的所有值:

 

ABCDE
\alphaa\gammaa1
b1

 

ABCDE
\gammaa\gammaa1
b1

这两个包含,所以结果为

ABC
\alphaa\gamma
\gammaa\gamma

注释计算条件:只要两个关系有交集就行,不一定非要是包含关系

适用场景:用于体现两个集合包含关系的题目中,一般会出现"all"之类的字眼

例题


总结

感觉是比较有意思的一章。

未完待续……

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值