主键、外键

什么是主键、外键

关系型数据库一条记录中有若干个属性,若其中一个属性组(一个或者多个字段)能唯一标识一条记录,该属性组就是一个主键。主键是能确定一条记录的唯一性标识。

外键用于与另一张表的关联,是能确定另一个张表记录的字段。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。外键的目的是控制存储在外表中的数据。

主键、外键的作用

主键保持了数据的唯一性,外键保证了数据的一致性、完整性。

主键的设计原则

① 主键应当是对用户没有意义的;

② 主键应该是单列的,以提高连接和筛选操作的效率;

使用复合键通常基于两点考虑:其一主键应该具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,但是,复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。

③ 永远不要更新主键;实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。

④ 主键不应该包含动态变化的数据(如时间戳、创建时间列、修改时间列等);

⑤ 主键应该由计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机。

数据库主键选取策略

① 自动增长型字段。

② 手动生成字段。

③ 使用UniqueIdentifier SQL Server提供一个UniqueIdentifier数据类型(16字节),并提供一个生成函数NEWID(),生成一个唯一的UniqueIdentifier。

④ 使用COMB类型。保留UniqueIdentifier的前10字节,后6字节表示生成时间。


 内容来源于网络 

原文地址:https://www.cnblogs.com/wangrui1587165/p/9969532.html