数据库使用注意事项

1.

建表时表名要规范,前面加上表格标志的前缀t_(类似的,视图前缀v_,存储过程前缀p_,函数前缀f_)各个单词用_分割,形如:t_house_log,字段采用小驼峰命名法,形如:createrName,字段要选择合适的类型,并指定恰当的长度,不可太长也不可太短(字段为字符串时一定要指定长度,不要用默认的varchar(255),所有字段皆不能为空并加好备注,设置合适的默认值,对常用条件字段加上索引以提高查询速度。强制加上字段createTime,记录数据插入时的时间。

 

2.

查询时不允许使用select * from语句,必须指定需要的字段,查询数量也尽量加以限制,以免在查询大表时导致服务器卡死。

另外,尽量不要在条件语句中做计算,会导致不走索引并扫描全表,形如:

select ContID from Protocol where left(DealDate,7)='2020-09'

可以替换成

select ContID from Protocol where DealDate between '2020-09-01' and '2020-09-30'

 

3.

联表查询尽量使用join,而不是使用“,”,如:

select house.HouseID,HouseTSGJID from house,HouseTSGJ where House.HouseID=HouseTSGJ.HouseID

可替换为

select House.HouseID,HouseTSGJID from house inner join HouseTSGJ on House.HouseID=HouseTSGJ.HouseID

,表的别名要有含义,不要起A,B,C这样的别名。联表时小表在前,大表在后,具有过滤性的过滤条件在后,普通的过滤条件在前(单表查询时也试用),联表个数尽量不要超过三个,对于多处使用的复杂查询,可做成视图。使用like 时多数可以用charat代替。

 

4.

在进行数据的修改删除时,应先写好查询语句,确认好数据后在查询语句的基础上进行修改,不可重新写语句,以免条件缺失导致事故的发生。

 

5.

尽量避免使用循环(游标),数据库的速度来自于它对集合进行操作,循环不是它擅长的事情,一般情况下可以用临时表或表变量加以过渡,以使循环处理变为集合处理。如果必须使用游标,尽量不嵌套,以免导致不可知问题。

 

6.

方法和存储过程不可太长,如果太长,需进行拆分,直到主体代码逻辑清晰顺畅为止,一个方法或存储过程只做一件事情,不可为图方便把所有逻辑堆到一个里面。方法中不进行数据的增删改操作。代码逻辑要紧凑,变量定义尽量靠近使用处,并标明含义和用途,步骤之间用空行和注释分离。if-else嵌套层数不能超过三层,否则代码可读性迅速降低。编写完成之后必须格式化代码再进行保存。

 

 

7.

慎用触发器,慎用触发器,慎用触发器,在对外关联比较多的表上禁止使用触发器,触发器中不要进行复杂的逻辑操作。

 

8.

在逻辑设计中能在服务器进行的计算尽量不要在客户端计算,如果服务器资源短缺,可适当把计算放到客户端(客户端的情况多种多样,一旦对它要求过高,会导致有些客户端不可用)。

 

9.

灵活运用系统提供的工具简化代码,如生成房源编号的代码:

select @HouseCount = Max(Cast(right(HouseNo, 6) as int)) + 1 from House where  LEFT(HouseNo, 4) = @HouseTop
   
if (@HouseCount = Null) or (@HouseCount = '') or (@HouseCount is null)
   select @HouseCount = '000001'

if LEN(@HouseCount) = 1
   set @HouseNo = @HouseTop + '00000' + Cast(@HouseCount as varchar(1))
else
if LEN(@HouseCount) = 2
   set @HouseNo = @HouseTop + '0000' + Cast(@HouseCount as varchar(2))    
else
if LEN(@HouseCount) = 3
   set @HouseNo = @HouseTop + '000' + Cast(@HouseCount as varchar(3))
else
if LEN(@HouseCount) = 4
   set @HouseNo = @HouseTop + '00' + Cast(@HouseCount as varchar(4))  
else
if LEN(@HouseCount) = 5
   set @HouseNo = @HouseTop + '0' + Cast(@HouseCount as varchar(5))   
else
   set @HouseNo = @HouseTop + Cast(@HouseCount as varchar(6))

可改写为

select @HouseCount = Max(Cast(right(HouseNo, 6) as int)) + 1 from House where  LEFT(HouseNo, 4) = @HouseTop
set @HouseNo = @HouseTop + right('00000'+cast(isnull(@HouseCount,1) as varchar),6)

 

 

 

 

 

核心思想:所有行为都是有意识的。

 

posted on 2020-09-05 11:11  2516341237wei  阅读(96)  评论(0)    收藏  举报