数据库系统 --- 关系模型

一、关系模型的数据结构以及形式化定义

        1.关系

        域:一组具有相同数据结构的值的集合。

        笛卡尔积:域上的一种集合运算。多个集合做笛卡尔积的结果是每个集合取一个元素组合得到的一个新的集合。

        域的基数:一个域上允许的不同取值的个数。

        关系:在关系模型D1、D2、D3、...的笛卡尔积是没有实际语意的,只有它的某个真子集才有实际含义。

        给定一组域D1,D2,D3,…,Dn,允许其中某些域是相同的,D1,D2,D3,…,Dn。的笛卡儿积D1×D2xD3×...Dn的子集称为这组域上的关系,表示为R(D1,D2,…,Dn)。

        这里R表示关系名,n是关系的目或度(degree)。

        当n=1时,称该关系为一元关系(unary relation)或单元关系、单目关系。
        当n=2时,称该关系为二元关系(binary relation)或二目关系。

        关系中的每个元素是关系中的元组,通常用t来表示。

        关系是笛卡儿积的有限子集,所以关系是一张二维表,表的每一行对应一个元组,表的每一列对应一个域。由于域可以相同,为了加以区分,必须对每一列起一个名字,称为属性。n目关系必有n个属性。

        关系可以有三种类型:基本关系 (通常又称为基本表或基表)、查询结果视图。其中,基本关系是实际存在的表,它是实际存储数据的逻辑表示;查询结果是查询执行产生的结果对应的临时表;视图是由基本表或其他视图导出的虚表,不存储实际数据。

        基本关系具有6条性质:①.列是同质的(homogeneous),即每一列中的分量是同一类型的数据,来自同一个域。②.不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。③.列的顺序无所谓,即列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际的关系数据库产品中增加新属性时,永远是将其插至最后。④.任意两个元组的码不能取相同的值。⑤.行的顺序无所谓,即行的次序可以任意交换。⑥.分量必须取原子值,即每一个分量都必须是不可分的数据项。

        关系模型要求关系必须满足一定的规范条件,其最基本的一条就是元组的每一个分量必须是一个不可分的数据项。

        规范化的关系简称为范式(normal form, NF)

        2.关系模式

        关系模式是“型”,关系是“值”。

        关系的描述称为关系模式(relation schema)。它可以形式化地表示为

        R(U,D,DOM,F)

        其中R为关系名,U为组成该关系的属性的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据依赖关系的集合。

        关系模式通常简记为

R(U)或者
R(A1,A2,…,An)

        其中R为关系名,A,A,…,A,为属性名;而域名及属性向域的映像则常直接说明为属性的类型、长度。

        若关系模式中的某一个属性或一组属性的值能唯一地标识一个元组,而它的真子集不能唯一地标识一个元组,则称该属性或属性组为候选码(candidate key)。

        若一个关系有多个候选码,则选定其中一个为主码(primary key),或称主键。

        候选码的诸属性称为主属性(prime atnbute)。

        不包含在任何候选码中的属性称为非主属性(non prime attribute)或非码属性(non-key atribute)。

        在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码(all-key)。

        关系是关系模式在某一时刻的状态或内容。

        关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,这是因为关系操作在不断地更新着数据库中的数据。

        在实际工作中,人们常常把关系模式和关系都笼统地称为关系。

        3.关系数据库

        支持关系模型的数据库系统称为关系数据库系统。在关系模型中,实体以及实体间的联系都是用关系来表示的。

        例如,“学生”实体、“课程”实体、学生与课程之间选修课程的多对多联系都可以分别用一个关系模式来描述。

        “学生”关系模式:Student(Sno,Sname,Ssex,Sbirthdate,Smajor),包括学号、姓名、性别、出生日期和主修专业等属性。
        “课程”关系模式:Course(Cno,Cname,Ccredit,Cpno),包括课程号、课程名、学分、先修课(直接先修课)等属性。
        “学生选课”关系模式:SC(Sno,Cno,Grade,Semester,Teachingclass),包括学号、课程号、成绩、开课学期、教学班等属性。

        在一个关系数据库中,某一时刻所有关系模式对应的关系的集合构成一个关系数据库。

        关系数据库也有类型和值之分。

        关系数据库的类型就是关系数据库中所有关系模式的集合,是对关系数据库的描述,通常称为关系数据库模式。

        关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常将为关系数据库。

        4.关系模型的存储结构

        关系模型是关系数据的逻辑结构,用关系数据定义语言描述。例如关系数据库标准语言SQL。

        支持关系模型的关系数据库管理系统(relational database management system, RDBMS)将以一定的组织方式存储和管理数据,即设计和实现关系模型的存储结构,这是关系数据库管理系统的重要职责之一。

        例如,有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织的许多任务交给操作系统完成;有的关系数据库管理系统则从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构并进行存储管理。

