zoukankan      html  css  js  c++  java
  • 技术分享会(一):数据库开发规范

    数据库开发规范

    一、数据库

    ?当前主要数据库和作用?

    二、 --》 字段 --》 数据类型

    ?当前主要模块,各模块核心表? 

    CRM_ 客户相关

    SCM_ 借款相关

    FMS_ 资金相关

    PD_ 公用数据相关

    WMS_ 仓储相关

      

    三、字段

    ?说说以往遵循过的字段规范?

    小写字母加下划线,c_id,loan_id,product_name

    四、数据类型

    ?说说你都知道什么数据类型? 

    bit

    inttinyint,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 大于等于

  • 相关阅读:
    python json.dumps() json.dump()的区别
    geopy 在python中的使用
    socket技术详解(看清socket编程)
    数据结构之各种数据结构插入、删除、查找的时间复杂度
    数组查找的时间复杂度正确表述
    各种排序算法时间复杂度
    MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容
    Java虚拟机学习
    Java虚拟机学习
    java集合框架05——ArrayList和LinkedList的区别
  • 原文地址:https://www.cnblogs.com/gezifeiyang/p/10156493.html
Copyright © 2011-2022 走看看