数据库(二)—— 关系模型概述
目录
前言
一、关系数据库的结构(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)
一些“纯”语言("Pure" languages)
(1)关系代数(relational algebra)
(2)元组关系演算(tuple relational calculus)
(3)域关系演算(domain relational calculus)
以上三者等价,它们说明了从数据库中提取数据的基本技术。
三、关系代数操作符(Relational-Algebra Operations)
1.基本操作符
(1)选择(select)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20%5Csigma)
形式:
定义:返回输入关系r中满足选择谓词p的行记录
示例:表示从instructor关系中选出所有物理学院的老师
注释:1.选择操作不改变schema,也就是说所挑出的行记录属性个数不变
2.选择谓词p中可以有多个条件(term)通过(与)、
(或)、┐(非)连接
3.term的形式为<attribute> =/≠(<>)/>/</≥/≤ <attribute>/<constant>,也就是属性等于或不等于或大于或小于或大于等于或小于等于某个属性或常量
适用场景:需要选出某些属性条件的数据时
例题:
(2)投影(project)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20%5Cpi)
形式:
定义:对输入关系r中所有的行记录只挑选出这些属性的值,并完成去重
示例:表示从instructor关系中选出老师的ID,姓名和年薪,并做去重
注释:1.投影操作改变schema,也就是说所挑出的行记录属性会改变
2.投影操作可能改变行记录的个数,也可能不改,在有重复的行记录的情况下,行记录的个数会发生改变
适用场景:用户只关注某些属性的数据时
例题:
(3)并(union)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20%5Ccup)
形式:
定义:返回关系r和关系s的并集
示例:表示将物理学院的老师和年薪大于50000的老师合并,即找出物理学院的老师和年薪大于50000的老师
注释:1.r和s必须有相同的schema
2.结果会自动去重
适用场景:需要一张或多张表的相同属性的数据进行结合时
例题:
(4)集合差(set difference)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20-)
形式:
定义:返回在输入关系r中但不在输入关系s中的行记录
示例:表示选出年薪小于等于50000的物理老师
注释:r和s必须有相同的schema
适用场景:需要排除某些数据时
例题:
(5)笛卡尔积(Cartesian product)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20%5Ctimes)
形式:
定义:从两个输入关系r、s中输出所以的行记录(将两个关系结合在一起)
注释:1.做完笛卡尔积后schema可能会改变,在不去掉不合法的行记录之前产生的新关系中行记录的个数是r和s中行记录个数的乘积
2.只有两个关系中均有的属性会自动重命名为<关系名>.<属性名>
3.做完笛卡尔积后会产生一些不合法的行记录,在应用时一定要再用选择操作只选择出合理的行记录(一般利用是各自的主码且二者相同的属性作为选择条件,e.g. )
适用场景:需要的数据在多张表中或需要比较不同的行记录(做自身笛卡尔积)
例题:
(6)重命名(rename)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20%5Crho)
形式:
定义:将E的名字改成x
示例:将r关系改名为s
注释:中的x可以改成
(n表示原关系中有n个属性)表示将属性名称也改成
适用场景:需要更改名字,做自身的笛卡尔积时,或者想把名字简化、更改时
例题:
几种问题:
(1)找最值
(2)直接比属性
(3)至少问题
(4)个数问题
2.附加操作符
(1)集合交(set intersection)![](https://latex.csdn.net/eq?%5Cdpi%7B100%7D%20%5Ccap)
形式:
定义:选出关系r和关系s中相同的行记录
示例:找到在银行中既有贷款(loan)又有账户(account)的顾客。
注释:1.r和s有相同的schema
2.
适用场景:需要选出的满足两个条件的行记录,这两个属性在不同的关系中
(2)自然连接(natural join) ![](https://latex.csdn.net/eq?%5Cbowtie)
形式:
定义:输出输入的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.自然连接操作可结合,即
适用场景:需要将多个关系连接成一个关系
例题:
(3)除法(division)![](https://latex.csdn.net/eq?%5Cdiv)
形式:
定义:除运算是同时从关系的水平方向和垂直方向进行运算。给定关系R(X,Y)和S(Y,Z),X、Y、Z为属性组。应当满足元组在X上的分量值x的象集
包含关系S在属性组Y上投影的集合。(看不懂就看“示例”)
示例:(计算过程)
1.挑出关系s中关系r和s相同属性所在的列,本题为D和E
2..挑出关系r中关系s没有的属性所在的列,并做去重,本题为A,B和C,去重后为:
A | B | C |
|
a |
|
|
a |
|
|
a |
|
|
a |
|
|
a |
|
3.求2中的每个元组对应的象集D、E
A | B | C | D | E |
|
a |
|
a | 1 |
A | B | C | D | E |
|
a |
|
a | 1 |
b | 1 |
A | B | C | D | E |
|
a |
|
a | 1 |
b | 3 |
A | B | C | D | E |
|
a |
|
a | 1 |
b | 1 |
A | B | C | D | E |
|
a |
|
b | 1 |
4.判断3中五个表格中哪些对应的象集包含关系s中属性D、E的所有值:
A | B | C | D | E |
|
a |
|
a | 1 |
b | 1 |
A | B | C | D | E |
|
a |
|
a | 1 |
b | 1 |
这两个包含,所以结果为
A | B | C |
|
a |
|
|
a |
|
注释:计算条件:只要两个关系有交集就行,不一定非要是包含关系
适用场景:用于体现两个集合包含关系的题目中,一般会出现"all"之类的字眼
例题:
![](/assets/blank.gif)
总结
感觉是比较有意思的一章。
未完待续……
数据库(二)—— 关系模型概述相关推荐
- Database:数据库的关系模型
数据库学习笔记:关系模型 Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificia ...
- 数据库原理—关系模型的数据操作(八)
数据库原理-关系模型的数据操作(八)
- 数据库原理—关系模型的基本概念(七)
数据库原理-关系模型的基本概念(七)
- 数据库:关系模型基本介绍
关系模型研究什么? 关系模型就是处理Table的,它由三个部分组成: 1:描述DB各种数据的基本结构形式 2:描述Table与Table之间所可能发生的各种操作(关系运算) 3:描述这些操作所应遵循的 ...
- 数据库----二 关系数据结构及形式化定义
关系数据库系统是支持关系模型的数据库系统 关系模型由数据结构.关系操作集合和完整性约束三部分组成 单一的数据结构------关系 但关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体 ...
- 从需求出发来看关系模型与非关系模型–关系模型与非关系模型概述
自从NoSQL概念横空出世,关系数据库似乎就成了众矢之的,似乎一夜之间,关系数据库和SQL就成了低效,高成本,速度慢的数据处理模式的代名词.在很多地方都能看到类似:"我的项目初创,应该选择什 ...
- 数据库MySQL关系模型之基本概念
1.什么是关系模型 1.1关系模型研究什么 一个关系(relation)就是一个Table 关系模型就是处理Table的,它由三个部分组成: 描述DB各种数据的基本结构形式(Table/Relatio ...
- 数据库之关系模型的组成,特点以及完整性约束
关系模型就是用二维表描述数据本身,以及数据之间的关系. 关系模型的组成: 数据结构(表结构)+关系操作(八个操作)+完整性约束(三个完整性) 实体完整性 在关系表中,所有元组主码的值都不能为空. 参照 ...
- 数据库之关系模型介绍
本篇文章是数据库系列的第一篇文章,本系列文章是笔者在学习<数据库系统概念>这本书总结的内容,使用的数据库是MySQL. 关系数据库的结构 关系数据库由表(table)的集合构成,每个表由唯 ...
- 数据库 2.关系模型
2. 关系模型 2.1 关系结构与约束 关系是使用最广泛的逻辑数据模型. 关系模型涉及:关系结构.关系操作.完整性约束. 关系数据库用一系列表来表达数据以及这些数据之间的联系 列:每个列有个列首,也称 ...
最新文章
- mysql 报错10614_golang使用go-sql-driver实现mysql增删改操作-Go语言中文社区
- SpringSecurity实现拦截未登录页面
- 【Hbase】HBase分布式安装
- 关于 CSS will-change 属性你需要知道的事
- word 产生很多temp 不显示_word表格中文字显示到最下面的时候不自动换页-解决办法...
- Android平台中实现对XML的三种解析方式
- Python网络编程、爬虫之requests模块使用
- 开源实时视频码流分析软件:VideoEye
- java 正则表达式匹配_Java 正则表达式匹配
- 智慧城市数字孪生IOC系统
- 自己动手,更换中兴F663NV3a光猫,换为华为MA5671,真香。(中国移动光纤宽带)
- 小程序 40163_安卓微信登入codebeenused,error40163
- Android读取RAM,ROM,SD卡容量
- Transmission搭建BT下载服务器
- SSL_2278 Oliver的救援
- 网站底部添加公安备案HTML代码
- libpng16.so.16错误
- 怎么用计算机名看地址吗,知道计算机名 肿么查ip
- node和npm的关系,node和npm的关联
- BA-中央空调冰蓄冷(视频)
热门文章
- 【力扣时间】【807】【中等】保持城市天际线
- centos图像界面和dos界面之间切换
- Matplotlib 矢量场(quiver)
- abaqus python 读取文件_利用Python修改Abaqus的inp文件(关键字)
- WSTMart 视频教程,WSTMart 开发文档
- android优化最强软件,手机提速谁最行?十款安卓优化软件比拼
- GD32F303固件库开发(17)----内部Flash读写
- mac下hadoop 2.6.0编译native library
- 手游-放开那三国socket协议分析
- 利用Bootstrap制作一个流行的网页