SQL 中的键 |主键 |外键|候选键|复合键|备用键|超级键|代理键|独特的钥匙

SQL 中的键 |主键 |外键|候选键|复合键|备用键|超级键|代理键|独特的钥匙
最新回答
木木de守护神

2021-03-08 19:59:34

SQL中的键用于唯一标识表中的行、加强表间关系并维护数据完整性,主要类型包括主键、外键、候选键、复合键、备用键、唯一键、超级键和代理键,具体说明如下

  • 主键唯一标识表中每条记录,不可为NULL,每个表仅能有一个主键。例如:

    CREATE TABLE 学生 ( StudentID INT PRIMARY KEY, -- 主键 名称 VARCHAR(50), 年龄 INT);

    StudentID作为主键,确保每个值唯一且非空。

  • 外键在两个表间建立关系,指向另一表的主键,强制引用完整性。例如:

    CREATE TABLE 课程 ( CourseID INT PRIMARY KEY, -- 主键 课程名称 VARCHAR(50));CREATE TABLE 注册 ( EnrollmentID INT PRIMARY KEY, 学生ID INT, 课程ID INT, FOREIGN KEY (CourseID) REFERENCES 课程(CourseID) -- 外键);

    注册表中的CourseID引用课程表的主键,确保数据一致性。

  • 候选键可唯一标识表中行的列或列组,一张表可有多个候选键,但仅能选其一为主键。例如:

    CREATE TABLE 员工 ( EmployeeID INT, -- 候选键 电子邮件 VARCHAR(100), -- 候选键 名称 VARCHAR(50), PRIMARY KEY (EmployeeID) -- 选择为主键);

    EmployeeID和电子邮件均可唯一标识行,但仅EmployeeID被选为主键。

  • 复合键由两列或多列共同组成的主键,唯一标识表中的一行。例如:

    CREATE TABLE 订单 ( 订单ID INT, 产品ID INT, 数量 INT, PRIMARY KEY (订单ID, 产品ID) -- 复合键);

    订单ID和产品ID的组合确保唯一性,单独任一列可能无法满足。

  • 备用键未被选为主键的候选键。例如:

    CREATE TABLE 车辆 ( VehicleID INT PRIMARY KEY, -- 主键 LicensePlate VARCHAR(50), -- 备用键 所有者名称 VARCHAR(50));

    LicensePlate是候选键,但未被选为主键,因此为备用键。

  • 唯一键确保列或列组中所有值唯一,但允许NULL值。例如:

    CREATE TABLE 用户 ( 用户ID INT PRIMARY KEY, 电子邮件 VARCHAR(100) UNIQUE, -- 唯一键 用户名 VARCHAR(50));

    电子邮件列通过UNIQUE约束确保唯一性,但允许NULL值。

  • 超级键一组可唯一标识行的列,候选键是最小超级键(不可删除任何列而不破坏唯一性)。例如:

    在员工表中,(EmployeeID, 电子邮件)是超级键,但单独的EmployeeID或电子邮件也可能是超级键(若它们本身已唯一)。

    候选键是超级键的子集,例如EmployeeID作为候选键,其本身也是超级键。

  • 代理键无实际业务意义的人工键,通常由系统生成(如自动递增整数)。例如:

    CREATE TABLE 订单 ( OrderID INT AUTO_INCREMENT, -- 代理键 产品名称 VARCHAR(50), 数量 INT, PRIMARY KEY (OrderID));

    OrderID由数据库系统自动生成,仅用于唯一标识记录,无业务含义。

总结

  • 主键候选键的核心区别在于数量(主键唯一,候选键可多个)。
  • 复合键是主键的特殊形式(多列组合),而超级键是更宽泛的概念(包含候选键)。
  • 备用键是未被选中的候选键,唯一键允许NULL值且不强制非空。
  • 代理键通过系统生成简化设计,避免依赖业务数据。

这些键共同确保数据库的数据完整性、关系一致性和查询效率。