【数据库原理】(25)数据完整性

一.完整性概述

数据库的完整性是保证数据正确性和一致性的关键。它防止数据库中存在不符合业务逻辑或语义规则的数据,避免错误信息的输入和输出。数据库的完整性和安全性不同,安全性关注的是防止非法用户的访问和恶意操作,而完整性则关注数据内容的正确性。

为了维护数据库完整性,DBMS提供了完整性约束条件的机制,这些约束条件是数据语义的表达,由用户定义,并在数据模式定义时设定为模式的一部分。当用户操作可能违反这些约束时,DBMS会拒绝执行相应的操作。

完整性规则

  1. 实体完整性:确保每个表都有唯一的主键,用于标识每条记录。

  2. 参照完整性:确保表间的外键关系正确,外键值必须在参照表的主键中存在或为NULL(如果允许)。

  3. 用户定义完整性:根据特定的业务规则或政策定义的约束条件,如某字段的值必须在一定范围内。

  4. 域完整性(列完整性):确保表中每列的值满足特定条件,如数据类型、数据格式或值的范围。

完整性检查

当修改数据库状态的操作(如INSERT、UPDATE、DELETE)发生时,DBMS检查是否违反了完整性约束。

如果操作违反完整性约束,DBMS会拒绝执行该操作并返回错误。

现代DBMS提供工具和方法来定义和自动检查完整性约束。

完整性的重要性

  • 确保数据准确性:避免错误数据的输入。
  • 实施业务规则:帮助维护特定的业务逻辑和规则。
  • 保持数据关系正确性:保持表之间正确的关系。
  • 提升数据质量:提高数据的可靠性和信任度。

二.完整性约束

数据库的完整性约束条件是对数据的质量和逻辑正确性的保护。它们在不同级别上施加限制,确保数据的准确性和可靠性。

列级

1. 静态列级约束

这些约束涉及单个列的属性和规则。

  • 数据类型约束:指定列的数据类型、长度、单位和精度。
  • 数据格式约束:规定列的特定格式,如日期格式或电话号码格式。
  • 取值范围或集合约束:限制列的值必须在特定范围或集合内,如年龄在20到55岁之间。
  • 空值约束:确定列是否可以接受空值。
  • 其他约束:如排序规则或列组合。

2. 动态列级约束

涉及对列定义或值的修改。

  • 修改列定义约束:如,更改列是否允许空值。
  • 修改列值约束:新值必须符合与旧值的某种关系。

元组级

1. 静态元组约束

元组级约束涉及单个记录内部列值间的关系。

  • 列间关系约束:比如,一个元组的还书日期应晚于借书日期。

2. 动态元组约束

涉及对单个记录的修改,应满足某种约束条件。

  • 元组修改约束:如,不允许降低特定员工的工资。

关系级

1. 静态关系约束

涉及一个或多个关系内部不同记录间的关系。常见的关系约束有以下四种:

  • 实体完整性:确保每个表的主键是唯一的。
  • 参照完整性:确保外键值与参照表的主键匹配。
  • 函数依赖约束:特定的业务逻辑规则。
  • 统计约束:某个字段与一个关系多个元组的统计值之间的关系。如,工资不得高于或低于特定统计值的倍数。

2. 动态关系约束

涉及整个关系或多个关系的状态变化。

  • 事务一致性和原子性:保证事务的完整性和不可分割性。

三.完整性控制

数据库完整性控制确保数据的正确性和一致性,防止无效或错误的数据操作。这涉及到定义完整性约束条件、监测用户操作、以及在违反约束条件时采取适当的措施。

1. 完整性约束的定义

完整性控制功能主要包括:

  • 定义功能:提供定义完整性约束的机制。
  • 检查功能:检查用户操作是否违反完整性约束。
  • 反应机制:在操作违反完整性约束时,采取相应措施以保持数据完整性。

2. 违反完整性约束的处理措施

