技术分享会(一):数据库开发规范
数据库开发规范
一、数据库
?当前主要数据库和作用?
二、表 --》 字段 --》 数据类型
?当前主要模块,各模块核心表?
CRM_ 客户相关
SCM_ 借款相关
FMS_ 资金相关
PD_ 公用数据相关
WMS_ 仓储相关
三、字段
?说说以往遵循过的字段规范?
小写字母加下划线,c_id,loan_id,product_name
四、数据类型
?说说你都知道什么数据类型?
bit
int(tinyint,smallint,bigint)
decimal
varchar (英文或数字)
nvarchar (中文)
Datetime(smalldatetime,date,date2)
五、自定义视图 v_
?问问以前都怎么用视图的,遵循什么规范?
注意事项,select 写明确的字段名,不要使用*,如:
select c_id,name,shortname from CRM_Customer where c_id = @c_id
使用*号有一个隐患,当基表新增字段的时候,视图select出来的字段会错乱。
六、自定义函数 f_
?问问大家以前都怎么使用函数的,遵循什么规则?
与视图相同,使用明确的字段
七、触发器 tr_
?问问大家都怎么使用触发器的,有没有遇到过什么问题?
因为触发器对开发人员来说是非常隐蔽的,为避免掉坑里,尽量不适用触发器
八、存储过程 p_
?问问大家以前都怎么使用存储过程的,有没有遇到过记忆深刻的bug?
必加设置
set nocount on
set transaction isolation level read uncommitted
格式规范
缩进规范
注释规范
大小写规范
事务使用(非常重要的业务才需要开启事务)
异常处理(一般用C#做异常处理,非常重要的作业才需要开启事务)
连表查询
select a.*,b.* from SCM_Loan_Loan a inner join SCM_Loan_LoanRepaymentPeriod b on a.loan_id = b.loan_id
连表更新
update SCM_Loan_Loan set bm = b.bm,owner = b.owner
from SCM_Loan_Loan a inner join CRM_Customer b on a.c_id = b.c_id
?问问各位如何做连表更新的?
表变量和临时表的使用,尽可能使用表变量
Declare @tmptable table(id int primary key, name nvarchar(50), created datetime)
游标使用规范
?问问大家怎么使用游标?
declare @cur cursor
declare @owner nvarchar(100),@c_id int int,@name nvarchar(50)
set @cur = CURSOR read_only forward_only for
select c_id,name,owner from CRM_Customer where type = '客户'
open @cur
fetch next from @cur into @c_id,@name,@owner
while(@@fetch_status = 0)
Begin
...... 业务处理脚本
fetch next from @cur into @c_id,@name,@owner
end
close @cur
deallocate @cur
九、索引
?问问大家以前谁做开发的时候真正使用过索引的,讲一讲使用案例或者优化经验?
索引类型
聚集索引、非聚集索引、包含性索引
select 是否高效,是否用到了索引
不高效的原因
1)没有建立索引;
2)进行了列运算,无法使用到索引;
3)语句太复杂,无法正确使用索引;
?问问大家怎么确定我写的语句有没有用到索引,我们的表都有什么索引?
sp_helpindex CRM_Customer
create index ix_phone on CRM_Customer(phone)
sp_spaceused CRM_Customer
?如何查看执行计划?
?数据库那么多sql语句,怎么确定哪些查询时慢的,需要优化?
sql profiler
动态视图
?如何通过sql profiler快速定位问题?
ClientProcessID 等于
TextData 类似于
Duration 大于等于