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

news/2024/2/25 13:32:12/文章来源:https://blog.csdn.net/qq_40951951/article/details/135568660

一.完整性概述

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

为了维护数据库完整性,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.luyixian.cn/news_show_925891.aspx

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

相关文章

TS学习笔记四:函数及泛型枚举

本节介绍ts的函数及泛型的相关内容,包括函数的声明格式及泛型的相关知识。 视频讲解 TS学习笔记四:函数的定义使用 B站视频 TS学习笔记四:函数的定义使用 西瓜视频 https://www.ixigua.com/7321535978286514727 一、函数 函数是js程序的…

[oeasy]python005_退出游乐场_重启游乐场_系统态shell_应用态_quit

0005_ 退出游乐场_重启游乐场_系统态shell 退出终端_重启游乐场_shell_quit 🥊 Python 回忆 上次 了解了 python进入了 python 游乐场 在游乐场 可以做 简单的计算还可以做 乘方运算 数字特别大之后 游乐场 会迟疑一下不过 最终 还是能算出来 可以让数字 更大一…

Vue学习笔记3--全局事件总线

Vue学习笔记3—全局事件总线 1.全局事件总线可以实现任意组件间通信 X需具备的条件: 所有的组件都要能看见X可以调用$on $off $emitVue.prototype.x {a:1, b:2} 可以被所有组件看见VueComponent.protoype.proto Vue.prototype组件实例对象(vc)可以访问到Vue原型上…

Java多线程并发篇----第十八篇

系列文章目录 文章目录 系列文章目录前言一、寄存器二、程序计数器三、PCB-“切换桢”四、上下文切换的活动五、引起线程上下文切换的原因前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了…

QT软件在线安装与维护

一.安装 安装QT开发环境分离线安装和在线安装两种方式,具体步骤如下: QT官网注册账号----下载安装包-----安装-----选择要安装的版本与开发包----版本维护 注意:Qt5.14.2是最后提供二进制安装包的版本,后面的版本都需要在线安装…

小程序系列--7.页面配置以及网络数据请求

一. 页面配置 1.页面配置文件的作用 小程序中,每个页面都有自己的 .json 配置文件,用来对当前页面的窗口外观、页面效果等进行配置。 2. 页面配置和全局配置的关系 3. 页面配置中常用的配置项 二、网络数据请求 1. 小程序中网络数据请求的限制 2. 配…

数据分析中常用的指标或方法

一、方差与标准差二、协方差三、皮尔逊系数四、斯皮尔曼系数 一、方差与标准差 总体方差 V a r ( x ) σ 2 ∑ i 1 n ( x i − x ˉ ) 2 n ∑ i 1 n x i 2 − n x ˉ 2 n E ( x 2 ) − [ E ( x ) ] 2 Var(x)\sigma^2\frac {\sum\limits_{i1}^{n} (x_i - \bar{x})^2} {n…

SQL性能分析手段

SQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供整个服务器执行sql的状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次: -- session 是查看当前会话 ; -- globa…

数据结构排序二叉树(下)

哎,调了几天深度学习模型,今天来更新排序二叉树 文章目录 前言 一、排序二叉树的结构定义 二、在排序二叉树添加数据 三、定义创建排序二叉树函数 四、查找一棵二叉排序树中的结点x的所在层数 五、删除二叉排序树中T关键字x的节点 六、查找二叉排序树中的所有小于key的关…

【小笔记】算法训练基础超参数调优思路

【学而不思则罔,思维不学则怠】 本文总结一下常见的一些算法训练超参数调优思路(陆续总结更新),包括: batchsize学习率epochsdropout(待添加) Batch_size 2023.9.29 简单来说,较…

Kotlin程序设计(二)面向对象

Kotlin程序设计中级篇 我们在前面已经学习了Kotlin程序设计的基础篇,本章我们将继续介绍更多Kotlin特性,以及面向对象编程。 函数 其实函数我们在一开始就在使用了: fun main() {println("Hello World") }我们程序的入口点就是…

day3:基于UDP模型的简单文件下载

思维导图 tftp文件下载客户端实现 #include <head.h> #define SER_PORT 69 #define SER_IP "192.168.125.223" int link_file() {int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}return sfd; } int filedownloa…

【Spring Cloud Alibaba】Sentinel 服务熔断与流量控制

目录 前言 一、Sentinel 入门 1.1 什么是 Sentinel ? 1.2 微服务集成 Sentinel 1.3 安装Sentinel控制台 二、Jmeter 压力测试工具 2.1 Jmeter 介绍 2.2 Jmeter 安装 2.3 接口测试 三、Sentinel 使用 3.1 限流规则 3.1.1 warm up(预热模式) 3.1.2 排队等待 3.1.3…

mathtype2024版本下载与安装(mac版本也包含在内)

安装包补丁主要是mathtype的安装包&#xff0c;与它的补丁。 详细安装过程&#xff1a; step1&#xff1a; 使用方法是下载完成后先安装MathType-win-zh.exe文件&#xff0c;跟着步骤走直接安装就行。 step2&#xff1a; 关闭之后&#xff0c;以管理员身份运行MathType7PJ.exe…

【数据结构和算法】反转链表

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;迭代&#xff08;双指针&#xff09; 2.2 方法二&#xff1a;递归 三、代码 3.…

survey和surveyCV:如何用R语言进行复杂抽样设计、权重计算和10折交叉验证?

一、引言 在实际调查和研究中&#xff0c;我们往往面临着样本选择的复杂性。复杂抽样设计能够更好地反映真实情况&#xff0c;提高数据的代表性和可靠性。例如&#xff0c;多阶段抽样可以有效地解决大规模调查的问题&#xff0c;整群抽样能够在保证样本的随机性的同时减少资源消…

网络安全全栈培训笔记(53-WEB攻防-通用漏洞跨域CORS资源JSONP回调域名接管劫持)

第54天 WEB攻防-通用漏洞&跨域CORS资源&JSONP回调&域名接管劫持 知识点&#xff1a; 1、子域名接管检测&探针&利用 2、C0SP跨域资源检测&探针&利用 3、JSONP跨域回调-检侧&探针&利用 #前置知识点&#xff1a; 同源策路(SOP),“同源”包…

centos7配置时间同步网络时间

centos7配置时间同步网络时间 1、安装 NTP 工具。 sudo yum install -y ntp2启动 NTP 服务。 sudo systemctl start ntpd3、将 NTP 服务设置为开机自启动。 sudo systemctl enable ntpd4、验证 date

【特征工程】分类变量:MultiLabelBinarizer对多标签数据进行编码

MultiLabelBinarizer 说明介绍 1. MultiLabelBinarizer 是什么&#xff1f; MultiLabelBinarizer是scikit-learn库中的一个用于处理多标签数据的编码器。通常用于将多标签的分类任务中的标签转化为二进制形式&#xff0c;便于机器学习模型的处理。该编码器的主要目标是将每个…

【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

实验一、数论基础&#xff08;上&#xff09; 一、实验目的 1、通过本次实验&#xff0c;熟悉相关的编程环境&#xff0c;为后续的实验做好铺垫&#xff1b; 2、回顾数论学科中的重要基本算法&#xff0c;并加深对其的理解&#xff0c;为本学期密码学理论及实验课程打下良好…