5.1 实体完整性

news2024/11/28 1:41:22

思维导图:

前言

第5章 数据库完整性笔记

  • 定义

    • 完整性:确保数据的正确性和相容性。
      • 正确性:数据与现实世界语义相符、反映实际状况。
      • 相容性:同一对象在数据库的不同关系表中数据逻辑上是一致的。
  • 示例

    • 学号唯一性。
    • 性别限定为男或女。
    • 本科学生年龄为14-50之间的整数。
    • 学生所选课程需为学校提供的。
    • 学生所在院系需为学校已建立的。
  • 完整性 vs 安全性

    • 完整性:防止非语义、不正确的数据进入数据库。
    • 安全性:防止非法访问和恶意破坏。
  • 维护完整性的关键功能

    1. 定义完整性约束条件
      • 完整性规则是数据必须满足的语义约束条件。
      • 概括了数据模型中的数据和联系的制约和依存规则。
      • SQL使用实体完整性、参照完整性和用户定义完整性等概念来描述完整性。
    2. 完整性检查
      • 确保数据满足完整性约束。
      • 通常在INSERT、UPDATE、DELETE后进行或在事务提交时进行。
    3. 违约处理
      • 如果操作违反完整性规则,DBMS会采取行动如拒绝或级联执行其他操作。
  • 发展

    • 早期DBMS不支持完整性检查,认为费时。
    • 现代商用关系DBMS都支持完整性控制,减轻了应用程序员的负担。
    • DBMS核心功能支持完整性控制,为所有用户和应用提供一致的完整性。
    • 应用程序实现完整性控制可能有漏洞,可能被其他应用破坏。
  • 之前的内容

    • 第2章2.3节已讲解了关系数据库的三类完整性约束的基本概念。
    • 后续会介绍SQL语言实现完整性控制功能的方法。

 

5.1.1 实体完整性

5.1 实体完整性笔记

  • 定义

    • 实体完整性:在关系模型中使用CREATE TABLE的PRIMARY KEY来定义。
    • 主要为两类:
      1. 单属性主码:可以在列级或表级定义。
      2. 多属性主码:只能在表级定义。
  • 示例

    1. 单属性主码

      • 例5.1:Student表中的Sno属性作为主码。
        CREATE TABLE Student
        (
          Sno CHAR(9) PRIMARY KEY,     /* 列级定义主码 */
          Sname CHAR(20) NOT NULL,
          Ssex CHAR(2),
          Sage SMALLINT,
          Sdept CHAR(20)
        );
        
        CREATE TABLE Student
        (
          Sno CHAR(9),
          Sname CHAR(20) NOT NULL,
          Ssex CHAR(2),
          Sage SMALLINT,
          Sdept CHAR(20),
          PRIMARY KEY (Sno)           /* 表级定义主码 */
        );
        

    2. 多属性主码

      • 例5.2:SC表中的Sno、Cno属性组作为主码。
        CREATE TABLE SC
        (
          Sno CHAR(9) NOT NULL,
          Cno CHAR(4) NOT NULL,
          Grade SMALLINT,
          PRIMARY KEY(Sno, Cno)       /* 只能在表级定义主码 */
        );
        

我的理解:

