关系模型介绍

简介: 关系模型介绍

一、【关系数据结构】


1、关系


1)域(Domain)


定义1–域是一组具有相同数据类型的值的集合。


例如,整数、正整数、实数、大于等于0且小于等于100的正整数、{0,1,2,3,4}等都可以是域。


2)笛卡尔积(Cartesian Product)


定义2–设定一组域D1, D2, …, Dn,在这组域中可以是相同的域。定义D1, D2, …, Dn,的笛卡 尔积为D1×D2×…×Dn={(d1, d2, …, dn) | di∈Di, i=1, 2, …, n}


其中每一个元素(d1, d2, …, dn)叫做一个n元组(n-tuple)或简称元组(Tuple),元素中的每个 值di(i=1, 2,…, n)叫做一个分量(Component)。 如果Di(i=1, 2,…, n)为有限集,其基数(Cardinal number)为mi (i=1, 2,…, n),则 D1×D2×…×Dn的基数为:



笛卡尔积可以表示为一个二维表,


表中



【例1】 笛卡尔积举例。


给出3个域:


D1=学号集合stno={121001, 121002 }


D2=姓名集合stname={李贤友, 周映雪}


D3=性别集合 stsex={男, 女}


则D1, D2, D3,的笛卡尔积为:


D1×D2×D3={(121001, 李贤友, 男), (121001, 李贤友, 女), (121001, 周映雪, 男), (121001, 周映雪, 女), (121002, 李贤友, 男), (121002, 李贤友, 女), (121002, 周映雪, 男), (121002, 周映雪, 女)} 其中(121001, 李贤友, 男), (121001, 李贤友, 女), (121002, 周映雪, 男)等都是元组, 121001, 121002, 李贤友, 周映雪


男, 女等都是分量,这个笛卡尔积的基数是2×2×2=8,即共有8个元组, 可列成一张二维表,如表1-所示。



↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑表1–D1, D2, D3的笛卡尔积


3)关系(Relation)


定义3–笛卡尔积D1×D2×…×Dn的子集称为D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn) 这里的R 表示关系的名称,n是关系的目或度(Degree)。


当n=1时,称该关系为单元关 系或一元关系。


当n=2时,称该关系为二元关系。


当n=m 时,称该关系为m 元关系。


关系中的每个元素是关系中的元组,通常用t 表示。 在一般情况下,D1,D2,…,Dn的笛卡尔积是没有实际意义的,只有它的某个子集才 有实际意义,举例如下。


【例2】 关系举例


在例1–的笛卡尔积中,许多元组是没有意义的,因为一个学号只标识一个学生的姓名,一个 学生只有一个性别,表1–的一个子集才有意义,才可以表示学生关系,将学生关系取名为S, 表示为S(stno, stname, stsex),列成二维表如表2–所示。


↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓表2–S关系



• (1)关系的元组、属性和候选码


关系是笛卡尔积的有限子集,所以关系也是一个二维表。


• 元组(Tuple) 表的每一行,对应一个元组。


• 属性(Attribute) 表的每一列,对应一个域,由于域可以相同,为了加以区分,必须对每一列起一个唯一的 名字,称为属性。


• 候选码(Candidate key) 若关系中某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。


