📅  最后修改于: 2023-12-03 15:14:38.855000             🧑  作者: Mango
在关系型数据库系统中,密钥是用于唯一标识一个或多个记录的一组属性。密钥可以以各种形式出现,包括主键、外键、候选键和超级键。在下面的介绍中,我们将详细讨论每种密钥的特性和用途。
主键是一组属性,用于唯一标识一个记录。在关系型数据库中,主键起到了一种特殊的作用,它可以用来关联和链接不同表中的记录。主键必须满足以下条件:
一般情况下,主键是由一列或多列属性组成的。在数据库设计中,通常会将一个或多个属性作为主键来设计数据表。主键对于保证数据完整性和安全性至关重要。
下面是一个例子,展示了如何通过一个属性或多个属性来定义主键:
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两个属性被定义为索引。