二、关系操作

        1.基本的关系操作

        关系模型中常用的关系操作包括查询(query)操作和更新操作两大部分,而更新操作又可分为插入(insert)、删除(delete)、修改(update)等操作。

        关系的查询表达能力很强,因此查询操作是关系操作中最主要的部分。查询操作又可进一步分为选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(difference)、交(intersection)、笛卡儿积等操作。其中选择、投影、并、差、笛卡儿积是5种基本操作,其他操作可以用基本操作来定义和导出,就像乘法可以用加法来定义和导出一样。 

        关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为成组数据处理(set-at-a-time processing),即一次一个集合的操作方式。相应地,层次模型和网状模型的数据操作方式则为一次一个记录(record-at-a-time)的方式。

        这里强调一下,关系操作的所有输入和输出均是关系,包括关系操作的中间结果也是关系。

        2.关系数据语言的分类

        早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数(relational al-gebra)和关系演算(relational calculus)。

        关系代数用对关系的运算来表达查询要求,关系演算则用谓词来表达查询要求。

        关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。

        一个关系数据语言能够表示关系代数可以表示的查询,称为具有完备的表达能力,简称关系完备性。

        此外,还有一种结构化查询语言(structured query language, SQL)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集数据查询语言(data query language, DQL)、数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(data control language, DCL)于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,自20世纪80年代起成为关系数据库的标准语言。

三、关系的完整性

        关系模型的完整性约束是对关系的其种约束条件。也就是说关系的值随着时间变化时应该满足一些的约束条件,这些约束系件实际上是现实世界的要求。任何关系在任何时刻都要满足这些语义约束。

        关系模型中有三类完整性约束:实体完整性(cntiy iteoity)、参照完整性(refecntial inte
2)和用户定义的完整性(ir- Ihfind imegrity)。

        其中实体完整性和参照完整性是关系模型必级满足的完整性约束,被称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

        1.实体完整性

        关系数据库中每个元组应该是可区分的,是唯一的。这样的约束条件用实体完整性来保证。

        实体完整性约束:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。其中空值就是“不知道”或“不存在”或“无意义”的值。

        对于实体完整性约束说明:
                ①.实体完整性约束是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如,“学生”关系对应学生的集合。
                ②.现实世界中的实体是可区分的,即它们具有某种唯一性标识。例如,每个学生都是独立的个体,是不一样的。
                ③.关系模型中以主码作为唯一性标识。
                ④.主码中的属性不能取空值,如果取了空值,就说明存在某个不可标识的实体,即存在不可区分的实体。

        2.参照完整性

        现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。

        定义  设F是基本关系R的一个或一组属性,但不是关系R的码,Ks 是基本关系S的主码。如果F与Ks相对应,则称F是R的外码(foreign key), 并称基本关系R为参照关系(relerencing relation), 基本关系S为被参照关系( referenced relation) 或目标关系( targetrlation)。关系R和S不一定是不同的关系。显然,目标关系S的主码K。和参照关系R的外码F必须定义在同一个(或同一组)域上。

        外码并不一定要与相应的主码同名。

        参照完整性约束就是定义外码与主码之间的引用规则。

        参照完整性约束:若属性( 或属性组)F是基本关系R的外码,它与基本关系S 的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值 必须:

        ①或者取空值(F的每个属性值均为空值)。

        ②或者等于S中某个元组的主码值。

        在参照完整性约束中,R与S可以是同一个关系。

        3.用户定义完整性

        任何关系数据库系统都应该支持实体完整性和参照完整性,这是关系模型所要求的。除此
之外,不同的关系数据库根据其应用场景不同,往往还需要一些特殊的约束条件。 用户定义的
完整性就是针对某一具体关系数据库的约束条件,它反映某一县体应用所涉及的数据必须满足
的语义要求。例如,某个属性必须取唯一值,某个非主属性不能取空值等。
        关系模型应提供定义和检验这类完整性约束的机制,以便用统一的系统的方法处理它们,
而不需要由应用程序承担这一功能。

四、关系代数

        关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。

        运算对象、运算符、运算结果是运算的三大要素。

        关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括两类:集合运算符和专门的关系运算符。

      

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac 安装anaconda和lightgbm

mac安装anaconda不要去清华大学的anaconda的安装包列表去下载安装包, 去[官网](Free Download | Anaconda)下载, 清华的版本太老了, 老到脸conda 安装lightgbm都不只支持 安装好anaconda 后, 能用conda install xxx 的尽量不用pip install 其他的不知道, 用pip install ligh…

护眼台灯为什么护眼?适合备考使用的台灯推荐

台灯是大家生活中必不可少的一盏灯具,尤其是当夜幕降临时,许多仍然需要工作、或者学习的人,都要使用台灯来提供充足的照明环境。如今随着生活的高度发展,大家对台灯的要求也愈发精进了一步,不仅需要能够提供照明的&…

报表控件FastReport .NET v2024功能演示—更改图图片形状

报表生成器FastReport .NET 是适用于.NET Core 3,ASP.NET,MVC和Windows窗体的全功能报告库。使用FastReport .NET,您可以创建独立于应用程序的.NET报告。 FastReport .net下载(qun:585577353)https://www.e…

webpack的使用

一、5 大核心概念 entry(入口) 指示 Webpack 从哪个文件开始打包 output(输出) 指示 Webpack 打包完的文件输出到哪里去,如何命名等 loader(加载器) webpack 本身只能处理 js、json 等资源…

