Coursera 笔记

Module 02 · Using Relational Databases

Primary Keys and Foreign Keys主键与外键

Coursera ↗

欢迎学习本节课程。通过本视频,您将能够描述主键与外键的定义,并概述创建它们的具体步骤。


一、主键 (Primary Key)

主键用于唯一地标识表中的每一行记录。

1. 核心特征与选择

  • 自然唯一属性:在某些表中,选择主键非常简单,因为实体本身具有天然的唯一属性。
    • 示例:书籍的 book_id 或员工的 employee_id。
  • 人工添加属性:如果表中不存在现有的唯一属性,可以添加一个新列作为主键。
  • 复合主键 (Composite Primary Key):如果需要两个属性的组合才能唯一标识每一行,可以跨两列创建主键。
    • 示例:如果员工仅在其工作场所内拥有唯一标识,则可以使用 site_id 和 employee_id 的组合。
  • 唯一性限制:每张表只能有一个主键。

2. 创建方法

您可以采用以下两种方式之一创建主键:

方法 SQL 语法 操作说明
建表时创建 CREATE TABLE ... PRIMARY KEY (column) 在 CREATE TABLE 语句中使用 PRIMARY KEY 子句,括号内注明列名。
在现有表创建 ALTER TABLE ... ADD PRIMARY KEY (column) 使用 ALTER TABLE 语句的 ADD PRIMARY KEY子句。

⚠️ 注意:当使用多个列作为复合主键时,请务必用逗号分隔列名。


二、外键 (Foreign Key)

您可以使用主键和外键来定义表之间的关系。

1. 定义与示例

外键是表中的一个列,它包含的信息与另一个表中的主键完全一致。

  • 示例:图书馆的 copy(副本)表列出了所有拥有的书籍。
    • copy 表中的某本书的 book_id 必须在 book(图书)表中作为一个有效的书籍存在。
    • 当图书馆拥有某本畅销书的多个副本时,该书籍的 book_id 会在 copy 表中出现多次。
  • 参照完整性:您可以指定在向 copy 表添加行时,所使用的 book_id 必须已经存在于 book 表中。

2. 创建方法

在创建表时,可以使用以下子句:

CONSTRAINT [约束名] FOREIGN KEY (列名) REFERENCES [父表名] (主键列名)

3. 定义操作规则 (Rule Clause)

您可以定义当父表(拥有主键的表)中的行被更新或删除时,子表(拥有外键的表)应采取的行动:

  • 更新或删除 (Update/Delete):
    • NO ACTION (不采取行动):如果子表中有相关记录,父表的更新或删除操作可能会失败。
  • 仅针对删除 (Delete):
    • CASCADE (级联):自动删除依赖表中相关的子行。
    • SET NULL (设为空值):将子表中外键列的值设置为 NULL。

总结

  • 主键 (Primary Key):用于强制表中行的唯一性。
  • 外键 (Foreign Key):包含与另一表主键相同信息的列。
  • 关系建立:通过主键和外键的配合,可以在不同表之间建立起逻辑联系。