主键与候选键
虽然主键是从候选键中选择出来的,但是主键与其他候选键之间存在一些差异,本文将对此进行详细讨论。数据库设计是维护和存储数据时最重要的活动之一。在这个设计过程中,必须创建具有许多关系的不同表。为了访问数据库中的这些表,现代数据库设计语言(如MYSQL、MSAccess、SQLite等)中使用了不同类型的键,其中候选键和主键已成为数据库设计中必不可少的部分。
什么是候选密钥(a candidate key)?
候选键是数据库表中的一列或一组列,可用于唯一标识任何数据库记录,而无需引用任何其他数据。数据库的每个表可以有一个或多个候选键。可以使用函数依赖项创建一组候选键。候选密钥中有一些重要的特性。他们是;
•候选关键字在域内应是唯一的,且不应包含任何空值。
•候选键不应更改,并且对于实体的特定出现,它必须保持相同的值。
候选键的主要用途是帮助识别大表中数百万行中的一行。每个候选密钥都有资格成为主键。然而,在所有候选键中,最重要和最特殊的候选键将成为表的主键,并且是候选键中最好的。
什么是主键(a primary key)?
主键是表的最佳候选键,用于唯一标识存储在表中的记录。在数据库中创建新表时,我们需要选择主键。因此,为表选择主键是数据库设计者应该做的最关键的决定。在决定主键时,最重要的约束是表的选定列只应包含唯一值,而不应包含任何空值。设计表格时常用的一些主键是社会保险号码(SSN)、身份证号码和国民身份证号码(NIC)。
程序员应该记住仔细选择主键,因为它很难更改。因此,根据程序员的说法,创建主键的最佳实践是使用内部生成的主键,例如由msaccess的AutoNumber数据类型创建的记录ID。如果我们试图将一条记录**主键与现有记录重复的表中,则**操作将失败。主键值不应该一直变化,所以保持静态主键更为重要。
主键(primary key)和候选关键字(candidate key)的区别
•候选键是限定为唯一的列,而主键是唯一标识记录的列。
•没有候选键的表不代表任何关系。
•数据库中一个表可以有多个候选键,但一个表只能有一个主键。
•虽然主键是候选键之一,但有时它是唯一的候选键。
•一旦选择了主键,其他候选键将成为唯一键。
•实际上,候选键可以包含空值,尽管它目前不包含任何值。因此,候选键不适合主键,因为主键不应包含任何空值。
•目前唯一的候选键也可能包含重复值,使候选键无法成为主键。
小结:
主键与候选键
候选键和主键是数据库设计中用来唯一标识记录中的数据和建立数据库表之间关系的关键键。一个表应该只包含一个主键,并且可以包含多个候选键。目前大多数的主数据库都能自动生成密钥。因此,主键和候选键为数据库管理系统提供了大量的支持。
图片来源:
- SqlPac的主键(CC by-SA 3.0)