数据库中最重要的概念之一是创建数据库表之间的关系。 这些关系提供了一种机制,用于链接存储在多个表中的数据并以高效的方式检索它。 为了在两个表之间创建链接,您必须在一个表中指定一个引用另一个表中的列的外键 。
数据库表和关系
您可能已经知道数据库只是一系列表 ,与您可能已经在电子表格程序中使用的类似,如Microsoft Excel。 实际上,您甚至可以将Excel电子表格转换为数据库。 但是,数据库与电子表格不同的地方在于在表格之间建立强大的关系 。
例如,考虑一家公司用来跟踪人力资源信息的数据库。 该数据库可能有一个名为Employees的表,其中包含公司员工的每个成员的以下信息:
- 员工ID
- 名字
- 姓
- 办公室电话
- 家庭电话
- PositionID
在本例中,员工ID是一个唯一生成的整数,在将每个员工添加到数据库中时会分配给每个员工。 职位ID是用于引用员工在公司中的职位的职位代码。 在这个计划中,员工可能只有一个职位,但是多个(或不包括)员工可以填补每个职位。 例如,您可能拥有数百名拥有“收银员”职位的员工。
数据库还可能包含一个名为Positions的表格,其中包含有关每个职位的以下附加信息:
- PositionID
- 标题
- 职业等级
- SkillCategory
- 位置
此表中的Position ID字段与Employees表中的Employee ID字段相似 - 它是一个唯一生成的整数,在将位置添加到数据库时创建。
当我们从数据库中抽取员工名单时,要求每个人的姓名和头衔是很自然的。 但是,此信息存储在多个数据库表中,因此只能使用JOIN查询进行检索,这需要表之间存在现有关系。
当您查看表格的结构时,定义关系的字段可能很明显 - 位置ID字段。 每位员工只能拥有一个职位,并且通过在职位表的相应条目中包含职位ID来识别该职位。 除了作为职位表的主键之外 ,在本例中,职位ID字段也是从雇员表到职位表的外键。 然后数据库可以使用该字段关联来自多个表的信息,并确保对数据库的任何更改或添加都会继续强制执行参照完整性 。
一旦确定了外键,就可以继续使用以下查询从数据库中提取所需的信息:
在SQL Server中创建外键
从技术上讲,您不需要明确定义关系就能够执行上面的查询。 但是,如果使用外键约束显式定义关系,则数据库将能够为您执行一些内务工作:
- 将新记录添加到Employees表时,数据库将确保您输入的职位ID是职位表中的有效主键 。
- 如果您更改职位表中的职位ID,数据库可以对Employees表执行所需更新以保持一致性。
- 数据库可以通过拒绝删除具有相应员工条目的职位或执行所有相关员工的级联删除来防止从职位表中删除职位的影响。
以下是在SQL Server中创建外键的方法:
ALTER TABLE雇员添加外键(PositionID)参考Positions(PositionID)通过添加子句创建表时,您还可以创建一个外键:
外键参考仓位(PositionID)到外键列的列定义的末尾。