5.2 参照完整性

news2025/2/25 2:59:52

思维导图:

 5.2.1 定义参照完整性

 

5.2 参照完整性笔记:

一、概念

  1. 参照完整性 (Referential Integrity):确保关系数据库中的数据表间的关系始终保持一致性。
  2. 外键 (Foreign Key):一个表中的列或列组,用于标识另一个表中的唯一记录。

二、定义参照完整性

  1. 使用FOREIGN KEY关键词定义外键。
  2. 使用REFERENCES关键词指明外键对应的主键所在的表和列。

三、示例说明

  • 在关系SC中,SnoCno作为复合主键代表学生的选课记录。其中:
    • Sno是学生编号,参照Student表的主码。
    • Cno是课程编号,参照Course表的主码。

代码示例 [例5.3]:

CREATE TABLE SC (
  Sno CHAR(9) NOT NULL,
  Cno CHAR(4) NOT NULL,
  Grade SMALLINT,
  PRIMARY KEY(Sno,Cno),
  FOREIGN KEY(Sno) REFERENCES Student(Sno),
  FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

此代码展示了如何在创建SC表时定义实体完整性和参照完整性。

四、注意事项

  1. 在表级定义完整性:在本例中,我们在表级别定义了实体完整性(通过PRIMARY KEY)和参照完整性(通过FOREIGN KEY)。
  2. 确保参照的主键存在:在插入或修改记录时,外键所参照的主键必须存在于被参照的表中,否则将违反参照完整性。
  3. 删除或修改主键值的注意:当尝试删除或修改一个被外键参照的主键值时,必须特别小心,因为这可能导致数据不一致。

通过理解和应用参照完整性的概念,我们可以确保数据库中的数据始终保持一致性和完整性。


什么是参照完整性?

参照完整性是关系数据库中的一种完整性约束,确保数据之间的一致性和引用关系的有效性。以下是参照完整性概念的深入解释:

  1. 基本定义:参照完整性确保在一个表中的外键必须匹配另一个表中的主键或者是NULL。

  2. 理解引用关系:想象一个学生注册系统。每个学生都在一个特定的专业中。在“学生”表中,你可能有一个“专业ID”的字段作为外键,这个外键指向“专业”表中的主键。“专业”表中列出了所有可能的专业。参照完整性确保每个学生的“专业ID”要么是NULL,要么确实存在于“专业”表中。这确保了学生不能被分配到一个不存在的专业。

  3. 保护数据完整性:参照完整性的主要目的是防止数据不一致性。使用上述的例子,如果没有参照完整性,可能会有学生的记录显示他们在一个不存在的专业中,这将导致数据不准确和混淆。

  4. 违约处理:当试图进行破坏参照完整性的操作时(例如,尝试插入一个在“专业”表中不存在的专业ID到“学生”表中),数据库通常会阻止这种操作。数据库提供了几种违约处理策略,如拒绝操作、级联删除/更新或设置为NULL。

  5. 灵活性与规则:虽然参照完整性为数据库提供了结构和规则,但它还提供了一定的灵活性。例如,外键可以是NULL,表示在参照的表中没有相应的值。这在某些场景中是有意义的,如上面的例子中,学生可能还没有选择专业。

  6. 设计的重要性:在数据库设计时,确定正确的主键和外键关系至关重要。一个良好的设计可以确保数据的一致性,简化查询,同时也能为将来的数据增长提供结构。

总的来说,参照完整性是关系数据库中确保数据质量和准确性的一种方法,通过保证在一个表中引用的信息在另一个表中真实存在。

 类比可以很好的解释这个问题:

当然可以,我们可以使用一些日常生活中的例子和类比来解释参照完整性。

类比1:图书馆与书籍 想象一个图书馆和读者。图书馆有很多书籍,每本书都有一个唯一的编号。读者可以借书,当他们借书时,他们的借书记录中会有这本书的编号。

  • 参照完整性:确保读者借的每本书的编号在图书馆的书籍列表中都能找到。没有参照完整性的话,就像读者借了一个图书馆根本不存在的书,这显然是不合逻辑的。

类比2:机场与航班 想象一个大型机场和乘客。每一个出发的或到达的航班都有一个唯一的航班号。乘客购买的机票上都会印有这个航班号。

  • 参照完整性:确保每一个机票上的航班号都对应一个实际存在的航班。没有参照完整性就像你买了一个机票,但机场里根本没有这个航班,这是不可能的。

类比3:超市与商品 想象你去超市购物。每一种商品都有一个唯一的条形码。当你结账时,收银员会扫描每件商品的条形码来计算总价。

  • 参照完整性:确保每一个扫描的条形码在超市的商品数据库中都有对应的商品和价格。没有参照完整性的话,就像收银员扫描了一个商品,但在超市的系统里找不到这个商品,这显然是不应该发生的。

通过这些日常生活的例子,参照完整性可以被理解为确保我们的"引用"或"提及"(如书的编号、航班号、商品条形码)在其对应的"源"或"列表"中(如图书馆的书籍列表、机场的航班表、超市的商品数据库)真实存在。

 

5.2.2 参照完整性检查与违约处理笔记:

一、概念

  • 参照完整性:确保两个或多个表间数据的一致性。
  • 违约处理:当某一操作可能破坏参照完整性时,数据库的反应和处理方式。

二、可能破坏参照完整性的操作及违约处理

被参照表(如:Student)参照表(如:SC)违约处理
插入元组可能破坏参照完整性拒绝
修改外码值可能破坏参照完整性拒绝
删除元组→ 可能破坏参照完整性拒绝/级联删除/设置为空值
修改主码值→ 可能破坏参照完整性拒绝/级联修改/设置为空值

三、具体情况说明

  1. 插入或修改参照表中的元组,而对应的值在被参照表中不存在。
  2. 从被参照表中删除元组,导致参照表中存在孤立的引用。
  3. 修改被参照表中的主键值,导致参照表中存在孤立的引用。

四、违约处理策略

  1. 拒绝(NOACTION):默认策略,不允许执行该操作。
  2. 级联(CASCADE):删除或修改被参照表的元组时,相应地删除或修改参照表中相关的所有元组。
  3. 设置为空值:删除或修改被参照表的元组时,将参照表中相关元组的外键列设置为空值。

五、注意事项

  • 外码接受空值:根据应用场景,某些外码列可以接受空值。但若外码同时是实体的主属性,例如SC中的Sno,那么它不应取空值,因为按实体完整性规则,主属性不能为空。
  • 明确违约处理策略:在定义外键时,可以指定违约处理策略。例如,ON DELETE CASCADE意味着当删除被参照表的元组时,会级联删除参照表中的相关元组。

六、代码示例 [例5.4]

CREATE TABLE SC (
  Sno CHAR(9),
  Cno CHAR(4),
  Grade SMALLINT,
  PRIMARY KEY(Sno,Cno),
  FOREIGN KEY(Sno) REFERENCES Student(Sno) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY(Cno) REFERENCES Course(Cno) ON DELETE NO ACTION ON UPDATE CASCADE
);

此示例中:

  • 删除Student表中的元组时,会级联删除SC表中的相关元组。
  • 删除Course表中的元组时,会拒绝该删除操作,而更新Course表中的cno时,会级联更新SC表中的相关元组。

总结

参照完整性的实现除了定义主码和外码外,还要根据应用环境的要求确定合适的违约处理策略。

 

 

总结:

重点:

  1. 定义:参照完整性是确保数据库中的数据在各个表之间保持一致性和准确性的一个重要概念。
  2. 外键 (Foreign Key):外键是一个表中的列或列组合,其值必须与另一个表的主键值匹配。外键用于确保两个表之间的参照完整性。
  3. 完整性约束:确保当在一个表中插入、更新或删除数据时,不会破坏数据库中其他表的数据一致性。

难点:

  1. 级联操作:例如,如果你删除一个记录,可能需要级联删除其他相关的记录以保持数据完整性,这需要深入的理解和正确的实现。
  2. 循环参照:可能出现两个或多个表之间相互参照的情况,这在处理时可能会引起混淆。
  3. 多对多关系:需要通过中间表来实现,有时可能难以设置正确的参照完整性规则。

易错点:

  1. 不正确地设置外键:如果外键设置不正确,可能导致不正确的数据插入或更新。
  2. 忽略完整性约束:在进行数据操作时,例如删除记录,可能会忽略与其他表的关系,导致数据不一致。
  3. 错误的级联操作:可能在不需要的时候进行级联删除,或在需要的时候没有进行。
  4. 性能问题:如果参照完整性规则设置得过于复杂,可能会对数据库的性能产生影响。

理解和实现参照完整性是数据库设计和维护中的一个关键任务,确保数据的完整性和一致性至关重要。

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

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

相关文章

QMI8658A_QMC5883L(9轴)-EVB 评估板-使用说明书

文章目录 0.前言 1.硬件准备 1.1 I2C 接口 1.2 USART 接口 2.运行程序 2.1 QMI8658A 常值零偏校准 2.2 QMC5883L地磁传感器校准 2.3 校准步骤 3.与 example-algo-visualizer.exe 上位机通信协议 0.前言 【相关博文】 【QMI8658 - 姿态传感的零偏(常值零偏)标定】 【QMC5883L-磁…

计算机毕业设计选题推荐-大学生心理健康测评微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

[学习笔记]TypeScript查缺补漏(二):类型与控制流分析

文章目录 类型约束基本类型联合类型 控制流分析instanceof和typeof类型守卫和窄化typeof判断instanceof判断in判断内建函数,或自定义函数赋值布尔运算 保留共同属性 字面量类型(literal type)as const 作用 类型约束 TypeScript中的类型是一…

产品经理一定要学会的原型交互规范设计

一、主级按钮 序号1、序号2:主级按钮 一个按钮区最多一个主级按钮,也可以没有 二、线框按钮 序号3:如果不是非常为了突出“完成”、“推荐”的操作,可以多采用线框按钮 三、红色按钮 序号4:红色按钮不需要选中颜色这…

Vue3.0插槽:VOA模式

用法&#xff1a; 父组件App.vue <template><div><!--将html代码插入到子组件中带默认名称的插槽中--><AChild><!--这段html会插入到AChild组件中<slot></slot>插槽中--><!-- 注意&#xff1a;写在父组件中的html代码只能在父组…

Redis之持久化(RDB和AOF)

文章目录 前言一、RDB1.介绍2.redis.config有关配置3.触发4.恢复5.优缺点 二、AOF1.介绍2.redis.config配置3.启动4.恢复5.重写6.优缺点 总结 前言 Redis 是内存数据库&#xff0c;即数据存储在内存。 如果不将内存中的数据保存到磁盘&#xff0c;一旦服务器进程退出&#xff…

uniapp js-sdk插件之js实用工具包

插件介绍 插件为uniapp前端js工具包&#xff0c;工具包包含了众多模块&#xff0c;数组、颜色、日期、加解密、函数、数字、对象、请求、字符串、验证等模块&#xff0c;可以让您的开发得心应手&#xff0c;不需要为了一个功能需要花费大量的时间从网上再去搜索&#xff0c;本…

什么是覆盖索引?

覆盖索引是指一个索引包含了查询语句所需的所有数据&#xff0c;不仅能够提供索引的搜索能力&#xff0c;还可以完全覆盖查询需求&#xff0c;避免了回表操作&#xff08;即根据索引查找到主键&#xff0c;再根据主键获取数据的额外操作&#xff09;&#xff0c;从而提高查询性…

【AI数学】三维视觉中的四种坐标系

三维视觉中&#xff0c;需要掌握四种坐标系&#xff1a;世界坐标系、相机视角坐标系、NDC坐标系、屏幕坐标系。 世界坐标系&#xff08;World coordinate system&#xff09; 物体或者场景在真实世界中的位置。 相机视角坐标系&#xff08;Camera view coordinate system&…

数字孪生技术:强化紧急响应与决策

随着科技的不断进步&#xff0c;数字孪生技术已经逐渐渗透到了各个行业&#xff0c;其中包括了灾害管理领域。在灾害管理中&#xff0c;数字孪生提供了极大的帮助&#xff0c;使决策者更好地理解和应对各种灾害&#xff0c;包括自然灾害和人为灾害。本文带大家一起探索数字孪生…

WhatsApp Business为什么会被封号?该如何解决

目前&#xff0c;作为全球即时通讯领域的重要平台之一的WhatsApp已成为企业在营销和与客户沟通时的首选工具。但是长时间、高强度的营销行为很容易导致WhatsApp Business账户突然被封禁&#xff0c;无法再使用账号。即使后续再去进行申诉&#xff0c;要求官方解封该账户&#x…

LeetCode----124. 二叉树中的最大路径和

题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 示…

延时摄影视频制作工具 LRTimelapse mac中文版特点介绍

lrTimelapse mac是一款适用于 Windows 和 macOS 系统的延时摄影视频制作软件&#xff0c;可以帮助用户创建高质量的延时摄影视频。该软件提供了直观的界面和丰富的功能&#xff0c;支持多种时间轴摄影工具和文件格式&#xff0c;并具有高度的可定制性和扩展性。 lrTimelapse ma…

计算机从内存中读取数组元素

在计算机中&#xff0c;我们可以把内存看成是一些排列好的格子&#xff0c;每个格子对应一个内存地址&#xff0c;那么数据会分散的存储在不同的格子中&#xff1a; 对于数组&#xff0c;计算机会在内存中为其申请一段连续的空间&#xff0c;并且会记下索引为0处的内存地址&…

HTML和CSS的基础-前端扫盲

想要写出一个网页&#xff0c;就需要学习前端开发&#xff08;写网页代码&#xff09;和后端开发&#xff08;服务器代码&#xff09;。 对于前端的要求&#xff0c;我们不需要了解很深&#xff0c;仅仅需要做到扫盲的程度就可以了。 写前端&#xff0c;主要用到的有&#xf…

大厂面试题-网络四元组

四元组&#xff0c;简单理解就是在TCP协议中&#xff0c;去确定一个客户端连接的组成要素&#xff0c;它包括源 IP地址、目标IP地址、源端口号、目标端口号。 正常情况下&#xff0c;我们对于网络通信的认识可能是这样(如图)。 服务端通过Server Socket建立一个对指定端口号…

WebDAV之π-Disk派盘 + 记得倒数日

推荐一款帮你记录一生中重要日子的倒计时App记得倒数日,帮您记录纪念日、生日、倒数日、正数日、传统节日、倒数拾光等,成为你生活小帮手,及时提醒你日子的到来,还支持连接葫芦儿派盘服务。 【记得倒数日特色】 1.一款实用的生活工具,记得日子致力于做优秀的倒数日。 2.结…

Python笔记——pyChram连接linux子系统,使用linux下的Python进行编译

Python笔记——pyChram连接linux子系统&#xff0c;使用linux下的Python进行编译 Linux子系统安装与配置安装前准备安装Linux子系统安装Python3.8配置pyCharm 最近要跑的实验里&#xff0c;python有个机器学习的库windows环境下是没有的&#xff0c;在linux环境下有。虚拟机又不…

C#编程中字符串公式的计算

在一个程序开发当中&#xff0c;有很多涉及到公式的定义与计算&#xff0c;在用户给定的文档中&#xff0c;公式采用字符串形式定义&#xff0c;包含了一些变量名和各种运算符号&#xff0c;程序需要先进行字符变量的值替换后再进行计算&#xff0c;取得结果后再进行后续的操作…

【EI会议征稿】第七届先进算法与控制工程国际学术会议(ICAACE 2024)

第七届先进算法与控制工程国际学术会议&#xff08;ICAACE 2024&#xff09; 2024 7th International Conference on Advanced Algorithms and Control Engineering 第七届先进算法与控制工程国际学术会议&#xff08;ICAACE 2024&#xff09;定于2024年1月26-28日在中国上海…