1.数据库/表 名第一位为数字的话,需要加 "[]" ;为了规范,不要使用数字开头
2.如果没有业务列组合当主键,可以生成自增id当主键
a.主键不是必须的,但是主键是必要的。首先,确保表的完整性(如数据的唯一性)当插入两行一模一样的数据时,没有主键则不可区分。其次,提升效率(没有主键时,是按照输入顺序进行插入的)
b.有些数据库里主键时必须要有的。
c 业务列作为主键 / GUID主键 / 时间+机器号+自增ID主键
3.注意数据库字段,表名的长度限制。Oracle是30个字符
4.外键必须是另一个表的主键
5.dbo:数据库名.架构名.表名。05版本前为 数据库名.用户名.表名
[email protected]自定义变量 @@系统变量 Cursor游标
7.使用top/where等控制sql执行返回的结果集合
8.注意数据库的编码规则
9.EXEC执行存储过程
10.游标:Cursor c is select .. from ..
11.游标和临时表对比:内存/硬盘,数据量两方面考虑
12.不使用goto 的原因:可以使用if else/while代替,提升代码质量和流程
13.SET NOCOUNT ON :不返回 ..行受到影响
14.业务逻辑是否封装到存储过程里:
b.是:执行速度快,安全性(屏蔽开发人员权限)
c.否:互联网基本采用这种,银行/电信等采用上条。
i.业务逻辑交给程序处理,减少数据库资源消耗
ii.不利于分层规范和维护
iii.迁移方便(屏蔽具体sql的差异,如sqlserver和mysql)
15.最好有return信息。没有的话可添加 return 1
16.Union all ,from .. where等等聚合写入/读出
17.索引:最实用的方法就是看执行计划找瓶颈,根据实际情况优化设计
a.参考文章 SQL索引一步到位
b.聚集索引/非聚集索引:是否是物理排序
c.非聚集索引行定位器是
i.指向行的指针(文件标识符+页码+行序号生成)
ii.该行的聚集索引关键字的值。
d.SQL SERVER 采用 B- 树结构,非聚集索引是一个新实体(类似术语表)
e.原则上where字句上出现的列都需要创建索引:不然还是会到表中查询
f.避免在WHERE条件中,在索引列上进行计算或使用函数:这将导致索引不被使用
g.保证索引排序和Order By 字句顺序保持一致
h.数据重复列高的字段不要创建索引:没有意义
i.text, varchar(max)不创建索引
j.外键和用于做表连接的字段需要做单独的索引:如果外键列缺少索引,从关联子表的查询就只能对子表选择全表扫描
k.经常更改的列不创建索引:维护成本太高
使用规范
1.采用Pascal命名
2.ConstDict、ConstDictValues作为系统保留字段
3.每个实体表都必须包含 CreateDate、CreateBy、ModifyDate、ModifyBy四个字段
4.脚本头规范:参考别人写的就行了。
a.作者 / 创建时间 / 修改人 / 修改时间 / 对应系统模块 / 描述
b.参数注释
c.TRANSACTION事务注释
5.存储过程规范:
a.过程名称,作者,功能说明,创建日期,维护记录,使用案例
6.脚本命名:编号_数据库名_脚本功能
a.脚本数据库存在分库情况时,DBA会将其全库执行,不需要开发处理
7.存储过程命名:架构名.模块名_功能语义
8.依赖条件使用 By+条件
命名法:
匈牙利命名法:
1.每个变量名前加上若干表示数据类型的字符。
2.变量名=属性+类型+对象描述
驼峰命名法:大小写混合的对象描述,如userName
Pascal命名:首字母大写的驼峰命名