处理违反完整性约束的情况时,DBMS通常采取以下措施:

  • 对实体完整性和用户定义完整性规则的违反:通常拒绝执行违反这些规则的操作。

  • 对参照完整性的违反:处理方式可能更复杂,包括接受操作并执行附加操作,以维持数据库的正确状态。

    • 级联删除:在删除被参照关系的元组时,同时删除参照关系中所有相关元组。

    • 受限删除:只有在没有相关元组时才允许删除操作。

    • 删除值空置:将相关元组的外码值置为空值。

    • 级联修改:同时修改被参照关系中的主码和参照关系中的相关外码值。

    • 受限修改:只在没有相关元组时允许修改操作。

    • 修改值空置:将相关元组的外码值置为空值。

  • 外码接受空值:是否接受空值取决于应用环境的语义。

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

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

相关文章

黑马苍穹外卖学习Day7

文章目录 缓存菜品实现思路代码开发 缓存套餐Spring Cache入门案例实现思路代码开发 添加购物车需求分析和设计代码开发 查看购物车需求分析代码开发 清空购物车需求分析代码实现 缓存菜品 实现思路 代码开发 Controller层 RestController("userDishController") …

2024.1.16 GCC 编译选项 屏蔽某些警告 CMAKE_CXX_FLAGS

gcc警告选项汇总 请求或取消警告的选项 警告是诊断消息,报告的结构本质上不是错误的,但是有风险或表明可能有错误。 以下与语言无关的选项不会启用特定的警告,但会控制GCC生成的诊断类型。 -fsyntax-only 检查代码中的语法错误,…

ROS第 6 课 编写简单的订阅器 Subscriber

文章目录 第 6 课 编写简单的订阅器 Subscriber1. 编写订阅者节点2. 测试发布者和订阅者 第 6 课 编写简单的订阅器 Subscriber 订阅器是基于编辑了发布器的基础上创建的,只有发布了消息,才有可能订阅。若未编辑发布器,可前往"ROS第5课 …

FlinkSQL【分组聚合-多维分析-性能调优】应用实例分析

FlinkSQL处理如下实时数据需求: 实时聚合不同 类型/账号/发布时间 的各个指标数据,比如:初始化/初始化后删除/初始化后取消/推送/成功/失败 的指标数据。要求实时产出指标数据,数据源是mysql cdc binlog数据。 代码实例 --SET t…

解决kali beef启动失败解问题

只限于出现这个提示的时候使用 卸载 ruby apt remove ruby 卸载 beef apt remove beef-xss 重新安装ruby apt-get install ruby apt-get install ruby-dev libpcap-dev gem install eventmachine 重新安装beef apt-get install beef-xss 弄完以上步骤如果还是不行就重启kali再试…

cmake构建动态库实例(cmakelist)

文章目录 一、开发实例1.1 代码目录1.2 代码内容1.2.1 CMakeLists.txt1.2.2 mylib.cpp1.2.2 mylib.h1.2 编译二、动态库使用方法一、动态链接源代码构建运行方法二:dlopen方式一、开发实例 通过cmake构建静态开发实例如下: 1.1 代码目录 代码目录结构如下:

nestjs 装饰器

1、装饰器定义 装饰器是一种特殊的类型声明,它可以附加在类、方法、属性、参数上边 需开启tsconfig.json中 "experimentalDecorators":true 生成tsconfig.json文件 tsc -init 2、类装饰器 // 类装饰器 主要是通过符号添加装饰器 // 装饰器会自动把cl…

CCC数字钥匙标准3.0版本解读(23)

文章目录 17.8 数据结构定义17.8.1 请求报头17.8.2 响应报头17.8.3 Key类型17.8.4 EncryptedDataContainer17.8.5 未加密的uiBundle17.8.6 数字钥匙状态17.8.7 manageKey操作类型17.8.8 钥匙操作类型17.8.9 通知的事件类型17.8.10 事件通知的事件数据17.8.11 未加密的时间通知数…

【MySQL】MySQL表的增删查改以及聚合函数/group by句子的使用

