Module 02 · Using Relational Databases
Relational Model Constraints - Advanced高级关系模型约束
欢迎学习关系模型约束。在业务环境中,数据关系模型必须遵守特定的限制或规则。通过本指南,您将能够列举并详细描述关系数据库模型中定义的各种完整性约束。
概述:为什么要使用约束?
在关系数据模型中,数据完整性 (Data Integrity) 是通过一套完整性规则或约束来实现的。这些规则确保了数据库中数据的准确性、一致性和有效性。
关系数据库模型定义了以下 6 种主要约束:
- 实体完整性约束 (Entity Integrity Constraint)
- 参照完整性约束 (Referential Integrity Constraint)
- 语义完整性约束 (Semantic Integrity Constraint)
- 域约束 (Domain Constraint)
- 空值约束 (Null Constraint)
- 检查约束 (Check Constraint)
约束类型详述
1. 实体完整性约束 (Entity Integrity Constraint)
为了识别关系中的每一个元组(Tuple),关系必须拥有一个主键 (Primary Key)。
- 定义:主键是用于唯一标识表中每一行或每一个元组的唯一值。
- 别名:也常被称为“主键约束”或“唯一约束”。
- 规则:
- 禁止重复:防止表中出现重复行。
- 非空原则:作为主键一部分的任何属性都不能包含 NULL 值。
- 核心逻辑:
NULL代表未知。如果主键为NULL,则无法唯一标识该元组。- 案例:在
Author(作者)表中,Author ID是主键。若Author ID为A1指向 Raul Chong;如果允许两个元组的Author ID都为NULL,系统将无法区分这两个不同的元组。
- 案例:在
- 实现工具:通常使用索引 (Indexes) 来实现此约束。
2. 参照完整性约束 (Referential Integrity Constraint)
此约束用于定义并维护表与表之间的关系。
- 定义:它确保表之间关系的有效性。
- 实现方式:通过主键 (Primary Key) 与 外键 (Foreign Key) 的组合来强制执行数据有效性。
- 案例:对于一本存在的“书 (Book)”,它必须至少由一位“作者 (Author)”编写。外键确保书关联的作者 ID 在作者表中是真实存在的。
3. 语义完整性约束 (Semantic Integrity Constraint)
此约束强制执行表中数据的正确性 (Correctness)。
- 定义:确保数据在逻辑意义上是正确的。
- 案例分析:在
Author表的City列中,如果输入了一个无意义的“垃圾值(Garbage Value)”而非真实的城市名(如 Toronto),该值在逻辑上就没有意义。语义完整性即保证数据不仅符合格式,而且富有实际意义。
4. 域约束 (Domain Constraint)
域约束用于检查给定属性的有效取值范围。
- 定义:限制属性必须属于特定的取值集合。
- 案例分析:在
Author表中,Country(国家)属性必须包含两个字母的国家代码(如CA代表加拿大,IN代表印度)。如果输入数字34,由于它不符合“两个字母代码”的域定义,该值将被视为无效。
5. 空值约束 (Null Constraint)
空值约束明确确保特定的属性值不能为空 (Not Null)。
- 与实体完整性的区别:实体完整性针对主键;空值约束可应用于任何列。
- 重要性:如果
First Name或Last Name为空,可能导致无法准确识别作者。- 原则:作者必须有名字,因此这些属性不能为
NULL。
- 原则:作者必须有名字,因此这些属性不能为
6. 检查约束 (Check Constraint)
检查约束通过限制属性接受的值来强制执行域完整性。
- 定义:为列定义特定的业务规则。
- 案例分析:在
Book表中,Year(出版年份)属性。如果当前年份是 2010 年,那么出版年份大于当前年份(如 2011 年)在逻辑上是不合理的。 - 作用:检查约束通过限制
Year属性可接受的值范围来确保数据的合理性。
总结回顾
| 约束名称 | 核心功能 |
|---|---|
| 实体完整性 | 确保主键唯一且非空,用以识别每一行。 |
| 参照完整性 | 维护表间关系,确保外键引用的有效性。 |
| 语义完整性 | 确保数据在业务逻辑上的正确性和意义。 |
| 域约束 | 确保属性值属于预定义的有效值集合。 |
| 空值约束 | 强制要求特定属性必须输入数据。 |
| 检查约束 | 通过设定具体逻辑条件(如数值范围)来限制取值。 |