【数据库原理】(7)关系数据库的完整性约束

关系模型的完整性规则是为了确保数据的唯一性和数据之间的关系的准确性。

有三类完整性约束:实体完整性、参照完整性和用户定义完整性。

其中实体完整性和参照完整性是必须满足的完整性约束条件,应该由关系系统自动支持。

实体完整性

实体完整性的核心概念

  • 唯一性:数据库中的每个元组(行)必须是唯一的,这意味着没有两个完全相同的元组。
  • 主码(主键):为了维护实体的唯一性,每个关系(表)都应该有一个主码,用来唯一标识每个元组。主码是一个或一组不能取空值的属性(字段),它们的组合必须在表中唯一。

实体完整性规则

  • 规则:如果属性(或属性组)A是基本关系R的主码,那么A不能取空值。
  • 含义:主码的每个属性都必须有值,这个值在表中是唯一的,不能重复。

实体完整性的实现

  • 数据库系统的角色:现代的关系数据库管理系统(DBMS)通常会自动执行完整性检查,确保数据符合实体完整性的要求。
  • 用户定义的主码:用户可以定义一个或多个候选码作为主码,DBMS将防止插入具有相同主码的元组。

示例

在这里插入图片描述

以“读者”关系为例,假设图书证编号是主码:

  • 主码唯一性:图书证编号是唯一的,每个读者都有一个不同的图书证编号。
  • 空值问题:主码(图书证编号)不可以为空。任何记录的图书证编号都必须有具体值。

如果图书证编号被设定为主码,那么每个读者的图书证编号都应该是唯一的且不为空。如果有任何图书证编号为空或重复,那么这个表就违反了实体完整性规则。

参照完整性

参照完整性(Referential Integrity)是关系数据库中的一个重要概念,它确保了数据库中不同表之间的逻辑关系的一致性和完整性。以下是对参照完整性的详细解释:

参照完整性的基本概念

  • 定义:参照完整性涉及两个或多个关系(表),确保一个关系中的某个属性(或属性组)的值引用另一个关系的主码。
  • 外码(Foreign Key):在参照关系(从表)中,引用目标关系(主表)主码的属性称为外码。
  • 目标关系与参照关系
    • 目标关系(被参照关系):其主码被另一个关系的外码引用的关系。
    • 参照关系(依赖表):包含引用另一个关系主码的外码的关系。

参照完整性的规则

  • 规则:如果属性(或属性组)F是基本关系R的外码,并且与基本关系S的主码K相对应,则R中的每个元组在F上的值必须满足以下条件之一:
    1. 取空值:即F的每个属性值均为空。
    2. 等于S中某个元组的主码值:即F的值必须是S中存在的主码值。

参照完整性的作用

  • 确保数据一致性:防止数据中出现“悬挂引用”,即参照关系中引用了不存在于目标关系中的主码值。
  • 维护关联数据的完整性:确保数据之间的关系逻辑上是正确的。
  • 操作限制
    1. 插入限制:禁止插入参照关系中存在于目标关系中不存在的外码值。
    2. 更新限制:防止更新目标关系中被引用的主码值,导致参照关系中的外码值成为悬挂引用。
    3. 删除限制:禁止删除目标关系中被参照关系引用的元组。

实例解析

  • 学生与院系关系:学生关系中的“院系编号”是外码,引用院系关系的主码“院系编号”。这保证了每个学生必须属于一个存在的院系。
  • 选课关系:选课关系中的“学号”和“课程号”分别引用学生关系和课程关系的主码,确保每个选课记录都对应一个实际的学生和一个实际的课程。

用户定义完整性

用户定义完整性是关系数据库中的一个重要概念,它允许用户根据具体应用场景的需要设置特定的数据约束。这种灵活性确保了数据库不仅能满足通用的数据完整性规则,还能适应特定的业务规则和逻辑。以下是对用户定义完整性的进一步解释:

用户定义完整性的定义

  • 概念:针对特定应用的关系数据库的特定需求设定的数据约束。
  • 目的:确保数据符合特定应用的逻辑和业务规则。

用户定义完整性的例子

  • 年龄范围:例如,学生的年龄必须在15至75岁之间。
  • 成绩限制:选修课的成绩必须在0到100分之间。
  • 工资增长:更新职工表时,工资和工龄只能增加不能减少。

常见的用户定义完整性约束

  1. 属性空值约束:定义某些属性是否可以为空值。
  2. 属性唯一性约束:确保某些属性(例如,用户ID或电子邮件地址)在数据库中是唯一的。
  3. 属性的取值范围约束:限制属性的取值必须在特定的范围内,例如,工资或年龄。
  4. 属性的默认值设置:为属性定义默认值,用于在未指定值的情况下自动填充。
  5. 属性间的函数依赖关系:定义属性间的逻辑关系,例如,销售额可能取决于销售数量和单价的乘积。

数据库系统的角色

  • 自动化验证:关系数据库系统应能自动验证这些用户定义的完整性约束,而不是依赖于应用程序来实施。
  • 统一处理:提供定义和验证这些约束的机制,以便以一种统一和系统的方式处理它们。

用户定义完整性强化了数据库的能力,使其能够更好地服务于特定的业务逻辑和规则。通过在数据库层面实施这些约束,可以提高数据的质量和可靠性,同时减轻应用程序的负担。

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

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

相关文章

陪诊系统|北京陪诊小程序提升陪诊服务效果

