DBMS 外键怎么用?数据库外键约束如何设置和查询?

文章导读
Previous Quiz Next 外键允许我们在维护一致性和数据完整性的同时,在表之间创建有意义的关联关系。本章中,我们将通过示例和实际应用详细阐述外键的概念,帮助您全面理解外键及其应用方式。
📋 目录
  1. 什么是外键?
  2. 外键的重要性
  3. 创建和删除外键的语法
  4. 外键实现的总结
  5. 外键的真实世界示例
  6. 为什么 DBMS 中需要外键?
  7. 自引用外键
  8. 结论
A A

DBMS - 外键



Previous
Quiz
Next

外键允许我们在维护一致性和数据完整性的同时,在表之间创建有意义的关联关系。本章中,我们将通过示例和实际应用详细阐述外键的概念,帮助您全面理解外键及其应用方式。

什么是外键?

foreign key 是表中的一个属性或一组属性,它引用另一个表的主键。通过这种方式,它在两个表之间创建了链接。外键在维护关系结构和强制数据一致性方面非常有用。

想象我们有两个表 −

  • STUDENT Table − (STUDENT_ID (Primary Key), NAME, ADDRESS, AGE, DOB)
  • COURSES Table − (COURSE_NAME, INSTRUCTOR, REFERENCE_ID (Foreign Key))

在这个示例中,REFERENCE_ID 列是特殊的。在 COURSES 表中,它引用 STUDENT 表中的 STUDENT_ID 列。这种关系表明 COURSES 表中的任何课程记录都与 STUDENT 表中的一个有效学生相关联。

外键的重要性

外键在数据库管理中具有以下几个关键作用 −

  • Data Integrity − 外键用于确保相关表中的数据保持一致。例如,如果一个课程通过外键引用一个学生,则该学生必须存在于 STUDENT 表中。如果有人试图删除或修改 COURSES 表中引用的学生记录,数据库会抛出错误。这就是维护数据完整性。
  • Establishing Relationships − 外键的主要目的是链接表,从而帮助创建有意义的关联关系。例如,学生与特定课程的关联,或者订单与客户的关联。
  • Avoiding Redundancy − 这是另一个原因。外键减少了数据重复的需求。我们无需在 COURSES 表中存储完整的学生详细信息,只需存储 REFERENCE_ID,它链接到 STUDENT 表中的 STUDENT_ID
  • Query Optimization − 在数据库设计中,使用外键可以优化查询执行。表之间的关系允许数据库引擎在复杂查询期间更有效地检索数据。
  • Enforcing Business Rules − 通过使用外键,我们可以强制执行业务规则。这非常有趣。例如,如果从 STUDENT 表中删除一个学生,则 COURSES 表中与之关联的课程也必须被删除或失效。

创建和删除外键的语法

外键可以在创建表时定义,也可以在之后添加。让我们来看一些 SQL 语法 −

创建外键

让我们了解创建外键的过程 −

CREATE TABLE COURSES (
    COURSE_NAME VARCHAR(20),
    INSTRUCTOR VARCHAR(20),
    REFERENCE_ID INT,
    CONSTRAINT FK_REFER FOREIGN KEY (REFERENCE_ID)
    REFERENCES STUDENT(STUDENT_ID)
);

在这个示例中,COURSES 表中的 REFERENCE_ID 列引用 STUDENT 表中的 STUDENT_ID 列。关键字 CONSTRAINT 用于命名外键约束。

删除外键

要移除外键,需要使用 ALTER TABLE 语句 −

ALTER TABLE COURSES
DROP FOREIGN KEY FK_REFER;

此命令从 COURSES 表中删除名为 FK_REFER 的外键约束。

外键实现的总结

以下是实现外键的步骤总结 −

  • 创建主键表 − 要创建外键,我们必须首先创建作为引用的表,并确保它具有 primary key。
  • 定义外键表 − 创建包含外键列的表,该列引用第一个表的主键列。
  • 测试关系 − 在两个表中插入数据并测试关系,以确保完整性得到维护。
  • 删除或修改约束 − 使用 ALTER TABLE 命令在必要时更新或移除外键约束。

外键的真实世界示例

为了让这个概念更加清晰,让我们看看外键在 Student-Courses 数据库系统中的工作方式。

步骤 1: 创建数据库

首先,我们创建一个名为 MYDB 的新数据库 −

CREATE DATABASE MYDB;
USE MYDB;

步骤 2: 创建表

接下来,我们创建 STUDENTCOURSES 表。

以下是 STUDENT 表

CREATE TABLE STUDENT (
    STUDENT_ID INT PRIMARY KEY,
    NAME VARCHAR(20),
    ADDRESS VARCHAR(20),
    AGE INT,
    DOB DATE
);

以下是 COURSES 表

CREATE TABLE COURSES (
    COURSE_NAME VARCHAR(20),
	INSTRUCTOR VARCHAR(20),
    REFERENCE_ID INT,
    CONSTRAINT FK_REFER FOREIGN KEY (REFERENCE_ID)
    REFERENCES STUDENT(STUDENT_ID)
);

步骤 3: 链接表

通过在 COURSES 表中使用 REFERENCE_ID 列,我们引用了 STUDENT 表中的 STUDENT_ID 列。我们在两个表之间建立了关系。这表明 COURSES 表中的每门课程都必须链接到一个现有的学生。

为什么 DBMS 中需要外键?

外键解决了数据库管理中的实际挑战。以下是 DBMS 中外键发挥重要作用的一些关键方面 −

  • 确保数据一致性 − 外键防止数据不匹配。例如,我们不能为不存在于 STUDENT 中的学生添加课程。
  • 简化数据管理 − 使用外键,数据更容易管理。与其在表之间重复相同的数据,我们维护关系并确保更新在单一位置进行。
  • 防止未授权更改 − 外键通过防止未授权的删除或更新增加了一层安全性。例如,如果一个学生与课程相关联,则在解决关系之前,不能删除 STUDENT 表中的其记录。

自引用外键

外键也可以引用同一表内的列。这被称为 自引用外键。例如,在员工层级结构中,我们可能有一个表,其中每个员工都有一个 MANAGER_ID 列,该列引用同一表内的 EMPLOYEE_ID 列。

结论

在本文中,我们介绍了外键的工作原理以及它们在数据库中的重要性。我们探讨了外键如何在表之间建立关系并确保数据一致性。我们解释了创建和删除外键的语法,并通过真实世界示例演示了其应用。我们还考察了外键在维护数据完整性和减少冗余方面的重要性。