实体完整性是数据库完整性约束的一个核心概念,特别是在关系数据库模型中。为了深入理解这一概念,让我们从以下几个方面来探讨它:

  1. 基本定义

    • 实体完整性确保每一个实体(在关系数据库中,通常指的是表中的一行或记录)具有唯一的标识。这意味着对于给定的表,该表的每一行都可以通过一个唯一的值或值组合来区分。
  2. 主键的作用

    • 在关系数据库中,实体完整性通常通过主键来实现。一个表只能有一个主键,而这个主键可以是单一的列,也可以是多列的组合。
    • 主键的值不能是NULL,因为NULL表示“未知”或“不适用”,而实体的唯一标识不能是未知的。
    • 在一个表中,主键的值必须是唯一的,即不能有两个或两个以上的行/记录具有相同的主键值。
  3. 为什么需要实体完整性?:

    • 数据的唯一性:实体完整性确保了数据的唯一性,避免了数据的重复,从而提高了数据的准确性和可靠性。
    • 数据检索:通过确保每个记录都有一个唯一的标识,可以快速、准确地检索到所需的数据。
    • 数据关系:在关系数据库中,表与表之间的关联(如外键关系)依赖于实体的唯一标识,实体完整性保证了这种关系的稳定性和可靠性。
  4. 实际应用

    • 想象一个学生信息系统,每个学生都有一个唯一的学号。这个学号就是保证每个学生数据唯一性的主键。没有两个学生可以有相同的学号,且学号不能为空。这就是实体完整性在实际应用中的体现。

总之,实体完整性是确保数据的一致性、准确性和可靠性的关键概念,它通过确保每个实体都有一个唯一的标识来实现。在关系数据库设计和管理中,对实体完整性的理解和实施是至关重要的。

 5.1.2 实体完整性检查和违约处理

核心概念

当使用PRIMARY KEY定义了关系的主码,每次数据插入或更新操作时,数据库管理系统会自动检查实体完整性规则。这包括:

  1. 唯一性检查:系统会验证主码值是否唯一。如果不唯一,操作会被拒绝。
  2. 非空检查:系统会检查主码的所有属性是否有空值。任何空值都会导致操作被拒绝。

方法

  1. 全表扫描

    • 检查主码值唯一性的直观方法是扫描整张表,对比每一条记录的主码值。这样确保没有重复值。
    • 这种方法在数据量大时是低效的。

    示意图:图5.1全表扫描方法检查主码唯一性

  2. 索引方法

    • 为了提高检查的效率,数据库管理系统通常在主码上自动创建索引。
    • B+树索引是常见的索引方法,允许快速查找特定的主码值。
    • 通过索引查找,可以迅速确定是否有重复的主码值,避免了全表扫描的耗时。

    示意图:图5.2使用B+树索引检查主码唯一性

总结: 实体完整性是数据库完整性的核心,而高效的检查和处理违约是实现这一完整性的关键。利用索引结构(如B+树)可以有效地加速这一过程,确保数据的准确性和完整性,同时提高操作的效率。


疑问:

什么是B+树?

B+树是一种自平衡的树结构,用于在数据库和文件系统中存储数据。它是B树的一种变种,具有特定的优点,特别是在磁盘存储和数据查找中。

下面是B+树的主要特点和相关解释:

  1. 多路平衡搜索树:B+树是一个多路的树结构,每个节点可以有多个孩子。这有助于减少树的高度,因此,使磁盘I/O次数减少(因为树的深度较小)。

  2. 所有关键字都出现在叶子节点:与B树不同,B+树的非叶子节点不存储键值记录,只存储键以及键的孩子节点。所有的叶子节点构成一个有序链表,其中包含所有的键和相关的记录或指向记录的指针。

  3. 增加和删除是平衡的:当插入或删除关键字时,B+树会自动进行分裂或合并操作,确保每个节点的关键字数量在预定义的范围内,保持树的平衡。

  4. 高效的范围查询:由于所有的叶子节点构成一个有序链表,B+树非常适合范围查询,只需找到起始关键字,然后遍历链表即可。

  5. 节点含有固定数目的子节点:B+树的节点有一个最大和最小的孩子数目限制。这些限制保证了树的平衡,并且使每次磁盘I/O读取的数据量最大化。

在数据库中,B+树主要用于索引结构,因为它支持快速的插入、删除和查找操作,并且在磁盘I/O操作中非常高效。

 

 

5.1 实体完整性重点、难点和易错点总结:

