Coursera 笔记

Module 02 · Using Relational Databases

Relational Model Constraints - Advanced高级关系模型约束

Coursera ↗

欢迎学习关系模型约束。在业务环境中,数据关系模型必须遵守特定的限制或规则。通过本指南,您将能够列举并详细描述关系数据库模型中定义的各种完整性约束。


概述:为什么要使用约束?

在关系数据模型中,数据完整性 (Data Integrity) 是通过一套完整性规则或约束来实现的。这些规则确保了数据库中数据的准确性、一致性和有效性。

关系数据库模型定义了以下 6 种主要约束:

  1. 实体完整性约束 (Entity Integrity Constraint)
  2. 参照完整性约束 (Referential Integrity Constraint)
  3. 语义完整性约束 (Semantic Integrity Constraint)
  4. 域约束 (Domain Constraint)
  5. 空值约束 (Null Constraint)
  6. 检查约束 (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 属性可接受的值范围来确保数据的合理性。

总结回顾

约束名称 核心功能
实体完整性 确保主键唯一且非空,用以识别每一行。
参照完整性 维护表间关系,确保外键引用的有效性。
语义完整性 确保数据在业务逻辑上的正确性和意义。
域约束 确保属性值属于预定义的有效值集合。
空值约束 强制要求特定属性必须输入数据。
检查约束 通过设定具体逻辑条件(如数值范围)来限制取值。