📜  DBMS密钥:主键,外键,候选键和超级键(1)

📅  最后修改于: 2023-12-03 15:14:38.855000             🧑  作者: Mango

DBMS密钥:主键,外键,候选键和超级键

在关系型数据库系统中,密钥是用于唯一标识一个或多个记录的一组属性。密钥可以以各种形式出现,包括主键、外键、候选键和超级键。在下面的介绍中,我们将详细讨论每种密钥的特性和用途。

主键

主键是一组属性,用于唯一标识一个记录。在关系型数据库中,主键起到了一种特殊的作用,它可以用来关联和链接不同表中的记录。主键必须满足以下条件:

  • 主键必须唯一标识每个记录。
  • 主键不能有空值。
  • 主键的值不能被更改或者删除。

一般情况下,主键是由一列或多列属性组成的。在数据库设计中,通常会将一个或多个属性作为主键来设计数据表。主键对于保证数据完整性和安全性至关重要。

下面是一个例子,展示了如何通过一个属性或多个属性来定义主键:

CREATE TABLE Person (
  PersonID int PRIMARY KEY,
  FirstName varchar(50),
  LastName varchar(50)
);

CREATE TABLE Book (
  ISBN int PRIMARY KEY,
  Title varchar(255),
  Author varchar(255)
);

上述例子中,Person表的主键是PersonID,而Book表的主键是ISBN。

外键

外键是用于在数据库中链接不同表之间的记录的一组属性。外键在关系型数据库系统中被广泛使用,它可以用来建立表之间的关系。外键必须满足以下条件:

  • 外键必须引用另一个表中的主键。
  • 外键可以为空值,但是如果有值,必须是另一个表中的主键。

下面是一个例子,展示了如何通过外键将一组属性从一个表链接到另一个表:

CREATE TABLE Orders (
  OrderID int PRIMARY KEY,
  CustomerID int,
  FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

CREATE TABLE Customers (
  CustomerID int PRIMARY KEY,
  CustomerName varchar(255),
  ContactName varchar(255)
);

上述例子中,Orders表的CustomerID属性是一个外键,它引用了Customers表中的CustomerID属性。

候选键

候选键也是用于唯一标识一个记录的一组属性,但是与主键不同的是,候选键可以有多个。候选键必须满足以下条件:

  • 候选键必须唯一标识每个记录。
  • 候选键不能有空值。
  • 候选键的值不能被更改或者删除。

下面是一个例子,展示了如何通过一个或多个属性来定义候选键:

CREATE TABLE Product (
  ProductID int,
  ProductName varchar(50),
  ProductCode varchar(50),
  PRIMARY KEY (ProductID),
  UNIQUE (ProductName),
  UNIQUE (ProductCode)
);

上述例子中,ProductName和ProductCode两个属性都被定义为候选键。

超级键

超级键是一组属性,可以唯一标识一个记录,但是它不符合主键、外键或候选键的定义。通常情况下,超级键是由多个属性组成的。超级键可以用于索引或排序,并且通常不需要满足主键或外键的条件。

下面是一个例子,展示了如何通过多个属性来定义超级键:

CREATE TABLE Employee (
  EmployeeID int,
  FirstName varchar(50),
  LastName varchar(50),
  HireDate date,
  PRIMARY KEY (EmployeeID),
  INDEX EmployeeName (FirstName, LastName),
  INDEX HireDate (HireDate)
);

上述例子中,Employee表的超级键是由EmployeeID、FirstName、LastName和HireDate四个属性组成的。EmployeeName和HireDate两个属性被定义为索引。