重点:

  1. 实体完整性的定义:确保数据表中每一行都能被唯一地标识,通常通过主键来实现。
  2. 主键的作用:主键不仅标识数据表中的唯一记录,还确保数据的完整性和可靠性。
  3. 主键的选择:选择合适的主键至关重要,因为它会影响数据库性能和操作的便捷性。
  4. 实体完整性的维护:通过数据库管理系统提供的各种工具和机制来维护,例如通过使用 PRIMARY KEY 约束。

难点:

  1. 多属性的主键:在某些情况下,需要使用多个属性组合作为主键(复合主键),这可能导致复杂性增加。
  2. 实体完整性的违规处理:当发生违反实体完整性的操作时,数据库管理系统应如何响应(例如,是否拒绝操作、发送警告或自动纠正)。

易错点:

  1. 误认为所有表都需要主键:虽然主键对于确保实体完整性非常有用,但并非所有表都需要主键。某些情况下,特别是在关系数据库中的连接表,可能不需要主键。
  2. 选择不适当的主键:选择不恰当的主键可能导致效率问题或不必要的复杂性。
  3. 允许主键有空值:主键的定义是它不能有空值。允许主键有空值会违反实体完整性。
  4. 修改主键值:尽管技术上允许这样做,但修改主键值可能会导致数据完整性问题或与其他表的关系断裂。

了解这些重点、难点和易错点有助于更好地理解和应用实体完整性的概念,从而建立和维护更加健壮和可靠的数据库系统。

 

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

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

相关文章

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

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

LCD驱动程序——Framebuffer应用编程

1.LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意思,buffer 是缓冲的意思,这意味着 Framebuffer 就是一块内存,里面保存着一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值,假设 L…

怎样利用 AI 大模型,辅助研发管理与效能提升?

AI 大模型已经逐渐渗透到各行各业的应用场景中,在软件研发领域也不例外。在软件研发领域,从需求分析到软件设计,从软件开发到测试,以及最后发布上线,AI 在各个环节都发挥着重要作用。10 月 21 日,思码逸首席…

react条件渲染

目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中,条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…

图解刘润2023年度演讲--进化的力量思维导图精华

大家好,我是老原。 周末,商业顾问刘润发表了年度演讲:《进化的力量:寒武纪大爆发》。 这两天出差期间,陆陆续续看完了这个长达4小时的演讲,梳理了2023年到底发生了些什么,现在的环境如何…… …

技术阅读周刊第三期

技术阅读周刊,每周更新。 历史更新 20231013:第一期20231022:第二期 Understanding The Linux TTY Subsystem URL: https://ishuah.com/2021/02/04/understanding-the-linux-tty-subsystem/本文讲解了 Linux TTY 的历史故事和来源。 TTY 是 t…

HNU-算法设计与分析-讨论课1

第一次小班讨论 (以组为单位,每组一题,每组人人参与、合理分工,ppt中标记分工,尽量都有代码演示) 1.算法分析题 2-10、2-15(要求:有ppt(可代码演示)) 2.算法实现题 2-4、…

蓝桥杯(C++ 扫雷)

题目&#xff1a; 思想&#xff1a; 1、遍历每个点是否有地雷&#xff0c;有地雷则直接返回为9&#xff0c;无地雷则遍历该点的周围八个点&#xff0c;计数一共有多少个地雷&#xff0c;则返回该数。 代码&#xff1a; #include<iostream> using namespace std; int g[…

【Java 进阶篇】Java中的响应输出字节数据

在Java Web应用程序开发中&#xff0c;处理响应是一个常见的任务。有时&#xff0c;您可能需要向客户端发送字节数据&#xff0c;而不仅仅是文本或HTML内容。这可以用于传输各种内容&#xff0c;如图像、文件、视频等。本文将详细介绍如何在Java中使用Response对象输出字节数据…

sql语句性能进阶必须了解的知识点——索引失效分析

在前面的文章中讲解了sql语句的优化策略 sql语句性能进阶必须了解的知识点——sql语句的优化方案-CSDN博客 sql语句的优化重点还有一处&#xff0c;那就是—— 索引&#xff01;好多sql语句慢的本质原因就是设置的索引失效或者根本没有建立索引&#xff01;今天我们就来总结一…

