在数据库表中能够唯一识别每一条记录的一个字段或者多个字段的组合,称之为主键(Primary Key)。主键的主要作用将表中记录的数据和其他表中的数据进行关联。作为主键的需要满足如下的条件:

主键值所在的字段不能为null。

主键值具有唯一性,不能重复。

主键必须简洁,不要包含过多属性。

表中的主键通过数据库DDL语句设置的,主键又可以分为自然主键(Natrual Key)和代理主键。

3.1.1  自然主键

在数据库表中把具有业务逻辑含义的字段作为主键,称为"自然主键(Natural Key)"。例如,如果有一个employee表,保存某个公司所有员工的基本信息,其中员工的身份证号具有唯一性,所以可以使用身份证号作为这个表的主键,还可以通过两个或者多个字段的组合作为主键,称为"复合主键"。例如,在employee表中,因为姓名和出生日期字段组合后也具有唯一性,所以其组合也可以作为employee表的复合主键。

数据库中表与表通过主键与外键进行关联,修改表中的主键值会对数据库中数据的维护带来非常大的麻烦,应该尽量避免被修改,但是由于自然主键也表示了表中的业务逻辑信息,所以存在一定的被修改概率。例如:在某些运行系统中,如果数据库的某些表使用身份证号作为主键,则在最近的这次身份证号码从15位升级到18位的过程中,增加了不必要的系统升级的工作量。

在数据库设计中应该尽量避免使用自然主键,而使用代理主键。

3.1.2  代理主键

在数据库表中采用一个与当前表中逻辑信息无关的字段作为其主键,即代理主键这样的主键一般可以采用数据库中自动增长的生成机制自动生成主键值,字段名通常命名为"id"。

例如,在Oracle数据库中主键值即可采用序列生成;在MySQL和MS SQL Server数据库中代理主键的字段类型设置为自动增长(auto increment)类型,数据类型一般为整形(Integer)。