随着科技的不断发展,人们对于医疗服务的需求也越来越高。在过去,陪诊师和陪诊公司通常需要通过电话或传真等传统方式与医院进行沟通和安排。然而,现在有了陪诊小程序,这些问题得到了解决。本文将介绍陪诊小程序的开发流程和功能&a…

【python高级用法】线程

前言 Python通过标准库的 threading 模块来管理线程。这个模块提供了很多不错的特性,让线程变得无比简单。实际上,线程模块提供了几种同时运行的机制,实现起来非常简单。 线程模块 线程对象Lock对象RLock对象信号对象条件对象事件对象 简单…

Java学习——设计模式——介绍

文章目录 设计模式介绍UML的类图表示类与类之间关系的表示关联关系聚合关系组合关系依赖关系继承关系实现关系 设计模式介绍 设计模式design patterns,指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提…

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想) 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

pth.tar的保存和读取

一、简介 在PyTorch中,.pt、.pth和.pth.tar都是保存训练好的模型的文件格式。主要区别在于: .pt是PyTorch1.6及以上版本中引入的保存格式,可以保存整个模型,包括模型结构、模型参数以及优化器状态等信息,是一个二进制文…

【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]

阅读导航 引言一、function包装器1. 概念2. 基本使用3. 逆波兰表达式求值(1)普通写法(2)使用包装器以后的写法 二、bind() 函数温馨提示 引言 很高兴再次与大家分享关于 C11 的一些知识。在上一篇文章中,我们讲解了 c…

【Linux系统编程二十六】:线程控制与线程特性(Linux中线程库/线程创建/线程退出/线程等待)

【Linux系统编程二十六】:线程控制与线程特性 一.Linux线程库pthread1.线程控制块2.线程tid3.线程栈 二.线程控制1.线程创建2.线程退出3.线程等待 三.线程的特性1.独立栈2.局部存储3.线程可分离 一.Linux线程库pthread 在Linux中,是没有明确的线程概念的…

19个地信专业可以投的岗位汇总【GIS求职秘籍】

今天给大家详细科普一下,GIS专业的同学毕业以后还能从事哪些岗位的工作。 (这期不包含学校老师等事业编岗位) 一、GIS数据采集和处理 GIS数据采集和处理在这里分为一个大类,包含前期测绘外业的实地采集,后续的数据加…

石化行业设备管理系统的作用

石化行业是全球经济中不可或缺的重要组成部分,它涵盖了石油、天然气、化工等领域。在这个高风险和高安全要求的行业中,设备的可靠性和安全性至关重要。为了有效管理和维护设备,石化公司越来越多地采用设备管理系统,以提高生产效率…

MongoDB—SQL到MongoDB映射图表

一、术语和概念 下表显示了各种 SQL 术语和概念 以及相应的 MongoDB 术语和概念。 SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field index index table joins $lookup, embedded docu…

CSS 伪类函数 :is() 和 :where()

在编写 CSS 时,有时可能会使用很长的选择器列表来定位具有相同样式规则的多个元素。例如,如果您想对标题中的 b 标签进行颜色调整,我们应该都写过这样的代码: h1 > b, h2 > b, h3 > b, h4 > b, h5 > b, h6 > b…

不想root,但想远程控制vivo手机?这个方法不用root也能做到

远程控制vivo手机不用root!今天给大家讲讲免Root情况下,笔记本电脑如何远程控制vivo手机。 在电脑和手机都安装AirDroid,这是免Root的关键。 下载AirDroid个人版 | 远程控制安卓手机软件下载下载AirDroid个人版进行文件传输和管理、远程控制安…

八、HTML 链接

一、HTML 链接 HTML 使用超级链接与网络上的另一个文档相连。 HTML中的链接是一种用于在不同网页之间导航的元素。 链接通常用于将一个网页与另一个网页或资源(如文档、图像、音频文件等)相关联。 链接允许用户在浏览网页时单击文本或图像来跳转到其…

Python进程、线程、协程:多任务并发编程指南

概要 在当今计算机时代,为了提高程序的性能和响应速度,多任务并发编程成为了一种必不可少的技术手段。而Python作为一门高级编程语言,提供了多种多任务并发编程的方式,包括进程、线程和协程。本文将详细介绍这三种方式的使用教程…

Unity 打包AB 场景烘培信息丢失

场景打包成 AB 资源的时候,Unity 不会打包一些自带相关的资源 解决办法:在 Project settings > Graphics下设置(Automatic 修改成 Custom)

基于web的电影院购票系统

**🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅**一 、设计说明 1.1选题动因 …

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考:警告!!!Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…

振弦采集仪在地基沉降监测中的应用研究

振弦采集仪在地基沉降监测中的应用研究 振弦采集仪是一种专门用于测量地基沉降的仪器,它采用振弦原理来测量地基的沉降情况。振弦采集仪通过在地基上安装一根细长的弹性振弦,并测量振弦的变形来获得地基沉降的数据。在地基沉降监测中,振弦采…

TypeScript Array(数组)

目录 1、数组初始化 2、Array 对象 3、数组迭代 4、数组在函数中的使用 4.1、作为参数传递给函数 4.2、作为函数的返回值 5、数组方法 数组对象是使用单独的变量名来存储一系列的值。数组非常常用。假如你有一组数据(例如:网站名字)…

从“五力”看百亿西凤的必然性

执笔 | 文 清 编辑 | 萧 萧 2023年末,西凤成功突破市场阻碍、跑赢行业周期,正式跻身中国百亿白酒品牌阵容。这是一份全行业及全体西凤人“预期之内”的成绩单。 当下,中国白酒已经进入“存量竞争”时代,马太效应使得强者恒强…