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

news2024/12/23 13:32:08

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

        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.coloradmin.cn/o/1304695.html

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

相关文章

【数仓理论】

一、数仓建模方法论 1.1 ER模型(Entity Relationship、实体关系模型、范式模型) ER模型是Bill Inmon提出的一种建模方法,实体关系模型将复杂的数据抽象为两个概念 ---- 实体和关系 该模型在范式理论上符合3NF,这种模型目的是减少…

VTK学习(入门级教程,包括安装和使用)~持续更新中

说明:研究QTVTK有段时间了,准备把学到的东西分享给大家,这篇博客以VSQTVTK为主进行展开学习的。 VTK学习 VTK安装和使用教程VTK入门级教程设计界面vtkStudy.ui的操作vtkStudy.h头文件说明完整代码 vtkStudy.cpp绘制球体绘制长方体绘制圆柱绘制…

wordpress多語言插件Polylang與GTranslate會有衝突

wordpress多語言插件Polylang與GTranslate會有衝突,會導致分頁顯示不完整,需要禁用或卸載其中一個 分頁顯示才會沒問題 GTranslate必須要先按一種語言編輯好你要發佈網站,GTranslate這種語言為基礎去翻譯出來,其實內裡是套用了google 翻譯的…

第二证券:结构性行情或将延续 泛科技有望继续走强

展望未来,当时已进入重要的方针窗口期,能否有超预期的新方针推出是改变商场的要害。但复盘2023年的行情来看,过早买卖方针预期的成功率并不高,因而主张该方位以防御性资产为主,高股息资产从本年9月份至今现已调整了2个…

ubuntu dns 相关

查看dns配置 systemd-resolve --status 修改dns vim /etc/resolv.conf sudo apt install traceroute 追踪 traceroute www.baidu.com

windows下docker环境安装

开启硬件虚拟化技术 win10中开启 Hyper-V Win10 下是否开启硬件虚拟化技术,在控制面板,启用 window 功能,找到 Hyper-V 选项,点勾选确认。如图: Windows 11 家庭中文版新增 Hyper-V选项 注意以下的解决方案来自win1…

Vision Transformer模型架构详解

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

自动化测试 (一) 12306火车票网站自动登录工具

还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗。 今天我们就开发一个12306网站自动登录软件。 帮助您轻松订票 Web的原理就是,浏览器发送一个Request给Web服务器,Web服务器处理完这个请求之后发送一个HTTP Response给浏览器。 …

【JAVA】黑马MybatisPlus 学习笔记【一】

1.快速入门 为了方便测试,我们先创建一个新的项目,并准备一些基础数据。 1.1 环境配置 导入项目 注意配置一下项目的JDK版本为JDK11。首先点击项目结构设置: 导入两张表,在课前资料中已经提供了SQL文件: 最后&am…

python用来干什么的,python用来做什么的

大家好,小编来为大家解答以下问题,python用来干什么的,python用来做什么的,今天让我们一起来看看吧! 随着互联网行业的发展,编程越来越受到人们的重视,但是始终很多人并不了解编程是什么&#x…

Linux——MySQL数据库系统

一、 MySQL的编译安装 1、准备工作 (1)为了避免发生端口冲突,程序冲突等现象,建议先查询MySQL软件的安装情况,确认没有使用以Rpm方式安装的mysql-server、mysql软件包,否则建议将其卸载 [rootlocalhost ~]…

13、RockerMQ消息类型之广播与集群消息

RocketMq中提供两种消费模式:集群模式和广播模式。 集群模式 集群模式表示同一个消息会被同一个消费组中的消费者消费一次,消息被负载均衡分配到同一个消费者上的多个实例上。 还有另外一种平均的算法是AllocateMessageQueueAveragelyByCircle&#xff…

element table表格内进行表单验证(简单例子,一看就会,亲测有用~)开箱即用!!

效果图&#xff1a; 代码&#xff1a; <div> <el-form ref"form" :model"form" ><el-table :data"form.tableData" align"center" border><el-table-column label"名称"><template slot-scope&…

国标GB28181安防视频云平台EasyCVR出现持续重启现象,是什么问题?该如何解决?

视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能…

边缘计算系统设计与实践

随着科技的飞速发展&#xff0c;物联网和人工智能两大领域的不断突破&#xff0c;我们看到了一种新型的计算模型——边缘计算的崛起。这种计算模型在处理大规模数据、实现实时响应和降低延迟需求方面&#xff0c;展现出了巨大的潜力。本文将深入探讨边缘计算系统的设计原理和实…

MySQL5 和 MySQL8 的配置区别 一些注意事项

1、使用命令行查看MySQL的版本 先保证你的mysql正在运行&#xff0c;假如用户名是root&#xff0c;密码是123456&#xff0c;运行下边的代码可以查看mysql的版本号。 mysql -uroot -p123456这里我的版本是5.7.19。也就是5版本的。 2、不同版本对应的数据库驱动jar包&#x…

【docker 】 安装docker(centOS7)

官网 docker官网 github源码 官网 在CentOS上安装Docker引擎 官网 在Debian上安装Docker引擎 官网 在 Fedora上安装Docker引擎 官网 在ubuntu上安装Docker引擎 官网 在RHEL (s390x)上安装Docker引擎 官网 在SLES上安装Docker引擎 最完善的资料都在官网。 卸载旧版本 …

AOP跨模块捕获异常遭CGLIB拦截而继续向上抛出异常

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、BUG详情 1.1 报错信息 1.2 接口响应信息 1.3 全局异常处理器的定义 二、排查过程 三、解决方案 四、总结 前言 最近&…

【SpringBoot】入门精简

目录 一、初识 SpringBoot 1.1 介绍 1.2 项目创建 1.3 目录结构 1.4 修改配置 二、SpringBoot 集成 2.1 集成 Mybatis框架 2.2 集成 Pagehepler分页插件 2.3 集成 Druid数据库连接池 2.4 集成 Log日志管理 一、初识 SpringBoot 1.1 介绍 Spring Boot是一个用于简化Sp…

无人零售柜:快捷舒适购物体验

无人零售柜&#xff1a;快捷舒适购物体验 通过无人零售柜和人工智能技术&#xff0c;消费者在购物过程中可以自由选择商品&#xff0c;根据个人需求和喜好查询商品清单。这种自主选择的购物环境能够为消费者提供更加舒适和满意的体验。此外&#xff0c;无人零售柜还具有节约时间…