很久都没有写过博客了,从最后一次发表的文章到现在已经是两个多月的时间了,一直都想写点什么,可一直没有时间(其实都是借口),随笔内容无疑就是工作学习中的总结,经验的分享,也是自己成长的一面镜子,好了,言规正传,这次谈谈在数据库设计中主键字段类型的选择。
做web 开发时,经常要与数据库交互,数据库主键的选择也犹为重要,怎么么选择数据库主键字段的类型,主要从以下几个方面考虑:
1. 首先要符合业务需求,这是设计中重要的出发点
2. 数据库的迁移问题,考虑在后期是否要经常迁移,数据库高度唯一性
3.程度中的使用是否更简单,易用(比如分页,一般是根据主键查询来分页的)
4.数据库查询的效率,在主键做为外键链表查询的时候
根据以上的情况,通常数据库主键字段的类型常被设计成 int 或 GUID 或自定义的格式类型,以下详细说明这几种的区别和应用的场合
1. 主键字段类型设置成 int 类型
这种情况主要考虑到程序的分页,排序(按主键字段的递增或递减),简洁易懂,同时可加rowguidcol列,如果是SQL 2005可以使用NewSequentialid()来顺序生成,为同步做准备,数据合并时也可以作为参考。主从表关联速度会快一点。小库推荐。
2.主键字段类型设置成 GUID 类型
这种情况主要考虑到对数据有强烈的唯一性要求,比如用户表的主键类型都被设置成 GUID,其它的表的主键类型也都应该设置成GUID,严格避免数据重复,并易于定位;数据要经常迁移,如果是 int 类型,容易造成混乱;有若干个表饮食类似的数据,有时要对这些数据做合并或其它处理,这时GUID 类型是最好的选择
总结:
使用GUID。不存在重复问题,数据合并时非常简单。关联速度比int慢。经常合并数据或脱机输入数据联机上传最好用此方案。
guid 数值是随机的,而且不接受可以对使用者更具意义的任何形式。没有办法判定产生 guid 值的顺序,所以不适合用于现有依循环次序递增索引键值的应用程序
这两方案根据不同需求选择。