在对关系数据库的设计进行建模时,我们可以施加一些限制,例如允许在关系中插入什么值,在关系中允许什么样的修改和删除。这些是我们对关系数据库施加的限制。
在诸如ER模型之类的模型中,我们没有这些功能。
数据库中的约束可以分为3个主要类别:
- 在数据模型中应用的约束称为隐式约束。
- 通过在DDL(数据定义语言)中指定约束,可以直接将约束应用到数据模型的架构中。这些称为基于架构的约束或显式约束。
- 不能直接应用于数据模型的架构的约束。我们称这些基于应用程序或语义约束。
因此,在这里我们将处理隐式约束。
关系数据库上的约束主要有4种:
- 域约束
- 关键约束
- 实体完整性约束
- 参照完整性约束
让我们详细讨论上述每个约束。
1.域约束:
- 每个域都必须包含原子值(最小的不可分割的单位),这意味着不允许使用复合值和多值属性。
- 我们在此处执行数据类型检查,这意味着当我们将数据类型分配给列时,我们会限制它可以包含的值。例如。如果我们将属性age的数据类型指定为int,则不能给它赋其他值,而不是int数据类型。
例子:
解释:
在上述关系中,“名称”是一个复合属性,而“电话”是一个多值属性,因此它违反了域约束。
2.关键约束或唯一性约束:
- 这些被称为唯一性约束,因为它确保关系中的每个元组都应该是唯一的。
- 一个关系可以有多个键或候选键(最小超键),我们从其中选择一个键作为主键,从候选键中选择主键没有任何限制,但是建议候选键的属性数量较少。
- 主键中不允许使用Null值,因此Not Null约束也是键约束的一部分。
例子:
解释:
在上表中,EID是主键,而第一个和最后一个元组在EID中具有相同的值,即01,因此违反了键约束。
3.实体完整性约束:
- 实体完整性约束表示没有主键可以采用NULL值,因为使用主键我们可以唯一地标识关系中的每个元组。
例子:
解释:
在上述关系中,EID成为主键,并且主键不能采用NULL值,但是在第三个元组中,主键为null,因此这违反了实体完整性约束。
4.参照完整性约束:
- 参照完整性约束是在两个关系或表之间指定的,用于维护两个关系中元组之间的一致性。
- 通过外键强制执行此约束,当关系R1的外键中的属性与关系R2的主键具有相同的域时,则称R1的外键引用或引用了R1的主键。关系R2。
- 关系R1的元组中外键的值可以采用关系R2中某个元组的主键值,也可以采用NULL值,但不能为空。
例子:
解释:
在上面,第一个关系的DNO是外键,第二个关系的DNO是主键。由于DNO = 22,因此不允许在第一个表的外键中使用DNO = 22
在第二个关系的主键中未定义。因此,这里违反了参照完整性约束