5.3 用户定义的完整性

思维导图:

 

5.3 用户定义的完整性

用户定义的完整性是确保数据库中的数据满足特定应用的语义要求。这是通过关系数据库管理系统(RDBMS)中的内置机制来完成的,不需要依赖应用程序来执行。


5.3.1 属性上的约束条件

1. 定义属性上的约束条件

当在CREATE TABLE中定义属性时,可以为属性定义一系列的约束条件。主要有以下几种类型的约束:

  • 列值非空(NOT NULL): 确保列中的数据不为空。

  • 列值唯一(UNIQUE): 确保列中的数据是唯一的。

  • 使用CHECK短语检查列值是否满足特定条件。

    示例:

    •  
      CREATE TABLE SC
      (Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL,Grade SMALLINT NOT NULL,PRIMARY KEY (Sno, Cno)
      );
      
    •  
      CREATE TABLE DEPT
      (Deptno NUMERIC(2),Dname CHAR(9) UNIQUE NOT NULL,Location CHAR(10),PRIMARY KEY(Deptno)
      );
      

    •  
      CREATE TABLE Student
      (Sno CHAR(9) PRIMARY KEY,Sname CHAR(8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN ('男', '女')),Sage SMALLINT,Sdept CHAR(20)
      );
      
    •  
      CREATE TABLE SC
      (Sno CHAR(9),Cno CHAR(4),Grade SMALLINT CHECK (Grade >= 0 AND Grade <= 100),PRIMARY KEY (Sno, Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY (Cno) REFERENCES Course(Cno)
      );
      

2. 检查属性约束和处理违规情况

当尝试向表中插入新数据或修改现有数据时,RDBMS会检查这些数据是否满足约束条件。如果数据违反了任何约束,那么操作将不会被允许。


总结:用户定义的完整性确保了数据在特定应用中的正确性。通过使用数据库的内建约束机制,我们可以确保数据的完整性和准确性。

 

5.3.2 元组上的约束条件

与对单一属性上设置约束条件的方法类似,我们还可以在整个元组(即数据行)上设置约束条件。这种约束是为了确保在一个元组中的多个属性值之间有某种关系或满足某些特定的条件。


1. 定义元组上的约束条件

使用CREATE TABLE语句的CHECK短语,我们可以为表中的整个元组设置约束。这种约束允许我们在多个属性之间设置相互的约束条件。

示例:

  •  
    CREATE TABLE Student
    (Sno CHAR(9),Sname CHAR(8) NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY (Sno),CHECK (Ssex = '女' OR Sname NOT LIKE 'Ms.%') /* 这个CHECK约束确保了当性别是男时,名字不以'Ms.'开头 */
    );
    

对于这个示例,元组的约束条件的工作原理如下:对于女性学生,Ssex = '女' 为真,因此元组将被接受,不论其名字是什么。对于男性学生,如果他们的名字以“Ms.”开头,那么这个约束将为假,因此不会被接受。


2. 检查和处理元组约束的违规

与属性上的约束条件相同,当向表中插入新的元组或更改现有的元组时,RDBMS将检查这些元组是否满足定义的元组级约束。如果元组违反了约束条件,操作将被拒绝。


总结:元组上的约束条件为我们提供了一个强大的工具,以确保在表中的多个属性之间保持一致性和逻辑关系。通过正确使用这些约束,我们可以进一步增强数据库中数据的完整性和准确性。

 

 

用户定义的完整性总结:


重点:

  1. 定义与理解:用户定义的完整性是确保数据在特定应用中满足预期的语义要求。它可以在属性级别或元组级别定义。

  2. 实现方式:大多数关系数据库管理系统提供了内置机制来定义和验证这种完整性,使得数据在输入、更新或删除时满足特定的条件或关系。

  3. 属性上的约束:包括非空(NOT NULL)、唯一性(UNIQUE)和满足某条件(使用CHECK短语)。

  4. 元组上的约束:使用CHECK短语定义,主要用于确保元组内的多个属性之间存在某种关系。


难点:

  1. 复杂的逻辑关系:元组级的约束可能涉及多个属性间复杂的逻辑关系,需要深入理解业务逻辑来正确定义。

  2. 性能考虑:过多或过于复杂的完整性约束可能会影响数据库操作的性能,特别是在大型数据集上。

  3. 与其他完整性的交互:用户定义的完整性可能与实体完整性、参照完整性等其他类型的完整性有所交互或冲突,需要仔细规划和设计。


易错点:

  1. 不完全或不正确的约束定义:可能由于对业务规则的误解或遗漏,导致定义的约束不完全或不正确。

  2. 过于严格的约束:设置过于严格的约束可能会妨碍某些合理的数据库操作,导致不必要的操作拒绝。

  3. 约束的命名与管理:在大型数据库中,约束的命名和管理可能变得混乱,增加维护难度。

  4. 未考虑的异常情况:在某些未考虑到的特殊情况下,用户定义的约束可能会导致数据完整性问题。

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

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

相关文章

centos7安装oxidized备份软件

首先需要提前下载ruby&#xff0c;因为默认yum安装的版本太低 https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.gz 1、yum remove ruby ruby-devel&#xff08;有就卸载&#xff0c;没有则忽略&#xff09; 2、将下载好的ruby包解压到/opt下 [rootoxidized ruby-…

Python---字符串输入和输出---input()、格式化输出:%,f形式,format形式

字符串输入: 在Python代码中&#xff0c;我们可以使用input()方法来接收用户的输入信息。记住&#xff1a;在Python中&#xff0c;input()方法返回的结果是一个字符串类型的数据。 如果之后使用输入的数据&#xff0c;一定要记得利用数据类型转换。 相关链接&#xff1a;Pyt…

nodejs升级或降级

node有一个模块叫n&#xff0c;是专门用来管理node.js的版本。 升级或降级步骤 1 、安装n模块 npm install -g n 2、 升级node.js到最新稳定版 n stable Ps: n后面也可以跟随版本号&#xff08;用于升级或降级&#xff09;比如&#xff1a; n v16.12.0

蚂蚁SOFA Stack融合大模型发布升级版 将为机构产研效能提升30%

11月1日&#xff0c;在云栖大会上&#xff0c;蚂蚁集团正式发布CodeFuse全面加持的SOFAStack5.0升级版本&#xff0c;向企业提供全方位研发运维智能助手相关能力。这是继蚂蚁集团在外滩大会发布代码大模型CodeFuse之后&#xff0c;首次公布面向行业的商业化产品进展。 “大模型…

Controllable Guide-Space for Generalizable Face Forgery Detection

一、研究背景 以往工作专注于提取伪造特征的共同特性和真假域鉴别性信息&#xff0c;以提升特征泛化性。 但在训练过程中&#xff0c;这些方法只区分真假域&#xff0c;并将不同的伪造域看作一类而不加以区分。 这会导致伪造样本进一步以伪造不相关特征&#xff08;如&#xff…

ACID模型

ACID 是数据库管理系统&#xff08;DBMS&#xff09;中用来确保事务处理正确性和可靠性的四个特性的首字母缩写。ACID 是指原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08…

如何通过 NAT 模式连接VMware虚拟机以及存在和不存在ens33文件的解决方案

文章目录 前言1 VMware配置1.1 打开vmvare虚拟网络编辑器1.2 取消使用本地DHCP1.3 NAT设置 2 虚拟机的配置2.1 存在ens332.2.1 修改ifcfg-ens33文件2.2.1.1 为什么设置BOOTPROTOstatic&#xff1f;2.2.1.2 如何选择使用static还是dhcp&#xff1f; 2.2.2 关闭防火墙 2.2 不存在…

VScode clangd 插件浏览 linux 源码

文章目录 VScode clangd 插件浏览 linux 源码clangd 安装与配置VScode 插件安装clangd 安装方法一方法二 clangd 配置 cmake 生成bear 生成 compile_commands.json触发 clangd linux 内核脚本生成 compile_commands.json 文件三种方式对比 VScode clangd 插件浏览 linux 源码 …

抖音协议算法最新版

抖音的协议算法是指用于推荐内容和个性化用户体验的算法系统。这些算法根据用户的兴趣、行为和偏好来推荐适合他们的视频内容&#xff0c;以提供更好的用户体验。 抖音的协议算法使用了大量的数据和机器学习技术来实现个性化推荐。以下是一些可能应用于抖音协议算法的技术和方法…

使用Objective-C和ASIHTTPRequest库进行Douban电影分析

概述 Douban是一个提供图书、音乐、电影等文化内容的社交网站&#xff0c;它的电影频道包含了大量的电影信息和用户评价。本文将介绍如何使用Objective-C语言和ASIHTTPRequest库进行Douban电影分析&#xff0c;包括如何获取电影数据、如何解析JSON格式的数据、如何使用代理IP技…

机器学习-特征工程

一、特征工程介绍 1.1 什么是特征 数值特征&#xff08;连续特征&#xff09;、文本特征&#xff08;离散特征&#xff09; 1.2 特征的种类 1.3 特征工程 特征是机器学习可疑直接使用的&#xff0c;模型和特征之间是一个循环过程&#xff1b; 实际上特征工程就是将原始数据…

3 Tensorflow构建模型详解

上一篇&#xff1a;2 用TensorFlow构建一个简单的神经网络-CSDN博客 本篇目标是介绍如何构建一个简单的线性回归模型&#xff0c;要点如下&#xff1a; 了解神经网络原理构建模型的一般步骤模型重要参数介绍 1、神经网络概念 接上一篇&#xff0c;用tensorflow写了一个猜测西…

微信小程序:自定义组件传值——获取手机验证码

一&#xff1a;遇到的问题 通过自己自定义的组件编写的表单&#xff0c;发现传值不了&#xff0c;点击后收到的值为空。 二&#xff1a;创建组件 先在根目录创建components文件夹&#xff0c;创建img-verify文件夹&#xff08;这个是我取的组件名字&#xff09;&#xff0c;在…

什么是 DevOps

DevOps是一套融合软件开发&#xff08;Dev&#xff09;和 IT 运营&#xff08;Ops&#xff09;的实践&#xff0c;旨在缩短应用程序开发周期并确保以高软件质量持续交付&#xff0c;通过采用 DevOps 实践&#xff0c;您可以帮助组织更可靠、更快速、更高效地交付软件。 什么是…

一百九十八、Java——IDEA项目中有参构造、无参构造等快捷键(持续梳理中)

一、目的 由于IDEA项目中有很多快捷键&#xff0c;可以很好的提高开发效率&#xff0c;因此整理一下 二、快捷键 &#xff08;一&#xff09;快捷键生成public static void main(String[] args) {} 快捷键&#xff1a;psvm &#xff08;二&#xff09;快捷键在test中创建cn…

MacOS安装git

文章目录 通过Xcode Command Lines Tool安装(推荐)终端直接运行git命令根据流程安装先安装Command Lines Tool后再安装git 官网下载二进制文件进行安装官方国外源下载二进制文件(不推荐)国内镜像下载二进制文件(推荐)安装git 通过Xcode Command Lines Tool安装(推荐) 简单来讲C…

ubuntu(18.04)中架设HiGlass docker镜像服务,已尝试mcool、bedpe、wig格式文件

前言 使用到的软件 docker 文档 &#xff1a; https://www.docker.com/ HiGlass 文档&#xff1a;http://docs.higlass.io/higlass_docker.html#running-locally https://github.com/higlass/higlass-dockerhiglass-docker 地址&#xff1a;https://github.com/higla…

17.基干模型Swin-Transformer解读

文章目录 SWin-Transformer解读1.基础介绍关于Shifted Window based Self-Attention相对位置偏置网络整体结构和层级特征欢迎访问个人网络日志🌹🌹知行空间🌹🌹 SWin-Transformer解读 1.基础介绍 Swin-Transformer是2021年03月微软亚洲研究院提交的论文中提出的,比V…

Arduino开发

文章目录 Arduino IDE 的使用1. 使能编译以及烧录的LOG&#xff1a;2. 下载配置3. 下载 Arduino指令程序下载步骤通过下载器下载通过串口下载 关于Arduino IDE工程生成的二进制文件对比Tools-->burn bootloader 和 ArduinoISP例程 的区别自带例程 Arduino IDE 的使用 1. 使…

【发表案例】2区正刊,网络安全、智能系统领域,2个月3天录用,11天见刊,16天检索!

计算机类SCIE 【期刊简介】IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCIE 在检&#xff0c;正刊 【征稿领域】提高安全性和隐私性的边缘/云的智能方法的研究&#xff0c;如数字孪生等 【截稿日期】2023.11.30 录用案例&#xff1a;2个月…