完整性约束

2025年5月14日 | 阅读 7 分钟
DBMS Integrity Constraints
  • 完整性约束是一组规则。它用于维护信息的质量。
  • 完整性约束确保数据插入、更新和其他过程的执行方式不会影响数据完整性。
  • 因此,完整性约束用于防止数据库受到意外损坏。
  • 完整性约束用于阻止将无效数据输入数据库表。
  • 约束可以限制表中的一组列或单个列。

有两种指定约束的方法

  • 列约束:列约束是在列定义中定义的约束。
  • 表约束:表约束是在“create table”语句的末尾定义的,它可以对表中的任何列施加规则,而不仅仅是对其定义的列。

DBMS 完整性约束是什么意思?

完整性约束是预先确定的指南集,这些指南应用于数据库管理系统中的表字段(列)或关系,以保证数据库表中包含数据的整体有效性、一致性和完整性的保存。每次插入、更新、删除或更改表时,都会评估完整性约束中指定的所有要求或指南。只有当约束的结果为 True 时,才允许插入、更新、删除或更改数据。因此,完整性约束有助于防止授权用户对数据库造成任何意外的损害。

完整性约束的类型

DBMS Integrity Constraints

1. 域约束

  • 域约束可以定义为属性的有效值集。
  • 域的数据类型包括字符串、字符、整数、时间、日期、货币等。属性的值必须存在于相应的域中。

示例

考虑一个包含 emp_id、Name、Birth_year、Dept_id 的员工表

emp_id名称出生年份部门 ID
10001Raja2000001
10002Tiya2001002
10003Puja1999001
10004Rohit2002B

由于 B 是字符,而 Class 属性(Dept_id)只接受整数值,因此上面员工表中最后一行最后一列的值 B 违反了域完整性约束。

域约束的类型

  • CHECK 约束:CHECK 约束允许您定义在接受或拒绝进入表的值之前必须满足的条件。使用 CHECK 约束,您可以定义一个表达式,该表达式对于表中正在插入或更新的每一行都必须为真。CHECK 约束是一个布尔条件,它总是为假或真。如果条件评估为真,则接受列值;否则,返回错误。CHECK 约束可以在表级别或列级别定义。

下面是 check 约束的语法。

在列级别

在表级别

  • NOT NULL 完整性约束:NOT NULL 约束确保表中某一列没有 NULL 值。它只能在列级别应用,不能在表级别应用。默认情况下,所有列都允许值。Null 表示值丢失、未知或不适用。NULL 列表示尚未为该列分配值。NOT NULL 约束可以应用于多个列。

NOT NULL 约束的语法是

2. 实体完整性约束

  • 实体完整性约束规定主键值不能为 NULL。
  • 这是因为主键值用于唯一标识关系中的行,如果主键具有 NULL 值,则我们无法标识这些行。
  • 除主键字段外,表还可以包含 NULL 值。

示例

考虑一个包含 Roll_no、Name、Birth_year 的学生表

Roll_no名称出生年份
41Akash2009
23Mina2008
14Rony2010
 Tina2009

上面学生表中 Roll_no 列(它是主键)的最后一行包含 NULL 值,这违反了实体完整性要求。

3. 参照完整性约束

  • 参照完整性约束在两个表之间指定。
  • 在参照完整性约束中,如果 Table 1 中的外键引用了 Table 2 的主键,那么 Table 1 中外键的每个值都必须为 NULL 或存在于 Table 2 中。

示例

假设有一个学生表和一个课程表,连接这两个表的键是 Branch_ID。

Students 表

Roll_no名称出生年份部门 ID
11Ronti20013
12Priya20022
13Puja20004
14Mahua20023
15Annesha20011

部门表

部门 ID部门名称
1CSE
2EE
3ME

在上面的示例中,Branch_ID 同时是部门数据库的主键和学生表的外键。ID 为 4 的行违反了参照完整性要求,因为 Branch_ID 4 未在 Branch 表中声明为主键字段。

4. 键约束

  • 键是用于在其实体集中唯一标识实体的实体集。
  • 一个实体集可以有多个键,但其中一个键是主键。主键必须是唯一的,并且在关系表中不能为 NULL。

示例

考虑一个包含 emp_id、Name、Birth_year、Dept_id 的员工表

emp_id名称出生年份部门 ID
10001Raja2000001
10002Tiya2001002
10003Puja1999001
10001Rohit2002B

由于员工表最后一条记录的 emp_id 1001 在主键字段中出现了两次,因此违反了键完整性要求。由于主键必须是唯一的且不能为空,因此不能在上面员工表的 emp_id 列中输入重复值。

键约束的类型

  • PRIMARY KEY 约束:表的主键是唯一标识表中每一行的列或列的集合。主键的唯一性确保表中没有重复记录。即使您可以创建没有主键的表,这也通常被认为是不好的做法,应避免。

创建主键约束的语法

在列级别

在表级别

  • UNIQUE KEY 约束:UNIQUE 键完整性约束确保列或列集中的每个值都是唯一的,前提是值不为 NULL。也就是说,表中没有两行可以在特定列或列集中包含匹配的值。UNIQUE 键完整性约束允许您为没有 NOT NULL 约束的列输入值。UNIQUE 键约束可以在表级别或列级别定义。

下面给出了 unique key 约束的语法。

在列级别

在表级别

主键约束和唯一键约束的区别

序号主键约束唯一键约束
1.一个表只能有一个主键一个表可以有多个唯一键约束。
2.定义主键时,构成主键的列必须包含一个值。定义唯一约束时,构成唯一键约束的列不自动包含值。

结论

  • 数据库管理系统中称为完整性约束的预定规则负责维护数据库中存储的数据的准确性和一致性。
  • 每次在表上执行插入、更新、删除或更改操作时,都会根据完整性约束中指定的规则进行评估。
  • DBMS 完整性约束有四种:键约束、参照完整性约束、域约束、实体约束。

DBMS 完整性约束选择题

1. 当一个关系中的 _ _ _ _ _ 在另一个关系中被引用时,它被称为外键。

  1. 检查约束
  2. 主键
  3. 外键
  4. 引用
 

答案:b

解释:根据外键声明,每个课程元组都必须在其中提供部门名称,并且存在于部门关系中。


2. _ _ _ _ _ 满足了数据完整性约束的以下目的。

  1. 限制对数据的访问
  2. 确保不将重复条目添加到表中
  3. 提高特定属性(表列)输入数据的准确性
  4. 防止用户更改数据库中记录的值
 

答案:c

解释:通过使用数据完整性要求,可以提高特定属性(即表列)的数据质量。


3. 使用以下操作之一将完整性约束添加到现有关系中

  1. 创建表
  2. 修改表
  3. 更改表
  4. 删除表
 

答案:c

解释:我们必须使用以下语法来更改表:alter table table_name add constraint。


4. 下列哪项不是完整性约束?

  1. a) 非空
  2. 积极
  3. Unique
  4. Check "predicate"
 

答案:b

解释:答案的解释是“positive”是一个值,而不是限制。


5. 参照完整性、函数依赖和域约束是 ________ 的特定形式。

  1. 外键
  2. 主键
  3. 断言
  4. 参照约束
 

答案:c

解释:我们希望数据库始终满足的条件称为断言。


下一主题DBMS 关系演算