【关系模型】关系完整性约束

news2024/11/24 4:48:14

按照上面的框架我们已经讲了关系数据结构还有关系操作,今天来补充这一章的关系完整性约束

关系完整性约束

完整性约束

完整性约束可以保证数据的一致性和元组的唯一性

实体完整性约束

比如在学生表中,每一个元组都应该是唯一并且元组之间是可以区分的,通常通过对主键进行约束。比如主键下的值不能是空值,并且不能有重复的情况。即非空性和唯一性。

违反非空性:

用户ID (UserID)

用户名 (Username)

邮箱 (Email)

101

Alice

alice@example.com

102

Bob

bob@example.com

NULL

Eve

eve@example.com

103

Charlie

charlie@example.com

下面这个则违反了唯一性:

用户ID (UserID)

用户名 (Username)

邮箱 (Email)

101

Alice

alice@example.com

102

Bob

bob@example.com

101

Charlie

charlie@example.com

上面两个关系的主键都是用户ID(UserID)

若主键不单单是一个属性列,而是多个属性列组成的,即复合键,它也同时要满足非空性和唯一性。

例如下面这个就违反了非空性

学生ID (StudentID)

课程ID (CourseID)

成绩 (Grade)

1

CS101

A

2

MATH202

B+

NULL

CS101

B-

3

NULL

C+

4

CS101

A-

违反唯一性:

学生ID (StudentID)

课程ID (CourseID)

成绩 (Grade)

1

CS101

A

1

MATH202

B+

2

CS101

B

3

CS101

A-

1

CS101

C+

上面两个关系的复合键都是学生ID和课程ID。

在修改数据(包含插入、修改、删除)时若是违反了上述规则,数据库是不会运行该数据操作的,它会选择拒绝,因为在设计数据库时会设置好实体完整性约束,事实上都是为了每一个元组都唯一且彼此之间可区分。

参照完整性约束

这个约束是指主键和外键的对应关系不能出错,比如在在选课表中的外键是学生ID,而学生ID在学生表中是主键,主键和外键要“相等”,“一模一样”。

学生ID (StudentID)

姓名 (Name)

1

张三

2

李四

3

王五

学生ID (StudentID)

课程ID (CourseID)

1

CS101

2

MATH202

4

CS101

3

PHYS303

比如这个就明显违反了该约束,因为在选课表中出现了学生表没有的学生ID。而且在进行删除操作时,禁止删除主键(被引用),进行插入操作时,主键(被引用)先更新,即不能直接对外键值进行操作,要确保外键值是有效的,就必须是被引用的主键(也叫参照)先进行关系操作。

用户定义完整性约束

之前在说域这个概念时就有提到关系中的每个属性都存在一个取值集合即域,比如学生的年龄是大于等于0的。其实这个就是用户定义完整性约束。主要是体现在数据库的应用场景下,再比如学生表中每一个学生都必须要有性别和年龄信息,Sname 和Sage都不能取空值。

其他约束

非空约束

指某一属性下的值不能是空值,比如特定对Sage属性进行非空约束,那么就不能插入一个年龄为空的学生信息。

唯一约束

也是指对某一属性进行唯一约束,即不能取重复值,但是可以取空值,并且可以对多个属性进行约束,比完整性约束作用范围更大。

自增长约束

某一属性列的值必须满足自增,比如用户ID,学生号(2021210223->2021210224)

默认值约束

比如某一属性列的值默认是空值(NULL)或者0,也可以是其他默认值。

检查约束

某一属性必须满足某一取值范围,比如Sage必须大于等于零。

关系模型就暂告一段落了,接下来学习第三章——数据库设计

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

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

相关文章

JavaScript(Web APIs 作用和分类,DOM数是什么,document是什么,根据css选择器来获取DOM元素,修改DOM元素的方式,边量声明)

变量声明 变量声明有三个 var let 和 const建议: const 优先,尽量使用const,原因是: const 语义化更好 很多变量我们声明的时候就知道他不会被更改了,那为什么不用 const呢? 实际开发中也是,…

【unity框架开发8】unity场景Scene的使用, 如何封装一个场景管理器

文章目录 一、场景基本操作1、加载切换场景2、获取场景信息3、激活场景4、场景基本属性获取5、已加载场景个数6、获取场景中所有物体7、创建新场景8、卸载销毁场景 二、使用协程方法来异步加载场景1、AsyncOperation相关的代码应写在一个协同程序中。2、allowSceneActivation加…

AI深湖DeepLate人工智能的数据集格式开源项目

人工智能的数据集格式 文档 • 入门 • API 参考 • 例子 • 博客 • Slack 社区 • Twitter(推特) 用其他语言阅读这篇文章: English 深湖 Deep Lake Deep Lake 是一种数据集格式,提供简单的 API 以用于创建、存储和协作处理任何规模的…

Spring Security 与 OAuth 2.0 登录实现指南

文章目录 一、项目概述二、环境准备三、创建GitHub OAuth应用四、项目依赖配置五、配置OAuth 2.0六、创建控制器七、创建视图八、运行应用九、用户界面展示十、总结 在现代的Web应用中,安全性是一个不可忽视的因素。OAuth 2.0作为一种流行的授权框架,提供…

浅析主流监控告警系统基本架构和原理

浅析主流监控告警系统基本架构和原理 一,监控系统的作用和目前主流监控系统 1,作用:监控系统一般有以下这几个作用 实时采集监控数据:包括硬件、操作系统、中间件、应用程序等各个维度的数据。实时反馈监控状态:通过…

论文笔记:RelationPrompt :Zero-Shot Relation Triplet Extraction

