数据库注意事项,命名规范,编码 第二篇

1. 规范内容

1.1 开发工具:

为提高开发效率,降低开发门槛,帮助新员工快速搭建开发环境,避免工具软件使用冲突影响工作,对开发设计人员使用的日常开发工具,进行如下约定:

数据库:服务器端为Oracle 11gR1,客户端版本要求10g以上

数据库连接器:PLSQL、TOAD

代码管理工具:推荐使用TortoiseSVN 1.7以上版本

文本编辑器:Edit Plus、UltraEdit、Sublime

文件字符集:UTF-8

建模工具:POWER DESIGNER ,native premium

说明:

SQL脚本开发完毕后,需进行上传至SVN并本地最好留有备份,具体上传规则和上传位置见公共资料文档,注意使用匹配的TortoiseSVN,避免版本不匹配,出现软件SVN更新操作异常。

1.2 文件

1.2.1文件后缀

脚本使用下列文件后缀:

文件类别

文件后缀

SQL脚本

.sql

数据文件

.dbf

导入/导出文件

.dmp

备份数据文件

.dmp

备份脚本

.sh

 

1.2.2常见文件名:

常用的文件名包括:

文件名

用途

00_STORAGE.sql

数据库脚本备份

10_TABLES.sql

数据库表结构脚本备份

20_FUNCTION.sql

数据库函数脚本备份

30_VIEWS.sql

数据库视图脚本备份

40_PROC.sql

数据库过程脚本备份

50_JOBS.sql

数据库过程脚本备份

60_DATAS.sql

数据库数据脚本备份

70_LOGS.sql

数据库日志脚本备份

80_ANY1.sql

数据库其他备份(同义词、连接、SQL语句等)

90_ANY2.dmp

数据库其他备份(数据库导入导出备份)

 

1.3 命名规则

1.3.1包名

说明:包名称以PKG和单一名词组合而成,中间以“_”分割,如:PKG_SYS。

 

1.3.2函数命名:

说明:函数名称简写,中间以“_”分割,具有实际意义如:SPLIT_CSV.要求函数描述说明、参数和返回值。

 

 

1.3.3 过程

说明:过程均使用在包下,禁止单独定义;首先在包内进行声明过程,描述过程用途、参数。然后在包体描述过程用途、参数、脚本编写。

包声明:

包体:

 

1.3.4 定时JOB

说明:JOB在包内声明,包体实现,并注释描述、参数。

包声明:

包体:

 

 

 

1.3.5 其他数据类型

说明:如表类型、字段类型等均按照以下规则:

(1)脚本变量命名:V_NAME

 

(2)游标及其变量声明:CUR_NAME、V_CUR_NAME

 

 

 

(3)常量声明:C_NAME

 

   (4)  其他变量类型声明:具有实际意义的名称,中间以“_”分割,具有实际意义如:

 

1.4 注释

1.4.1 5.4.1 SQL注释

我们在编写SQL脚本的时候,尤其是复制SQL语句,一定要注释清楚变量、表级联关系、统计字段,以及SQL的查询功能说明,并上传SVN中去,这样方便开发和维护。如下所示:

 

 

5.4.2 PL/SQL 注释

PL/SQL编程如果不写注释,那么后期维护会非常麻烦,因为一个负责的业务往往会写几百上千行的代码,后期运维有时候甚至需要花几天时间去看一个业务逻辑。所以在编写PL/SQL时候,注释尤为关键,一定要写好注释,写清楚业务逻辑需求,实现思路;如下所示:

 

1.5 编程管理

5.5.1 数据库设计

(1)所谓数据库设计,一定要在遵循规则的基础上进行设计,对需求要足够了解,尽量把表设计的易用性更强,比如添加扩展字段,预留字段,通用标识字段等。

(2)主外键关联关系一定要添加,一般情况下不建议手工维护主外键,除非情况特殊(如需求不确定,数据不稳定,不准确等)

(3)数据库表结构一般情况下需要设置主键,需要设置4个数据交换字段CREATE_BY、CREATE_TIME、UPDATE_BY、UPDATE_TIME。

(4)在设计好表结构后,需要添加相关字段的约束,以便在最后一层控制数据入库,当然我们是按照三层CHECK的原则,前端、应用端、数据库端。最后保证数据的完整和有效性。

(5)在建立数据库索引时,应该认真考虑,如何建立,比如我们可以去对数据库的主键进行设置,让其有更多作用。

5.5.2 SQL优化

SQL优化的手段很多,在数据库表结构没有大问题的前提下,我们的数据优化就要从SQL语句去考虑问题。

  1. 基本的SQL优化,如我们要大写SQL语句,oracle编译SQL是按照大写去编译的;
  2. 如OR/AND使用的先后顺序,我们的SQL语句在编译时是从后向前进行编译的,这个时候就需要酌情去选择WHERE后过滤字段的先后顺序。
  3. 在数据库大并且可选的情况下我们尽量避免使用GROUP BY进行分组,如果需要使用GROUP BY 尝试先使用WHERE条件过滤一部分数据,使GROUP BY的数据内容尽可能的减小,另GROUP BY 尽量选择索引字段。
  4. 我们在使用索引做查询时,不用对索引字段进行附加操作,这样会导致索引失效。
  5. 在聚合、统计分析时,尽量使用ORACLE分析函数。
  6. 另外最后需要注意细节问题,比如IN/EXISTS、JOIN语句用法等基本无需强制进行优化,提升工作效率。
  7. 建立索引、分区、物化视图、并行查询需要针对特定的场景下,不要盲目操作。

 

5.5.3 PL/SQ使用

  1. 使用PL/SQL时注意在WHILE/LOOP/FOR循环里添加BEGIN END 匿名块,目的是进行异常数据的日志管理记录,另每一个作用域都需要进行异常的日志输出。如下所示:

 

  1. 在无特殊需求的情况下,尽量减少视图的使用,本质上没有差别,可以使用SQL语句。
  2. 在无特殊需求的情况下,尽量减少索引的建立,这样会增加IO的压力与内存。
  3. 在无特殊需求的情况下,尽量减少触发器的使用,同样增加IO操作。
  4. 在无特殊需求的情况下,尽量减少游标的使用,游标的查询性能比较昂贵。
  5. 在无特殊需求的情况下,尽量减少存储过程使用,尽可能用一条复杂SQL进行查询替代,存储过程性能比较昂贵。
  6. 在无特殊需求的情况下,尽量减少存储过程使用,尽可能用一条复杂SQL进行查询替代,存储过程性能比较昂贵。
  7. .....

 

注: 本文是博主参加架构师培训时的文档(这个版本已公开),  现找不到原博客地址, 所以只能显示原创, 如发现侵权, 请提供相关证明, 并站内信告知, 博主立马删除

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章