《数据库编程规范_计算机软件及应用_it计算机_专业资料.docx》由会员分享,可在线阅读,更多相关《数据库编程规范_计算机软件及应用_it计算机_专业资料.docx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、维护定制部开发技能规范学习材料VI. 0Prepared by 拟制Date日期2007-10-10Reviewed byDateyyyy-mm-dd评审人日期Approved byDateyyyy-mm-dd批准日期Authorized byDateyyyy-mm-dd签发日期Revision record 修订记录日期版本描述作者2007/10/181.0初稿完成2007/10/281.0评审后定稿目录(仅供内部使用)1概述1.1 背景1.2 简介1.3 术语约定1.4 应用范围1.5 规范引用文件2书写规范2. 1大小写风格2. 2缩进风格2. 3空格及换行2.4其他3注释规范4命名规范
2、4. 1 对象命名4.2 变量命名5语法规范6脚本规范7设计规范7.1 表设计原则7.2 索引设计原则7. 3完整性设计原则7.4 触发器7. 5 视图设计7.6 包设计7.7 文档设计规范8维护、管理规范9性能优化10 编码工具UNIX基础错误!未定义书签。666777888913131616171923242425252526272728293711错误!未定义书签。11.1UNIX系统结构错误!未定义书签。11.2UNIX树型目录结构错误!未定义书签。11.3文件的属性和权限错误!未定义书签。11.4目录的使用权限:错误!未定义书签。12普通指令错误!未定义书签。12.1登录和注销指令错
3、误!未定义书签。12.2环境指令错误!未定义书签。12.3时间指令错误!未定义书签。12.4进程指令错误!未定义书签。12.5查询指令错误!未定义书签。12.6文件和目录指令错误!未定义书签。12.7移动和复制指令错误!未定义书签。12.8搜索指令错误!未定义书签。12.9压缩指令错误!未定义书签。12.10帮助指令错误!未定义书签。13维护指令错误!未定义书签。13.1用户指令错误!未定义书签。13.2权限指令错误!未定义书签。13.3设备指令错误!未定义书签。13.4网络指令错误!未定义书签。13.5关机指令错误!未定义书签。14vi指令错误!未定义书签。14.1vi的操作模式错误!未定义
4、书签。14.2游标的移动错误!未定义书签。14.3屏幕的移动错误!未定义书签。14.4删除及修改指令错误!未定义书签。14.5搬移与复制指令错误!未定义书签。14.6字符串搜寻与取代错误!未定义书签。14.7编辑文件错误!未定义书签。15Shell编程简介错误!未定义书签。16字符错误!未定义书签。16.1有意义字符错误!未定义书签。16.2通用字符错误!未定义书签。16.3转义字符错误!未定义书签。17变量错误!未定义书签。17.1自定变量错误!未定义书签。17.2参数变量错误!未定义书签。17.3预先定义变量错误!未定义书签。17.4变量之替换错误!未定义书签。18流程控制指令错误!未定义
5、书签。18.1if错误!未定义书签。18.2while错误!未定义书签。18.3until错误!未定义书签。18.4for错误!未定义书签。18.5case错误!未定义书签。18.6其它错误!未定义书签。19test测试运算错误!未定义书签。19.1括号错误!未定义书签。19.2数字比较错误!未定义书签。19.3字符串比较错误!未定义书签。19.4逻辑运算错误!未定义书签。19.5文件测试错误!未定义书签。20其它指令错误!未定义书签。20.1eval字符串错误!未定义书签。20.2exec命令错误!未定义书签。20.3read变量名称串行错误!未定义书签。20.4set错误!未定义书签。21
6、数据输出入管道错误!未定义书签。21. 1,错误!未定义书签。21.2,错误!未定义书签。21.3错误!未定义书签。第一部分概述1概述1.1 背景目前产品线越来越多的软件产品与数据库、unix、shell编程等有着密切相关的联系。 从目前的情况来看,我们的脚本代码没有很好地控制和管理起来,存在许多可读性、可维护 性较差的代码,部分代码甚至含有低级错误和严重的性能隐患。同时,随着资源外包和项目 外包开发模式的逐渐推广和完善,建立一套完整、有效且操作性强的规范来监控第三方开发 人员的代码质量变得十分必要和重要。为了提高现场维护定制开发员工的维护开发技能,提高整体的维护开发能力,促进各项 目现场的人
7、员成长和系统稳定,统一数据库编程风格,提高脚本的可读性、可靠性和可重用 性,提高脚本的质量和可维护性,降低维护成本,最终提高我们产品的质量和服务的质量。 同时也让开发、维护人员在编程过程中有章可循、有规可蹈。1.2 简介由于数据库自身的特性,一方面有关系理论作基础,同时又有SQL-92国际标准,不同 类型的数据库产品有着诸多共性。但另一方面,各种数据库产品在具体的语法规则及其实现 上却又各不相同。因此,针对各种主流数据库产品制定相应的编程规范较为适宜。本规范强调实用性、可操作性,根据开发人员在编码过程中常见的问题和易犯的错误, 对代码编写的各方面均进行了详细明确的规范和约束。主要包括下列内容:
8、1 .书写规范2 .注释规范3 .命名规范4 .语法规范5 .脚本规范6 .设计规范7 .维护规范8 .性能优化9 .编码工具本文为Oracle数据库分册,在内容上既符合通用的数据库编程规范,同时也针对Oracle 数据库自身的一些特点作了特别的约束。1.3 术语约定本规范采用以下的术语描述: 原则:编程时应坚持的指导思想. 规则:编程时必须遵守的原则. 建议:编程时须考虑的原则. 说明:对规则或建议进行必要的解释. 正例:对规则或建议给出的正面例子. 反例:对规则或建议给出的反面例子.1.4 应用范围1.5 规范引用文件第二部分数据库编程规范2书写规范2.1 大小写风格规则2.1.1所有数据
9、代码统一使用小写字母书写,以方便不同数据库之间的移植,同时也避免程序调用问题。示例:以下编码不符合规范SELECT custid,servnumberFROM SUBSCRIBERWHERE region=531 AND subsid=5310000000001;应如下编写:select custid,servnumberfrom subscriberwhere region=531 and subsid=5310000000001;2.2 缩进风格规则2.2.1程序块采用缩进风格书写,保证代码清晰易读,风格一致。缩进格数统一为4格。规则2.2.2必须使用空格,禁止使用TAB键。说明:消除不同
10、编辑器对TAB处理的差异,有的代码编辑器可以设置用空格代替TAB键。规则2.2.3同一条语句占用多于一行时,每行的第一个关字应当左对齐。正例:select region,subsid,servnumber,prodidfrom tbcs.subscriberwhere region=:b1and servnumber=:b2order by subsid desc;建议2.2.4对于Insert. values和update语句,一行写一个字段,这段后面紧跟注释(注释语句左对齐),values和insert左对齐,左括号和右括号与insert、values左对齐。正例:insert into
11、t_num_segment(segcode, -并发段代码tabname,-表名minvalue,-最小值maxvalue -最大值)values(v_ segcode,v_ tabname,v_ minvalue, v_ max value);建议2.2.5 insertselect语句中,应使每行的字段顺序对应,以每行不超过80字符为准,以增强可读性。2.3 空格及换行规范2.3.1关键字之后要留空格。说明:if、while等关键字之后应留一个空格再跟左括号(,以突出关键字。规范2.3.2创建表、存储过程、函数时,表名、存储过程名和函数名之后不要留空格。 说明:表名、存储过程名和函数名后紧
12、跟左括号(,以与关键字区别。规范2.3.3不允许把多个语句写在一行中,即一行只写一条语句。正例:v_flag := 1;v_createdate := sysdate;反例:v_flag := 1; v_createdate := sysdate;规范2.3.4相对独立的程序块之间、变量说明之后必须加空行。反例:v_region := 531;if v stat= US10, thenv_statdate := sysdate;end if;正例:-初始化局部变量v_region := 531;状态为在用if v_stat= 数据类型脚本 业务表脚本 临时表脚本 视图脚本 主外键脚本 索引脚本
13、 触发器脚本 存储过程脚本 定时作业脚本 初始化静态数据脚本规则6.4脚本文件的全路径名必须包含表示数据库类型以及数据对象类型等相关信息。说明:数据库类型包括ORACLE、SYBASE. SQLSERVER,分别用ora、syb、sq后缀来 表示,数据对象表、存储过程等分别用tab、proc后缀来表示。规则6.5创建每个对象脚本应该在其首部有相应的注释和必要的说明。规则6.6每个存储过程(函数)创建脚本单独存和,在配置库上按照功能模块存 放到不同的目录下。7设计规范7.1 表设计原则规则7.1.1表空间设计,原则上表空间名与schema名一致,其索引所在的表空间为 用户名+index,索引存放
14、的表空间和数据存放的表空间分别独立。说明:如用户:inv,该用户的数据表空间为:INV ,所对应的索引表空间名为:INVINDEX规则7.1.2创表对象时必须指定表空间名,不采用默认表空间,以防止表建在system表空 间上,导致性能问题。对特别繁忙的业务数据表,考虑用专门的数据表空间存放。规则7.1.3对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果 表按某些字段进行增长,则采用按字段值范围进行范围分区;如果表按某个字 段的几个关键值进行分布,则采用列表分区;对于静态表,则采用hash分区或 列表分区:在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的 复合分区
15、方法。7.2 索引设计原则规则7.2.1创建索引时,必须指定表空间,不要采用默认表空间,以防止索引建在system 空间或非索引专用空间,以减少I0冲突,提高性能。规则7.2.2在分区表中尽量避免使用全局索引,因为truncate分区时会导致全局索引失效, 增大维护难度,降低系统性能和稳定性。7.3 完整性设计原则规则7.3.1原则上所有的数据表都要有主键。对于数据量比较大的表,要求指定索引段。规则7.3.2对于关联两个表的字段,一般分别建立主键和外键,实际是否建立外键,根据对 数据完整性要求程度决定。为了提高性能,对于数据量较大的表要求对关联字 段建立索引。对有要求级联删除属性的外键,须指定on delete cascade.规则733对于字段有检查性约束,需指定check原则。规则7.3.4 NULL值对于字段能否null,应该在sql建表脚本中明确指明,不应使用缺省。 由于NULL值在参加任何运算中,结果均为NULL。所以在应用程序中必须利用 nvl()函数把可能为NULL值得字段或变量转换为非NULL的默认值。例如: nvl(price,0)o7.4 触发器触发器是一种特殊的存储过程,通过数据表的DML操作而触发执行,起作用是为确保 数据的完整性和一致性不被破坏而创建,实现数据的完整约束。 说明:触发器的before或after事务属性的选择时候,
限制150内