配电箱安全检查

配电箱怎么检查,如何识破电箱安全隐患? (1)一物一码:每个配电箱都有独一无二标识二维码,巡检人员到达现场扫码即可填写巡检记录,查看配电箱的参数、负责人、操作规则等信息; &#x…

如何用PHP写一个1688平台下的商品API接口代码?

一 定义 PHP(全称:Hypertext Preprocessor)是一种广泛用于开发Web应用程序的服务器端脚本语言。它是一种开源的编程语言,特别适用于快速构建动态网页和Web应用程序。 在PHP中,您可以使用1688商品API接口来获取和操作…

韵达速递查询,韵达速递单号查询,对需要的单号记录进行标记

批量查询韵达速递单号的物流信息,对需要的单号记录进行标记。 所需工具: 一个【快递批量查询高手】软件 韵达速递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主界面左上角…

starknet学习资料汇集这一篇就够了(持续更新)

文章目录 官方资料wtf starknet学习资料Starknet Astro 社区官方资料 starknet-foundry 官方github:https://github.com/foundry-rs/starknet-foundry 官方文档:https://foundry-rs.github.io/starknet-foundry/ https://book.cairo-lang.org/zh-cn/index.html https://boo…

数据结构:第9关:删除链表中满足区间值的结点

任务描述编程要求 输入输出测试说明来源 任务描述 本关任务:利用单链表表示一个递增的整数序列,删除链表中值大于等于mink且小于等于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同…

银行如何筛选跨网文件交换产品,提升业务效率?

银行业在我国经济发展和社会运转中承载着举足轻重的作用和意义,进入互联网时代,网络的运算和数据管理能力助力银行业高速发展,但同样带来了一些网络安全隐患,网络攻击、数据窃取、敏感信息泄露等问题影响着银行业的根基。为响应和…

python作业题百度网盘,python123作业答案

大家好,小编来为大家解答以下问题,python作业题百度网盘,python123作业答案,今天让我们一起来看看吧! 完整项目分享: 链接: https://pan.baidu.com/s/1CTMOgLYteLrWRaRnouB0SQ?pwd12hf 提取码: 12hf &…

[Linux 基础] Linux使用git上传gitee三板斧

文章目录 1、使用git1.1 安装git1.2 在Gitee上创建项目1.2.1 使用Gitee创建项目1.2.2 上传本地代码到远端仓库 1.3 git上传三板斧1.3.1 三板斧第一招:git add1.3.2 三板斧第二招:git commit1.3.3 三板斧第三招:git push 1、使用git 1.1 安装…

【教3妹学编程-算法题】下一个更大元素 IV

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包” 2哥 :3妹,什么事呀这么开发。 3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。 2哥&#x…

商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 鸿鹄云商

鸿鹄云商 SAAS云产品概述 【SAAS云平台】打造全行业全渠道全场景的SaaS产品,为店铺经营场景提供一体化解决方案;门店经营区域化、网店经营一体化,本地化、全方位、一站式服务,为多门店提供统一运营解决方案;提供丰富多…

使用C++和双指针算法移除数组中的元素,且原地移除,不使用额外的空间

输入一个数组nums和一个值val&#xff0c;在该数组中&#xff0c;凡是与val相等的元素全部移除&#xff0c;并最终输出该数组&#xff0c;C代码如下&#xff1a; #include<iostream> #include<vector> #include<ctime>//计算代码所需要的时间 using namespac…

qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍

一. QVector容器是一个动态数组&#xff0c;可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问. 和其他的容器类型类似,QVector…

AE无法连接到ME怎么办?

最近学习了一下adobe的系列软件 ae是2018的 me是2023的 本来想用me来做渲染的 发现链接不上 试了一下重装ae&#xff0c;升级版本到2023 链接还是不行 幸好看了这篇博客解决了我的问题&#xff01;&#xff01; AE无法连接到ME怎么办? AE和ME没有装在一个盘无法识别的 用了第二…

【Netty为什么适合做网络编程】

Netty为什么适合做网络编程 描述优点 描述 Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、基于事件驱动的网络应用程序框架&#xff0c;用以快速开发高性能、高可靠性的网络IO程序。Netty主要用来做网络通信&#xff0c;一般可以用来做RPC框架的通信工具、实现即时…

特发性震颤的严重程度如何评估?

特发性震颤的严重程度评估是一个相对主观和复杂的过程&#xff0c;需要医生综合考虑患者的多种症状和体征进行判断。通常&#xff0c;评估特发性震颤的严重程度会考虑以下几个方面&#xff1a; 一、震颤的频率和强度 评估特发性震颤的严重程度时&#xff0c;首先要观察患者震…

RS485网关如何采集传感器和仪器仪表数据-天拓四方

在自动化生产和监测系统中&#xff0c;传感器和仪器仪表扮演着重要的角色&#xff0c;它们可以收集各种数据&#xff0c;如温度、压力、流量等&#xff0c;并对这些数据进行必要的分析和处理。然而&#xff0c;如何有效地采集这些数据是一个关键问题。RS485网关是一种常见的设备…