如何在Microsoft SQL Server中创建外键

数据库中最重要的概念之一是创建数据库表之间的关系。 这些关系提供了一种机制,用于链接存储在多个表中的数据并以高效的方式检索它。 为了在两个表之间创建链接,您必须在一个表中指定一个引用另一个表中的列的外键

数据库表和关系

您可能已经知道数据库只是一系列表 ,与您可能已经在电子表格程序中使用的类似,如Microsoft Excel。 实际上,您甚至可以将Excel电子表格转换为数据库。 但是,数据库与电子表格不同的地方在于在表格之间建立强大的关系

例如,考虑一家公司用来跟踪人力资源信息的数据库。 该数据库可能有一个名为Employees的表,其中包含公司员工的每个成员的以下信息:

在本例中,员工ID是一个唯一生成的整数,在将每个员工添加到数据库中时会分配给每个员工。 职位ID是用于引用员工在公司中的职位的职位代码。 在这个计划中,员工可能只有一个职位,但是多个(或不包括)员工可以填补每个职位。 例如,您可能拥有数百名拥有“收银员”职位的员工。

数据库还可能包含一个名为Positions的表格,其中包含有关每个职位的以下附加信息:

此表中的Position ID字段与Employees表中的Employee ID字段相似 - 它是一个唯一生成的整数,在将位置添加到数据库时创建。

当我们从数据库中抽取员工名单时,要求每个人的姓名和头衔是很自然的。 但是,此信息存储在多个数据库表中,因此只能使用JOIN查询进行检索,这需要表之间存在现有关系。

当您查看表格的结构时,定义关系的字段可能很明显 - 位置ID字段。 每位员工只能拥有一个职位,并且通过在职位表的相应条目中包含职位ID来识别该职位。 除了作为职位表的主键之外 ,在本例中,职位ID字段也是从雇员表到职位表的外键。 然后数据库可以使用该字段关联来自多个表的信息,并确保对数据库的任何更改或添加都会继续强制执行参照完整性

一旦确定了外键,就可以继续使用以下查询从数据库中提取所需的信息:

SELECT FirstName,LastName,Title FROM Employees INNER JOIN Positions ON Employees.PositionID = Positions.PositionID

在SQL Server中创建外键

从技术上讲,您不需要明确定义关系就能够执行上面的查询。 但是,如果使用外键约束显式定义关系,则数据库将能够为您执行一些内务工作:

以下是在SQL Server中创建外键的方法:

ALTER TABLE雇员添加外键(PositionID)参考Positions(PositionID)

通过添加子句创建表时,您还可以创建一个外键:

外键参考仓位(PositionID)

到外键列的列定义的末尾。