SQLSERVER 数据库使用规范
作者:[51ak ]
这是我自己写的SQLSERVER 数据库使用规范,供参考
1. 表的字义
a) 尽可能少的使用允许NULL 字段
b) 聚集索引字段应该尽可能的少(不超过3个字段),尽可能的小(不多与200字节)
c) 鼓励使用GUID字段 代替IDENTITY(1,1)自增字段。推荐使用扩展的GUID( YYYYmmDDHHMMssms+3位机器编号+6位随机数字),尤其是对快速增长的表
d) 在使用INDENTITY字段,需考虑IDENTITY字段在高可用行框架下的“非连续性”,“非顺序性”
e) 表记录中的单行最大占用空间,原则上要求在8K以下,避免单行数据的分页存储
f) 使用varhcar(max),navarchar(max) varbinary(max)代替text,ntext,image
g) 建议多使用time,date 等SQL2008新类型来节省存储空间和查询时的转换运算
h) XML类型字段:要充分考虑到该类型字段索引的宠大开销
i) 不允许使用 ID 这个字段名,可考虑改成 F_ID,PID,CpId,UserID 等形式
j) 对数据有效性的验证优先采用 CHECK约束
k) 一定要记住:主键和聚集索引是可以分开定义的
l) 特殊定义字段需要填写说明. EXEC sys.sp_addextendedproperty
m) 在不影响业务的前题下,多用空间换时间
2. 索引的字义
a) 不建无用索引,测试时候的索引要及时删除(无用索引)
b) 杜绝建同一实体的不同名称的索引(重复索引)
c) 不建议过多的采有联合索引
d) 鼓励使用筛选索引
e) 对读多写少的表,读性能制约明显的表鼓励多建索引
f) 要考虑到维护索引的开销,索引碎片率的产生(低命中率的索引)
g) 索引的命名
i. 非聚集索引:IX_表名_主字段名
ii. 聚集索引:CL_表名_主字段名
iii. 主键聚集索引:PK_表名[_主字段名]
3. 存储过程的定义
a) 尽可能少的在存储过程中拼接SQL语句再执行,宁可多写IF判断或拆分存储过程
b) 对一个存储过程中要反复使用的一部分数据,查出来到变量中,避免多次查询
c) 存储过程中IF嵌套不能超过5层,每一层的BEGIN END 都需要缩进,多个并行IF,建议换行分隔
d) 存储过程的命名
i. 普通存储过程以usp开头 usp_影响的主表_主要的操作(get,lst,add,del,edi) 例:usp_UserInfo_edi
ii. 影响多表(3个以上)的存储过程,且分不出主要影响对象的表 uspa_影响的主表_主要的操作
iii. 使用了链接服务器的存储过程,以 uspl_影响的主表_主要的操作
iv. CLR存储过程 csp_影响的主表_主要的操作
e) 存储过程的注释
i. 所有的存储过程的开头部分必须有注释,对格式不做显示要求,但应包含创建人,创建和修改时间,用途,参数说明,最好附带使用示例
ii. 存储过程中对关键分支需要但不强求有注释
iii. 存储过程的变量名应尽可能的符合其代表的含义。对于有特殊含义的过程内变量也需要有注释
iv. 在大多数时候 建议存储过程中使用 SET NOCOUNT ON