简单原则
有一个字段可以作关键字则应尽可能不用多个字段
主关键字段应尽量采用数值型或长度小的字符型,不宜采取日期型或长度大的字符型
如果要采用多个字段做主关键字,那将给软件开发中数据处理增加一定的工作量,如查询修改或删除的时候就要求确定的字段条件有两个以上,特别是在修改或删除表的时候会增加软件的BUG。
一般情况下多个字段的占用空间肯定比单个字段大,在进行主关键查询时包括CPU处理及磁盘I/O操作都会增加服务器的负荷,在百万级以上的数据量时表现尤为明显。
有一个这样的测试
一个表100万行记录,三个字段,A(数值型),B(字符型10位),C日期型
检索1000行记录
以A字段做条件,最大时间为1.344秒,最小时间为1.156秒
以B字段做条件,最大时间为1.391秒,最小时间为1.172秒
以C字段做条件,最大时间为1.843秒,最小时间为1.532秒
采用日期型数据做主关键字不会对性能上带来太大的影响,但是日期型的主关键字在软件开发上会带来很大的不便,如:
对日期不能直接字符查询,需将字符转换为日期型数据再查询,日期型数据可以存时间也可以不存时间,如果某字段不要求存时间则在开发中还要在时间数据处理上下功夫,因为有时间的数据可能会对查询产生不正确的结果。
另外有时采用日期时间作为主关键字是一种现实理想上的推论,随着业务数据量的增加业务功能的扩充及操作人员增加会对此关键字提出挑战,并且时间会因为数据库服务器的时间而影响,很可能在服务器时间出错或因为与实际时间相差太大时修改的时候导致数据库数据紊乱。
持久性原则
一个主关键字应是持久有效的,具体的说就是主关键字能确定当前及将来一段时间内的业务需求(可以预见的或可能出现的)的业务最小原子,如果因为以后的业务功能扩充导致主关键字失效或者是要强制约定记录数据内容才能维持的话,那将带来非常严重的后果。最容易出现这种错误的表就是有多个字段的主关键字并且与业务相当紧密,设计分析时只考虑了当前分析的业务情况,认为这几个字段做主关键字足够了。
可充当其它表外键关联原则
主关键字应该是经常查询的字段,并且是当前表与其它表关联最多的字段
经常查询的字段按数据库性能设计来分析应该在条件字段上建立索引,主关键产生的索引是所有索引类型最快的一种,因此应在查询的时候尽可能的用到主关键字索引。
有意义原则
在实际的简单业务表中,主关键字应尽量有实际意义,而在系统的基础核心表及数据量大的业务表中主关键字应在速度性能方面考虑多一些。主关键字有意义主要是为了在软件开发及数据库查询调试时更方面,业务更容易理解,数据库与实际业务更清晰。