论文来源: ACL Findings 2022 论文链接:https://arxiv.org/pdf/2203.09101.pdf 论文代码:http://github.com/declare-lab/RelationPrompt 本篇论文是由阿里达摩院自然语言智能实验室于2022年发表的关于零样本关系抽取的顶会论文,本篇博客将记录我在阅读过程中的一些笔记…

AI自动生成PPT解决方案,AI生成PPT-PrensentationGen-Java实现

AI自动生成PPT解决方案,AI生成PPT-PrensentationGen-Java实现。 利用大语言模型生成PPT文件的SpringBoot Web应用,主要功能是自动化创建演示文稿,适用于快速制作演示材料,特色在于其高效的模板处理和文本替换技术。 点击视频观看…

Python入门:如何在Python中优雅地书写多行字符串!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 多行字符串📒📝 什么是多行字符串?📝 三重引号📝 字符串连接📝 反斜杠⚓️ 相关链接 ⚓️📖 介绍 📖 在编程过程中,时常会遇到需要使用多行字符串的场景。例如,在编写长参数、描述文本或代码文档时,多行字符串…

java生成日历数据列表并按日历格式导出到excel

日历格式输出 日历数据列表导出封装日历格式实体类效果 日历数据列表 /**** 封装日历数据* param year 年份* param month 月份*/public List<InspectionDailyStaffPlanCalendarData> selectCalendarDataList(int year,int month,List<InspectionDailyStaffPlan> …

centos7 Oracle 11g rac 静默安装(NFS配置共享存储)

1.环境信息准备 注意&#xff1a; 在配置网络时&#xff0c;Oracle RAC的每个节点必须具有至少两个以上的网卡&#xff0c;一张网卡对外提供网络服务&#xff0c;另一张网卡用于各个节点间的通信和心跳检测等。在配置RAC集群的网卡时&#xff0c;如果节点1的公共接口是eth0&…

随机变量及其分布

定义 1.随机变量是一个从样本空间&#xff08;所有可能结果的集合&#xff09;到实数集的函数。样本空间中的每个结果都对应于随机变量的一个值。随机变量的值可以是离散的&#xff0c;也可以是连续的。随机变量通常用大写字母表示&#xff0c;如 X、Y 或 Z。 2.随机变量和事…

难点:Linux 死机定位(进程虚拟地址空间耗尽)

死机定位(进程虚拟地址空间耗尽) 一、死机现象 内存富裕,但内存申请失败。 死机时打印: 怀疑是: 1、内存碎片原因导致。 2、进程虚拟地址空间耗尽导致。 3、进程资源限制导致。 二、内存碎片分析 1、理论知识:如何分析内存碎片化情况 使用 /proc/buddyinfo: /proc/…

Java-sec-code学习2

Java-Sec-Code学习1-文件上传漏洞 case1 url: http://127.0.0.1:8080/file/any 这是一个典型的上传页面&#xff0c;我们尝试上传一个文件试试看。 直接上传一个jsp文件&#xff0c;发现可以直接上传&#xff0c;非常顺利。这意味这后端和前端都没有对文件类型进行任何限制。…

[旧日谈]关于Qt的刷新事件频率,以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。

[旧日谈]关于Qt的刷新事件频率&#xff0c;以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。 最近在开发的时候&#xff0c;发现一个依赖事件来刷新渲染的控件会导致程序很容易异常和崩溃。 当程序在运行的时候&#xff0c;其实软件本身的负载并不高&#xff0c;所以…

【LeetCode每日一题】——724.寻找数组的中心下标

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 724.寻找数组的中心下标 四【…

python基础路径的迁移

本人未安装anaconda或pycharm等&#xff0c;仅安装了某个python环境&#xff0c;因此以下方法仅针对基础python环境的迁移&#xff0c;不确保其他软件或插件正常运行 第一步将原python路径的整个文件夹剪切到新的路径下 第二步修改系统环境变量&#xff0c;将原来的python路径…

胤娲科技:AI绘梦师——一键复刻梵高《星空》

想象一下&#xff0c;你手中握有一张梵高的《星空》原图&#xff0c;只需轻轻一点&#xff0c;AI便能化身绘画大师&#xff0c;一步步在画布上重现那璀璨星河。 这不是科幻电影中的桥段&#xff0c;而是华盛顿大学科研团队带来的“Inverse Painting”项目&#xff0c;正悄然改变…

【软件工程】McCabe复杂度计算

文章目录 一、定义与公式二、计算步骤三、示例四、注意事项 McCabe复杂度&#xff0c;又称为环路复杂度&#xff08;Cyclomatic Complexity&#xff09;&#xff0c;是一种用来度量软件程序复杂度的经典方法。它通过计算程序中独立路径的数量&#xff0c;帮助开发人员理解代码的…

CMIP6数据处理 ▎单点降尺度、统计方法的区域降尺度、基于WRF模式的动力降尺度

CMIP6数据被广泛应用于全球和地区的气候变化研究、极端天气和气候事件研究、气候变化影响和风险评估、气候变化的不确定性研究、气候反馈和敏感性研究以及气候政策和决策支持等多个领域。这些数据为我们理解和预测气候变化&#xff0c;评估气候变化的影响和风险&#xff0c;以及…

【从感知机到神经网络】

感知机 什么是感知机 公式、框图表示 直观举例 根据身高体重判断胖瘦的感知机。 1、根据已知样本训练出一条直线&#xff0c;用于对非训练样本进行分类&#xff0c;这条直线就是感知机模型。 三维情况下感知机模型是一个平面 感知机的缺陷 缺陷原因 不能处理异或问题&…