【数据库技术】关系完整性约束(实体/参照/用户定义)

考点频率 :★★★★★(数据库基础必考,选择题常考三种约束的定义与区分)

难度 :⭐⭐

建议:重点掌握三种完整性约束的名称、各自保证什么、以及它们的实现机制(主键/外键/Check等)

1️⃣ 什么是关系完整性约束?

关系完整性约束是数据模型三要素 之一(数据结构、数据操作、完整性约束)。它的作用是保证数据库中数据的正确性和一致性

打个比方:你办一张银行卡,银行系统不会允许你设置"000000"这样的密码(用户定义完整性),不会让两个客户共用同一个身份证号(实体完整性),也不会让你转账时转到一个不存在的账户(参照完整性)。这些限制就是完整性约束。

三类完整性约束

约束类型 保证什么 由谁定义 由谁保证
实体完整性 每个元组是可区分的(主键唯一且非空) 用户定义主键时声明 DBMS自动保证
参照完整性 表与表之间的关系是有效的(外键参照正确) 用户定义外键时声明 DBMS自动保证
用户定义完整性 业务规则的合理性(如年龄范围) 用户定义约束条件 DBMS自动保证

2️⃣ 实体完整性(Entity Integrity)

2.1 定义

实体完整性 保证关系中的每个元组是唯一的、可区分的

2.2 核心规则

规则 说明
主键值不能为空(NOT NULL) 任何元组的主键属性都不能取NULL值
主键值必须唯一(UNIQUE) 任何两个元组的主键值不能相同

2.3 为什么实体完整性是"最基本"的约束?

因为关系模型要求"元组是可区分的"。如果没有实体完整性,表中可能会出现两个完全相同的行,我们无法唯一地标识和操作某一行数据。

2.4 实现方式

  • 通过主键(Primary Key) 约束来实现
  • 主键可以是单个属性,也可以是多个属性的组合(联合主键)

联合主键 :如果一个属性不足以唯一标识元组,可以组合多个属性作为主键。比如选课表中,(学号, 课程号) 联合起来才能唯一标识一条选课记录。

2.5 软考易错点

  • 主键不能为NULL(这是实体完整性的核心规则)
  • 主键不能重复
  • 候选键(即可能成为主键的属性)也要求不能为NULL

⚠️ 常见误区:有些同学认为主键只是"不能重复",忘了"不能为空"也是实体完整性的要求。

3️⃣ 参照完整性(Referential Integrity)

3.1 定义

参照完整性 保证表与表之间的关系是有效的 。它要求:关系中外键(Foreign Key) 的值要么为NULL,要么等于被参照关系中某个元组的主键值。

3.2 核心规则

规则 说明
外键值存在性 外键的值(非NULL时)必须出现在被参照关系的主键中
外键可为NULL 外键允许取NULL值(表示暂无关联)
不允许"悬空引用" 不能引用一个不存在的元组

3.3 为什么需要参照完整性?

数据表之间往往存在引用关系。比如"选课表"引用了"学生表"中的学号------如果某个选课记录引用了一个根本不存在的学号,这个数据就是无效的。参照完整性就是为了防止这种情况。

3.4 实现方式

  • 通过外键(Foreign Key) 约束来实现
  • 外键声明时,需要指定被参照的表和属性

示例

sql 复制代码
-- 选课表中的学号引用了学生表中的学号
FOREIGN KEY (学号) REFERENCES 学生表(学号)

3.5 外键约束的级联操作

当被参照表中的主键值被修改或删除时,DBMS可以采取不同的处理方式(软考常考):

级联操作 含义
CASCADE(级联) 修改/删除主键时,自动修改/删除所有引用的外键
NO ACTION(无操作) 如果有外键引用,拒绝修改/删除主键
SET NULL(设为空) 修改/删除主键时,将外键设为NULL
SET DEFAULT(设默认值) 修改/删除主键时,将外键设为默认值

3.6 软考易错点

  • 外键可以取NULL(这是与主键最大的区别,选择题常考)
  • 外键必须 引用另一个表的主键(或候选键)
  • 外键的取值必须在被参照表的主键中存在(不能悬空)

4️⃣ 用户定义完整性(User-defined Integrity)

4.1 定义

