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

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

        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,一经查实,立即删除!

相关文章

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

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

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

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

配电箱安全检查

配电箱怎么检查,如何识破电箱安全隐患? (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…

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

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

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产品,为店铺经营场景提供一体化解决方案;门店经营区域化、网店经营一体化,本地化、全方位、一站式服务,为多门店提供统一运营解决方案;提供丰富多…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章:https://arxiv.org/abs/2305.18980 代码:https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det,一种高效的架构和预训练策略,它利用文本描述的…

以csv为源 flink 创建paimon 临时表相关 join 操作

目录 概述配置关键配置测试启动 kyuubi执行配置中的命令 bug解决bug01bug02 结束 概述 目标:生产中有需要外部源数据做paimon的数据源,生成临时表,以使用与现有正式表做相关统计及 join 操作。 环境:各组件版本如下 kyuubi 1.8…

Spring(Spring/Springboot 的创建) 基础

一. Spring 1.1 Spring是什么? Spring 指的是 Spring Frameword(Spring 框架),它是一个开源框架。 Spring 是包含了众多工具方法的IoC容器。 1.2 什么是容器? 容器时用来容纳某种物品的装置。 我们之前接触到的容器: • List/Map ->…

内存cache大量使用问题导致应用异常问题

概述 28s应用崩溃查看内存使用有大量cache。 分析 查看free 信息平时的确存在大量cache使用的情况查看dmes信息发现filesendserver崩溃 崩溃信息为系统调用 查看到page allocation failure:order 5 同时也看到系统内存使用情况 查看到系统实际还有部分内存为空闲内存&am…

[笔记] 使用 qemu/grub 模拟系统启动(单分区)

背景 最近在学习操作系统,需要从零开始搭建系统,由于教程中给的虚拟机搭建的方式感觉还是过于重量级,因此研究了一下通过 qemu 模拟器,配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器,…

Linux上进行Nacos安装

Nacos安装指南 仅供参考,若有错误,欢迎批评指正! 后期会继续上传docker安装nacos的过程! 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好…

手动搭建koa+ts项目框架(日志篇)

文章目录 前言一、安装koa-logger二、引入koa-logger并使用总结如有启发,可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架(路由篇)新增日志记录 一、安装koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

【每日一题】【12.11】1631.最小体力消耗路径

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 1631. 最小体力消耗路径https://leetcode.cn/problems/path-with-minimum-effort/这道题目的核心思路是:使用了二分查找和BFS &a…

EXPLAIN 执行计划

有了慢查询语句后,就要对语句进行分析。一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访…