160. 相交链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天分享一些包括但不限于计算机基础、算法等相关的知识点&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&#x1f4d6;是你想要的&#x1f497; ⛽️今…

从零开始制作一个桶装水小程序

随着互联网的发展&#xff0c;越来越多的消费者通过线上购买桶装水。为了满足这一需求&#xff0c;我们需要制作一个专门的小程序商城&#xff0c;以便用户可以方便地购买桶装水。本文将通过乔拓云平台&#xff0c;从零开始制作一个桶装水小程序&#xff0c;并详细解析制作步骤…

二、类与对象(一)

1 面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。以洗衣服为例&#xff0c;通常洗衣服会经历以下过程&#xff1a; 而C是基于面向对象的&#xff0c;关注的是对象&#xff0c…

云安全—K8s APi Server 6443 攻击面

0x00 前言 在未授权的一文中&#xff0c;详细描述了k8s api中的8080端口未授权的问题&#xff0c;那么本篇主要来说6443端口的利用。 0x01 API连接攻击面 1.匿名用户访问 匿名开放方式&#xff1a;kubectl create clusterrolebinding cluster-system-anonymous --clusterro…

信号、进程、线程、I/O介绍

文章目录 信号进程进程通信线程可/不可重入函数线程同步互斥锁条件变量自旋锁读写锁 I/O操作阻塞/非阻塞I/OI/O多路复用存储映射I/O 信号 信号是事件发生时对进程的通知机制&#xff0c;可以看做软件中断。信号与硬件中断的相似之处在于其能够打断程序当前执行的正常流程。大多…

paas配置及构建问题处理

目录 CI配置在前端中的作用 为什么生产环境需要付出额外的精力&#xff0c;进行构建&#xff1f; 服务 CI 通常分为两个主要部分&#xff1a; 构建环境&#xff1a; Dockerfile 镜像&#xff1a; CI配置在前端中的作用 开发分为三个环境&#xff1a;开发环境、测试环境和生…

QMI8658A_QMC5883L(9轴)-EVB 评估板——索引博文

0.前言 【初见姿态传感器】 在做一个4轴飞行器的时候了解到有这样一个可以控制飞行器姿态的传感器&#xff0c;而后在哔哩哔哩看到利用姿态传感做很多很好玩的作品。目前在自己的本职工作中广泛会用姿态传感器IMU的应用。 1.博文索引 【基础内容】 【QMI8658 - 姿态传感器学习…

一次性剪辑大量视频的教程,逻辑讲解,很实用

在短视频领域&#xff0c;视频剪辑的效率如何提升也成为了广大短视频创作者需要解决的问题之一。批量剪辑这个词汇也不断被提起。那么该如何自学批量视频剪辑呢&#xff1f; 想要进行批量视频剪辑&#xff0c;那就先需要一款好用的软件&#xff0c;小编这里给大家良心推荐超级…

“优等生”宁波银行公布三季报:营利齐升,风控抵补能力持续夯实

撰稿 | 多客 来源 | 贝多财经 10月30日晚&#xff0c;城商行“优等生”宁波银行披露2023年三季报&#xff0c;在效益与规模稳步提升的同时&#xff0c;资产质量也保持了优异水平。 前三季度&#xff0c;宁波银行实现归属于母公司股东的净利润193.49亿元&#xff0c;同比增长1…

【生物信息学】单细胞RNA测序数据分析:计算亲和力矩阵(基于距离、皮尔逊相关系数)及绘制热图(Heatmap)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 读取数据集2. 质量控制&#xff08;可选&#xff09;3. 基于距离的亲和力矩阵4. 绘制基因表达的Heatmap5. 基于皮尔逊相关系数的亲和力矩阵6. 代码整合 一、实验介绍 计算亲和力…