数据库的键 (KEY)
主键/超键/候选键/外键
在数据库设计中,主键、超键、候选键和外键是关系模型中的基本概念,它们用于定义表中的数据结构和完整性约束。以下是这些概念的详细解释:
主键
- 定义:主键(Primary Key)是一列或多列的组合,其值能够唯一标识表中的每一行。
- 特点
- 每个表只能有一个主键。
- 主键中的值必须是唯一的。
- 主键列中的值不能为NULL。
- 通常用来建立表与表之间的关系。
- 示例 这里的 id 列就是主键。
CREATE TABLE Employee (
id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT
);
超键
- 定义:超键(Super Key)是一组列的集合,其值能够唯一标识表中的每一行。超键可以包含主键以及其他列。
- 特点
- 超键可能包含额外的列,这些列并不是唯一性所必需的。
- 所有的主键都是超键,但并不是所有的超键都是(或包含)主键。
- 示例 在表 Employee 中,(id) 和 (id, name) 都是超键。
候选键
- 定义:候选键(Candidate Key)是一个最小的超键,去掉其中任何一列后,剩下的列不再是超键。
- 特点
- 一个表可以有多个候选键。
- 候选键的值必须唯一且不能为 NULL。
- 主键是从候选键中选出的一个。
- 示例 如果 Employee 表中 name 列的值也唯一且非空,则 (id) 和 (name) 都是候选键。
外键
- 定义:外键(Foreign Key)是一列或多列的组合,其值引用另一个表的主键,用于建立两个表之间的关联。
- 特点
- 外键的值可以重复。
- 外键列中的值可以为 NULL。
- 外键约束用于保持表之间的引用完整性。
- 示例 这里的 department_id 列是 Employee 表的外键,它引用了 Department 表的 id 列。
CREATE TABLE Department (
id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE Employee (
id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id) REFERENCES Department(id)
);