候选键码中的诸属性称为主属性(Prime attribute),不包含在任何候选码中的属性称为 非主属性(Non-prime attribute)或非码属性((Non-key attribute)。 在最简单的情况下,候选码只包含一个属性,在最极端的情况下,关系模式的所有属性 组成这个关系模式的候选码,称为全码(All-key)。


• 主码(Primary key) 在一个关系中有多个候选码,从中选定一个作为主码。


• (2)关系的类型


关系有3种类型:基本关系(又称基本表或基表)、查询表和视图表。


• 基本关系:实际存在的表,是实际存储数据的逻辑表示;


• 查询表 :查询结果对应的表;


• 视图表 :由基本表或其它视图标导出的表,是虚表,不对应实际存储的数据;


• (3)关系的性质


• 关系具有以下的性质:


列的同质性:每一列中的分量是同一类型的数据,来自同一个域。


列名唯一性:每一列具有不同的属性名,但不同列的值可以来自同一个域。


元组相异性:关系中任意两个元组的候选码不能相同。


行序的无关性:行的次序可以互换。


列序的无关性:列的次序可以互换。


分量原子性:分量值是原子的,即每一个分量都必须是不可分的数据项。


• (4)规范化


关系模型要求关系必须是规范化(normalization)的,规范化要求关系必须满足一定的规 范条件,而在规范条件中最基本的一条是每一个分量必须是不可分的数据项。规范化的关系简 称为范式(Normal Form)。


例如,表3–所示的关系就是不规范的,存在”表中有表”的现象。



2、关系模式


在关系数据库中,关系模式是型,关系是值。


关系是元组的集合,关系模式是对关系的描述,所以关系模式必须指出这个元组集合的结 构,即它由哪些属性构成,这些属性来自哪些域。


定义4--关系模式(Relation Schema)可以形式化地表示为R (U, D, DOM, F )


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


关系模式通常可以简记为 R (U ) 或R(A1, A2, …, An) 其中,R是关系名,A1, A2, …, An 为属性名。 关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、 随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。


在实际应用中,我们常常把关系模式和关系统称为关系。


9个 结果再此不展示


3. 关系数据库


在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。 关系数据库的型称为关系数据库模式,是对关系数据库的描述,包括若干域的定义和在这 些域上定义的若干关系模式。 关系数据库的值是这些关系模式在某一时刻对应的关系的集合。


二、【关系操作】


1、基本的关系操作


关系操作包括查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作两大部分。


查询操作是关系操作最重要的部分,可分为选择(Select)、投影(Project)、连接(Join)、除 (Devide)、并(Union)、差(Except)、交(Intersection)、笛卡尔积等。其中的5种基本操作是并、 差、笛卡尔积,选择、投影,其它操作可由基本操作来定义和导出。 关系操作的特点是集合操作方式,即操作的对象与结果都是集合。这种操作方式亦称为一次 一集合(set-at-a-time)方式,相应地,非关系模型的数据操作方式则为一次一记录(record-at-a- time)方式。


2、关系操作语言


关系操作语言是数据库管理系统提供的用户接口,是用户用来操作数据库的工具,关系 操作语言灵活方便,表达能力强大,可分为关系代数语言、关系演算语言和结构化查询语言三 类。


• (1)关系代数语言 用对关系的运算来表达查询要求的语言。


• (2)关系演算语言 用谓词来表达查询要求的语言,又分为元组关系演算语言和域关系演算语言,前者如 ALPHA,后者QBE。


• (3)结构化查询语言 介于关系代数和关系运算之间,具有关系代数和关系演算双重特点,如SQL。 以上三种语言,在表达能力上是完全等价的。 关系操作语言是一章高度非过程化语言,存取路径的选择由数据库管理系统的优化机制自 动完成。


三、【关系的完整性】


1、实体完整性(Entity Integrity)


规则1–实体完整性规则 若属性(一个或一组属性) A是基本关系R的主属性,则A不能取 空值。空值(null value)指”不知道”或”不存在”的值。 例如,在学生关系S(stno, stname, stsex)中,学号stno是这个关系的主码,则stno不能 取空值。又如在选课关系——选课(学号, 课程号, 分数)中,”学号, 课程号”为主码,则”学 号”和”课程号”两个属性都不能取空值。


实体完整性规则说明如下:


(1)实体完整性规则是针对基本关系而言。一个基本表通常对应现实世界的一个实体集。


(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。


(3)相应地,关系模型中以主码作为唯一性标识。


(4)主码中的属性即主属性不能取空值。


2、参照完整性(Referential Integrity)


在现实世界中实体之间存在的联系,在关系模型中都是用关系来描述,自然存在关系与 关系间的引用,参照完整性一般指多个实体之间的联系,一般用外码实现,举例如下。


【例3】 学生实体与学院实体可用以下关系表示,其中的主码用下划线标识。


学生S(学号, 姓名, 性别, 出生日期, 专业, 总学分, 学院号)


学院C(学院号, 学院名, 院长)


这两个关系存在属性的引用,学生关系引用了学院关系的主码”学院号”,学生关系”学 院号”必须是确实存在的学院的学院号,即学院关系有该学院的记录。


【例4】 学生、课程、学生与课程之间的联系可用以下3个关系表示,其中的主码用下划 线标识。


学生S(学号, 姓名, 性别, 出生日期, 专业, 总学分)


课程L(课程号,课程名,学分)


选课C(学号,课程号,分数)


这3个关系存在属性的引用,选课关系引用了学生关系的主码”学号”和课程关系的主码” 课程号”,选课关系”学号”和”课程号”的取值需要参照学生关系的”学号”取值和课程关 系的”课程号”取值。


【例5】学生关系的内部属性之间存在引用关系,其中的主码用下划线标识。


学生(学号, 姓名, 性别, 出生日期, 专业, 总学分, 班长学号)


在该关系中,


”学号”属性是主码,


”班长学号”属性是所在班级班长的学号,


它引用了 本关系”学号”属性,即”班长学号”必须是确实存在的学生学号。


定义5--设F 是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。 如果F与Ks相对应,则称F是R是的外码(Foreign Key)。并称基本关系R为参照关系 (Referencing Relation),基本关系S为被参照关系(Referenced Relation)或目标关系(Target Relation)。关系R和S不一定是不同的关系。


在例3–中,学生关系的”学院号”与学院关系的主码”学院号”相对应,所以,”学院 号”属性是学生关系的外码,学生关系是参照关系,学院关系是被参照关系。


在例4–中,选课关系”学号”和学生关系的主码”学号”相对应,选课关系”课程号” 和课程关系的主码”课程号”相对应,所以,”学号”属性和”课程号”属性是选课关系的外码,选课关系是参照关系,学生关 系和课程关系都是被参照关系。


在例5–中,学生关系的主码名是”学号”,外码名是” 班长学号”。但在实际应用中,为了便于识别,当外码与相应的主码属于不同的关系时,往往 取相同的名字。 参照完整性规则就是定义外码与主码之间的引用规则。


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


• 或者取空值(F 的每个属性值均为空值);


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


在例3–中,学生关系每个元组的”学院号”属性只能取下面两类值: (1)空值,表示尚未给该学生分配学院;


(2)非空值,被参照关系”学院号”中一定存在一个元组,它的主码值等于该参照关系” 学院号”中的外码值。


3. 用户定义完整性(User-defined Integrity)


用户定义的完整性是针对某一具体关系数据库的约束条件,使某一具体应用涉及数据必须满 足语义要求。


用户定义的完整性数据也称为域完整性或语义完整性,通过这些规则限制数据库只接受符合 完整性约束条件的数据值,不接受违反约束条件的数据,从而保证数据库的中数据的有效性和可 靠性。


按应用语义,属性数据有:


(1)类型与长度限制。


(2)取值范围限制。


如学生关系中”性别”数据只能是男或女,选课关系中”成绩”数据为1到100之间,等等。



关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。关系代数是施加于关系上 的一组集合代数运算,关系代数的运算对象是关系,运算结果也是关系。


关系代数中的操作可以分为两类:


(1)传统的集合运算,如并、交、差、笛卡儿积。这类运算将关系看成元组的集合,运算时 从行的角度进行。


(2)专门的关系运算,如选择、投影、连接等。这些运算不仅涉及行而且也涉及到列。


关系代数使用的运算符:


(1)传统的集合操作: (并)、-(差)、 (交)、 (笛卡儿积)。 (2)专门的关系操作: (选择)、 (投影)、 (连接)、÷(除)。 (3)比较运算符:>(大于)、≥(大于等于)、<(小于)、≤(小于等于)、=(等于)、≠(不等于)。


(2)逻辑运算符: (与)、 (或)、 (非)。


第二部分会在以后的章节详细介绍


相关实践学习
MySQL数据库快速部署实践
本场景主要介绍如何在一台配置了CentOS 7.7版本的ECS实例(云服务器)上安装mysql,执行mysql的常用操作,学习基本的SQL语句。
相关文章
|
达摩院 语音技术
使用ModelScope社区搭建一个录音情感识别小应用
本文介绍通过ModelScope来完成“语音情绪识别”这一应用,该应用使用两个模型: ● 语音转文本(ASR):paraformer模型 ● 文本情绪识别:达摩院StructBERT中文情感分类模型
2166 3
|
6月前
|
人工智能 JSON 安全
Spring Boot实现无感刷新Token机制
本文深入解析在Spring Boot项目中实现JWT无感刷新Token的机制,涵盖双Token策略、Refresh Token安全性及具体示例代码,帮助开发者提升用户体验与系统安全性。
669 4
|
11月前
|
机器学习/深度学习 人工智能 运维
CodeFuse团队2024年10篇论文总结
CodeFuse 是蚂蚁集团开发的多语言代码大型语言模型(LLM),基于海量高质量代码数据和多任务微调技术,已在内部研发人员的编码、测试、运维等场景中广泛应用。2024年,CodeFuse 在国际顶会如ICSE、ICDE、KDD等发表多篇论文,涵盖CodeLLM、机器学习、AI等领域,并开源多个自研大模型,总下载量近200万。项目持续迭代,欢迎贡献和建议。
489 11
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
631 4
|
消息中间件 JavaScript 前端开发
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
225 1
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
544 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
BXA
|
算法 程序员 决策智能
动态规划详解背包问题及实践(附C++代码)
背包问题是一个经典的组合优化问题,它可以被抽象为一个把物品放入背包中的过程,以求最终背包中物品价值的最大化
BXA
1308 0
语音识别(ASR)基础介绍第三篇——经典做法及术语概念
上一章介绍了万金油特征MFCC,相当于数据的输入已经确定了。 本章尽可能的介绍经典asr做法。其中涉及到的各种概念和思考,了解了之后,和相关专业的人交流,大概就不再迷茫了:D 传统方法也可以按 声学模型 和 语言学模型 的方式来划分。 声学模型主要的职责是,把一段音频处理成类似拼音的形式, 然后交给语言模型来猜: 能够发这些音的单词,怎么组合起来更常见一些。然后找到最可能的组合,便是asr的结
7578 0
|
网络安全 API 数据安全/隐私保护
轻松掌握curl:命令行中的网络大杀器
轻松掌握curl:命令行中的网络大杀器
547 0
|
存储 数据采集 自然语言处理
【项目】Boost搜索引擎
【项目】Boost搜索引擎
421 0