文章目录 一、创建--Create1.单行数据 全列插入2.多行数据 指定列插入3.插入否则更新4.替换 -- replace 二、读取--Retrieve1.SELECT列1.1全列查询1.2指定列查询1.3查询字段为表达式1.4为查询结果指定别名1.5 结果去重 -- distinct 2.WHERE 条件3.结果排序4.筛选分页结果 三、…

《数据结构》学习笔记

1.算法分析的两个主要任务:正确性(不变性 单调性) 复杂度。 2.复杂度分析的主要方法: 迭代:级数求和;递归:递归跟踪 递推方程猜测 验证 3.级数: (1)算…

LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline

近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的…

智能小程序小部件(Widget)表单组件属性说明+代码明细

在 Tuya MiniApp Tools 中,新建项目并选择小部件(Widget)对应模板即可自动创建小部件(Widget)项目。 button 按钮,用于强调操作并引导用户去点击。 属性说明 属性名类型默认值必填说明sizestringdefault否按钮的大小typestringdefault否按钮的样式类…

opencv_角点检测

文章内容 一个opencv检测角点的程序 运行效果 #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>using namespace cv; using namespace std;void detectCorners(M…

低代码-详情页组件设计

详情页数据结构定义 layout:{// 按钮数据buttonLayout:{headButton:[], // 页头按钮footButton:[] // 页脚按钮},// 详情页表单配置config:{}, // 配置组件列表detailLayout:[]}默认行为 进表单初始化&#xff0c;只展示表单属性&#xff0c;隐藏通用、数据、事件tab项。 配…

低代码自动化平台| 游戏规则改变者

自动化测试对于软件开发公司起着非常重要的作用。它在公司及其客户之间建立了对优质产品的信任。此外&#xff0c;它还使软件开发人员更加自信&#xff0c;因为他们可以在其他模块上工作&#xff0c;而不必担心应用程序的任何现有功能是否存在错误。在软件测试中融入自动化是必…

数据分析-Pandas如何整合多张数据表

数据分析-Pandas如何整合多张数据表 数据表&#xff0c;时间序列数据在数据分析建模中很常见&#xff0c;例如天气预报&#xff0c;空气状态监测&#xff0c;股票交易等金融场景。数据分析过程中重新调整&#xff0c;重塑数据表是很重要的技巧&#xff0c;此处选择Titanic数据…

多测师肖sir___ui自动化测试po框架(升级)

ui自动化测试po框架&#xff08;升级&#xff09; po框架 一、ui自动化po框架介绍 &#xff08;1&#xff09;PO是Page Object的缩写&#xff08;pom模型&#xff09; &#xff08;2&#xff09;业务流程与页面元素操作分离的模式&#xff0c;可以简单理解为每个页面下面都有一…

【linux】visudo

碎碎念 visudo命令是用来修改一个叫做 /etc/sudoers 的文件的&#xff0c;用来设置哪些 用户 和 组 可以使用sudo命令。并且使用visudo而不是使用 vi /etc/sudoers 的原因在于&#xff1a;visudo自带了检查功能&#xff0c;可以判断是否存在语法问题&#xff0c;所以更加安全 …

深入探讨 Go 语言中的 Map 类型(续)

深入探讨 Go 语言中的 Map 类型&#xff08;续&#xff09; 在上一篇博客中&#xff0c;我们已经讨论了 Go 语言中 map 类型的基本概念、特性以及最佳实践。本篇继续深入&#xff0c;讨论一些更高级的 map 用法和技巧&#xff0c;以及一些注意事项。 更高级的 Map 用法 1. m…

7.评价预测模型——C指数,NRI,IDI计算

目录 基本知识 1. C指数 2. NRI、IDI 二分类资料 1. C指数 C指数计算 比较两个模型C指数 2. NRI 3. IDI 生存资料 1. rms包拟合的生存曲线 C指数 比较两个模型的C指数 2. survival包拟合的生存曲线 C指数 NRI计算 IDI 基本知识 1. C指数 C指数&#xff1a; …