我们知道,一种数据模型必须包含三个基本的部分:
- 构造机制(数据结构):主要描述数据的类型、内容、性质以及数据间的联系等。
- 运算机制(数据操作):主要描述在相应的数据结构上的操作类型和操作方式。
- 约束机制(数据约束):主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
作为数据库的一种数据模型,关系模型提供了一组完整性规则或限制。完整性约束用于确定关系数据库里数据的准确性和一致性。
在关系型数据库里,完整性约束包括域完整性、实体完整性、引用完整性以及用户定义完整性。
一、完整性约束的概念
1.1 域完整性
域完整性,是指给定列的取值范围(即输入的有效性),比如性别取值应为男或女。
强制域有效性的方法有:限制类型(通过数据类型)、格式(通过 CHECK 约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。
1.2 实体完整性
实体完整性,是指使用主键来唯一地标识一个实体。
在关系数据库中,一条记录代表一个实体。而实体是可以相互区分、识别的,也即它们应具有某种唯一性标识(该标识不能取相同的值,也不能为空)。
实体完整性强制表的标识符列或主键的完整性(通过索引、UNIQUE 约束、PRIMARY KEY 约束或 IDENTITY 属性)。
1.3 引用完整性
引用完整性,就是定义外键与主键之间的引用规则。
假设有两个关系:
Student (stuID, name, sex, age, classID);
Class (classID, amount, teacherName);
其中 classID 是关系 Student 的外键,它引用了关系 Class 里的 cl