mssql sqlserver 数据库主键设计思考


摘要:
在数据库的设计过程中,理论上每张表都应该设计”主键”,主键设计的好坏直接影响查询、数据迁移、数据管理等等。



一、主键设计的重要性

主键代表一张表的唯一标识,所以每张表我们都应该设置主键,拥有了主键,代表数据表的完整性,方便我们对表的行记录进行管理。

主键设计时,应尽量避免使用业务信息,都为标的主键,
例:不要使用单据编号,不要使用客户编号 作为主键。



二、主键键值选择

2.1:标识列作为主键
这种方法目前使用的最广,很多开发人员,在表设计都是用这种方式。
优点:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,
在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。
缺点:不利于系统合并
———————————-
2.2 当前标最大编号值加1
这种方法每次插入时候,去数据表拿去最大编号,然后加入再插入,这种方法可以避免流水号空缺,但是加大了数据插入的成本开销
,当表非常大时,数据插入就会变得非常慢
———————————-
2.3 自制流水号+1
采用专用的数据表控制指定表的流水编号,这种操作会导致并发处理,可能产生异常。
———————————
2.4 采用guid newId()生成主键
采用全球唯一标识,生成主键。
——————————-
优点:
数据库级别采用newid()生成,速度非常快,便于数据移植
——————————-
缺点:
guid值较长,不方便记忆
guid存储值占用16字节,比int占用空间大