用户定义完整性 是用户根据业务规则 自行定义的约束条件。它保证了数据的语义合理性

4.2 核心规则

用户定义完整性包含各种针对具体数据的约束:

  • 取值范围约束(CHECK)
  • 数据类型约束(INT、VARCHAR等)
  • 唯一性约束(UNIQUE)
  • 非空约束(NOT NULL)
  • 默认值约束(DEFAULT)

4.3 实现方式

通过CREATE TABLE或ALTER TABLE语句中的约束子句实现:

示例

sql 复制代码
CREATE TABLE 学生表 (
    学号 CHAR(8) PRIMARY KEY,
    姓名 VARCHAR(20) NOT NULL,
    性别 CHAR(1) CHECK (性别 IN ('男', '女')),
    年龄 INT CHECK (年龄 >= 0 AND 年龄 <= 120),
    班级 VARCHAR(20)
);

4.4 软考易错点

  • 用户定义完整性是DBMS自动保证
  • NOT NULL和UNIQUE都是用户定义完整性,不是实体完整性

5️⃣ 三种完整性约束对比表(重点)

对比项 实体完整性 参照完整性 用户定义完整性
核心问题 元组是否唯一? 关系是否有效? 数据是否合理?
关键概念 主键(Primary Key) 外键(Foreign Key) CHECK、NOT NULL、UNIQUE、DEFAULT
能否为NULL 主键不能为NULL 外键可以NULL 取决于约束定义
约束的是 单个关系的内部 两个关系之间 单个关系内部
保证的是 元组可区分 引用有效 业务规则合理

6️⃣ 经典例题

例题1:在关系数据库中,参照完整性约束通过( )实现。

A. 主键

B. 外键

C. 检查约束

D. 唯一约束

解析 :参照完整性通过外键 实现。主键对应的是实体完整性;检查约束和唯一约束属于用户定义完整性。选 B


例题2:下列关于关系完整性约束的叙述中,错误的是( )。

A. 实体完整性要求主键不能取NULL值

B. 参照完整性要求外键必须取被参照表主键中存在的值

C. 外键可以取NULL值

D. 用户定义完整性由用户自己定义,DBMS不负责维护

解析 :D错误------用户定义完整性在创建表时定义后,DBMS会自动维护和检查 。A、B、C均正确。选 D


例题3(判断):外键可以为NULL,也可以重复。( )

解析:正确。外键的取值可以重复(多个元组可以引用同一个外键值),也可以为NULL(表示暂无关联)。这与主键的"唯一+非空"完全不同。

7️⃣ 记忆口诀

实体完整看主键,非空唯一是核心。

参照完整看外键,要么有值要么空。

用户定义业务规,范围检查数据对。

8️⃣ 小测验(评论区对答案)

下列关于关系完整性约束的说法中,正确的是( )。

A. 实体完整性要求主键可以取NULL值

B. 参照完整性要求外键必须唯一

C. 用户定义完整性在定义后由DBMS自动维护

D. 外键必须引用另一个表的主键,且不能为NULL

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #实体完整性 #参照完整性 #用户定义完整性 #数据库技术基础 #软考备考

相关推荐
小谈不敲代码25 分钟前
【12-kubenetes的持久化存储】
运维·kubernetes
梦想的旅途21 小时前
企业微信API如何实现自动化办公
运维·自动化·企业微信
派小汤1 小时前
Harmony2.2.0通过RdbStore实现通用类操作本地SQLite数据库
数据库·sql·sqlite·鸿蒙·鸿蒙系统
刚入门的大一新生1 小时前
Linux-命令行参数和环境变量
linux·运维·服务器
FreeTinker1 小时前
Java文件服务器的技术选型与实现路径:从嵌入式工具到企业级系统
java·服务器·开发语言
sunshine22 girl1 小时前
Angular7,9,学习笔记四 父子组件传值,组件之间传值
笔记·学习
我星期八休息1 小时前
Linux I/O多路转接—epoll
java·linux·运维·服务器·开发语言·jvm·算法
程序员-Benothing2 小时前
MySQL 中的事务隔离级别有哪些?默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
大模型码小白2 小时前
AI 提示词专栏:使用系统指令(System Prompt)实现全局约束
java·大数据·运维·开发语言·人工智能·python·prompt