2.2.2 候选键与主键
候选键是***标识表中每一行的键。候选键可以是单列键,也可以是复合键。主键是DBMS用于***标识表中每一行的候选键。例如,假设有如下的EMPLOYEE表:EMPLOYEE (EmployeeNumber, FirstName, LastName, Department, Email, Phone)
用户告诉我们,EmployeeNumber是***键,Email是***键,复合键(FirstName, LastName, Department)也是***键,因此有三个候选键。在设计数据库时,需要选出一个候选键作为主键(primary key)。因此本例使用EmployeeNumber作为主键。
提示:
如果将候选键看作竞选"主键"的"候选者",且只有一个候选者能赢得竞选,将有助于理解为什么可用作表中主标识符的***键称为候选键。
主键很重要,因为它不仅可以用来标识***行,而且可以表示表中的行。虽然第1章的图1-10没有指明,但CustomerID是CUSTOMER的主键。将CustomerID作为一列放入ENROLLMENT表以创建两个表之间的链接,就可以使用CustomerID来表示CUSTOMER和ENROLLMENT的关系。另外,许多DBMS产品使用主键的值来组织表的存储。它们还建立了索引和其他特殊的结构,以通过主键的值来快速检索行。
本书通过添加下划线来标明主键。因为EmployeeNumber是EMPLOYEE的主键,所以EMPLOYEE表表示为:EMPLOYEE (EmployeeNumber, FirstName, LastName, Department, Email, Phone)
每个DBMS程序都用自己的方法来创建和指示主键。第1章的"Access工作台"简要讨论了主键,解释了如何在Access 2010中设置主键。图2-7在Access的表设计视图中显示了图1-10中艺术课程数据库的CUSTOMER表。在表设计视图中,查找列名旁边的钥匙符号,就可以确定表的主键。在该示例中,钥匙符号位于CustomerNumber旁边,这意味着开发人员定义CustomerNumber为该表的主键。
(点击查看大图)图2-7 在Access 2010中定义主键
图2-8显示了SQL Server 2008 R2 Express 2中的CUSTOMER表,该表显示在SQL Server Management Studio图形实用程序中。该窗口较为复杂,但是查找列名旁边的钥匙符号,就可以确定表的主键。同样,钥匙符号位于CustomerNumber旁边,表示CustomerNumber是该表的主键。
提示:
在图2-8中,通常以表名前加上dbo的方式列出表名,如dbo.CUSTOMER。dbo代表数据库所有者,这在SQL Server中很常见。
(点击查看大图)图2-8 在SQL Server 2008中定义主键图2-9在Oracles的MySQL3中显示了同样的CUSTOMER表,该表显示在MySQL Workbench图形实用程序中。该窗口比Access更加复杂,但在Column Name列表中查找列名旁边的钥匙符号,就可以确定表的主键。同样,钥匙符号位于CustomerNumber旁边,表示CustomerNumber是该表的主键。
(点击查看大图)图2-9 在MySQL 5.1中定义主键指定主键的常用方法是使用SQL,在第1章已简要介绍过。第3章将介绍如何使用SQL指定主键。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0