外键,也称为Foreign Key,它是用于建立和加强两个表数据之间的链接的一列或多列。我们在前面的课程中讲到了“主键”这个概念,“外键”与主键虽然不是同一个概念,但是它们之间有着紧密的联系。通过将保存表中主键值的列或多列添加到另一个表中,可以创建两个表之间的链接。这样,这个列就成为了第二个表的外键。
  我们来举个例,说明外键的作用。数据库“School Information” 中的班级表 “Class” 和学生表 “Student” 表之间存在着连接,因为在班级和学生之间存在逻辑联系。
  我们先建立好学生表“Student”,表的结构如图1 中所示。
图1
  其中StudentID为主键,将标识种了标识自增量都设为1。“Class ID”列与班级表“Class”中的主键“Class ID”相对应。这样,班级表中的“Class ID”主键列就是学生表的外键列。这个列是不允许空值存在的,所以我们将“允许空”这个选框中的勾去掉。
  点击工具栏上面的“管理关系”按钮,打开“Student”表的“属性”对话框,并且切换到“关系”选项卡。在“关系”选项卡中,点击“新建”按钮。系统会增加一个表示表间关系的外键,这个关系的名称为“FK Student Class”。在“Class”表与“Student”表之间,“Class”表是主键所在的表,而“Student”是外键所在的表。在“Class”表下面的下拉框中选择“Class ID”列,在“Student”表下面的下拉框中也选择“ClassID”,因为我们要让这两个表之间通过“ClassID”来建立链接。如图2所示。
图2
  在下方的几个复选框中有向个选项。“创建中检查现存数据”这个选项设置我们在创建这个外键的时候,是否要检查表中已经存在的数据。另外,当一个班级被删除了之后,这个班级的学生也是没有意义的。那么,我们设想一下,如果在这个班级被删除之后,系统能够自动删除这个班级的所有学生的资料,在一些情况下,这个功能无疑是很有吸引力的。“级联删除相关的记录”这个选项就是指的这项功能。我们勾选上这个选项之后,我们只要在“Class”表中删除一个班级,“Student”表中的所有属于这个班级的学生就会自动被删除。当然,这种做法是非常危险的,如果不小心删除了基础数据,将会到来灭顶之灾,所以,在尝试新功能带来便利之后,建议使用级联更新相关字段,而不要使用级联删除相关记录。
      在SQL2005中,外键的做法与2000有点不同,但是道理一样。
  点击“关闭”按钮,回到设计视图中,再在“设计视图”中,点击工具栏上面的“保存”按钮。在弹出的“保存提示”对话框中,显示“下列表将保存到您的数据库中。您想继续吗?”。大家可以看到,上面显示有两个表将被保存到数据库中。如图3 。
图3
  在前面的几步操作中,我们只打开了“Student”表的设计视图,并修改了这个表的结构,我们并没有对“Class”表作任何修改。而在这里的提示则说明“Class”表和“Student”表都已经被修改,这就说明,我们已经为“Class”表和“Student”表之间建立了一个“表间联系”了。点击“是”按钮即可。
  点击“关闭”按钮,关闭“Student”表的设计视图,我们已经完成了“Student”表的外键设计了。