Oracle数据库命名编码规范xym.docx





《Oracle数据库命名编码规范xym.docx》由会员分享,可在线阅读,更多相关《Oracle数据库命名编码规范xym.docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、文件标识:QD-30-08密级:内部版本号:Ver1.0大庆金桥软件开发作业体系Oracle数据库命名编码规范oracle编码规范变更历史操作责任人日期版本变更内容创建李富华2010-04-20无创建文档编辑周强2010-04-21无修改文档大庆金桥信息技术工程有限公司 - 26 -目录1.文档介绍41.1文档目的41.2文档范围41.3定义41.4参考资料42.命名规范42.1一般规则42.2对象命名汇总表53.编码规范63.1一般性规定63.2CREATE语句73.3SELECT语句73.4INSERT语句83.5UPDATE语句83.6DELETE语句93.7游标语句93.8IF语句93
2、.9简单循环语句113.10FOR循环语句113.11WHILE循环语句113.12程序块规范123.13语法规范124.设计规范144.1一般表设计144.2特殊表设计原则154.3索引设计原则154.4完整性设计原则154.5触发器154.6视图设计154.7性能优化165.书写规范205.1缩进风格205.2空格及换行206.注释说明216.1一般性注释216.2函数文本注释217.异常规范227.1pl/sql异常规范227.2后台验证异常信息规范238.附录238.1附一 开发工具238.2附二 预定义异常248.3附三 范式258.3.1第一范式258.3.2第二范式258.3.3
3、第三范式258.3.4Boyce-Codd范式268.3.5第四范式268.3.6第五范式268.3.7反规范化261. 文档介绍1.1 文档目的本文档用于指导开发设计人员对Oracle数据库进行设计和编码。使用统一的命名和编码规范,使数据库对象命名及编码风格标准化,可增加程序的可读性,增强系统的可维护性,提高软件的质量。本文档仅仅针对Oracle数据库做的规范,对其他数据库不具有指导意义。1.2 文档范围本规范适用于公司范围内所有以Oracle作为后台数据库的应用系统和项目开发工作。对公司2010年以前用Oracle数据库开发的项目不做限制。1.3 定义无1.4 参考资料2. 命名规范2.1
4、 一般规则Oracle中的各种数据对象,包括实例、数据库、表空间、表、视图、存储过程、函数、解发器等的命名都要遵循Oracle的标准命名规则:1) 以字符打头,30个字符以内,名称超过长度的情况下适当采用缩写。2) 只能包含A-Z,a-z,0-9,_。3) 不能和同一个表空间下的其他对象重名。4) 不能是Oracle服务器的保留字。5) 数据对象尽量不要使用缩写;如要缩写最好使用容易看懂的缩写。2.2 对象命名汇总表对象对象名前缀范例描述表(table)t_t_user表名长度原则上不超过25个字符;表、视图、字段名中不出现复数,创建表必须要注释,comments必须要填写。视图(view)
5、v_v_user如果表名或字段名过长,则用表名或字段名的缩写。序列(sequence) s_s_user一般索引(normal index) i_i_user_usernamefield:字段名,遇上长字段名可采用缩写唯一索引(unique index) i_u_i_u_user_birthday主键(primary key) pk_pk_user_userid外键(foreign key) fk_fk_student_user_userid簇(cluster) cl_cl_user_student触发器(triger) tr_i _ tr_u _ tr_d _tr_iud_tr_i_ add
6、_user_birthdayi:insertu:updated:delete存储过程(procedure) p_i_p_u_p_d_p_s_p_i_user_birthday函数 (function) f_f_get_username_by_userid包及包体(package & package body) pkg_pkg_user_info类及类体 (type &type body) type_type_user_class同义词(synonym)inv_inv_user保存点(savepoint)save_save_表的保存点事务的保存点事务(transaction)trans_tran
7、s_insert_userinfo字段(field)create_date单词小写,中间用下划线隔开,字段必须要注释,comments必须要填写。游标(cursor)cur_ cur_user_info数据库链接(database link)link_若远程服务器名和数据库名一致,采用 link_用户及角色3. 编码规范3.1 一般性规定1、 sql语句中的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。【推荐】 2、 连接符OR、IN、AND、以及、=等前后各加上一个空格。当语句中出现括号时,括号的两边不留空格。3、 “不等于”统一使用。虽然 !=和是等价的,为了统一,不
8、等于一律使用表示。4、 对较为复杂的sql语句加上注释,说明算法、功能。5、 使用空行将逻辑相关的代码段之间分隔开。6、 程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为 2个。必须使用空格,不允许使用TAB键,以免用不同的编辑器阅读程序时,因 TAB键所设置的空格数目不同而造成程序布局不整齐。7、 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进。8、 where子句书写时,每个条件占一行,保留字或者连接符放到行的最后面,含有键的条件放到其他条件的前面。3.2 CREATE语句CREATE TABLE t_dksz(YHBS VARCHAR2(20) NOT NU
9、LL,ZHGX DATE,DKKHD VARCHAR2(24),CONSTRAINT pk_dksz_yhbs PRIMARY KEY (YHBS)3.3 SELECT语句查询语句采用以下原则编写(可最大化重用共享池中的SQL语句,提高应用程序性能):(1) 由SELECT开头,后跟一个显示查询结果的列表;【推荐】(2) 语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行;(3) 由FROM开头,后跟一个或多个获取数据所涉及的表,如果后面跟多个表,关键字右对齐;【推荐】(4) 由WHERE开头,后跟一个或多个确定所需值的条件,如果后面有多个条件,关键字右对齐;【推荐】(
10、5) 由GROUP BY开头,后跟一个或多个表列名,通过这些列以对查询结果进行汇总,关键字右对齐;【推荐】(6) 由ORDER BY开头,后跟一个或多个表列名,通过这些列以对查询结果进行排序,关键字右对齐;【推荐】(7) 当语句中出现括号时,括号的两边不留空格;(8) 在SQL语句使用运算符时,操作两边应各留一个空格;(9) 每个部分分行编写,将每一行的第一个关键字与第一行的SELECT尾部对齐;例如:SELECT col1, col2, col3FROM table1WHERE col1 col2GROUP BY col1, col2ORDER BY col1;SELECT col1, co
11、l2, col3, col4, col5, col6,col7, col8, col9, col10FROM sb_sbqkxx,sb_bb011101WHEREsb_sbqkxx.czwdbh = sb_bb.czwdbhANDsb_sbqkxx.swdjbh = avc_swdjbhANDsb_sbqkxx.sbsssq = avc_sbsssq;3.4 INSERT语句 关键字用大写,列名和表名采用小写;【推荐】 语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行; 当语句的同一部分要延续到下一行时,按下列格式排列: 当语句中出现括号时,括号的两边不留空格。格式如
12、下:【推荐】INSERT INTO (, , . , ,)VALUES(, , .,)例如:insert into sm_user(user_id, user_name, login_name)values( p_user_id, p_user_name, p_login_name)insert into sm_duty_bak(duty_id, duty_name, created_by, creation_date, last_updated_by,last_update_date, disable_date ) selectduty_id, duty_name, created_by,
13、creation_date, last_updated_by,last_update_date, disable_date from sm_dutywhere duty_id =: duty_id3.5 UPDATE语句 关键字右对齐;格式如下:【推荐】UPDATE SET = , = , = 3.6 DELETE语句格式如下:【推荐】DELETE FROM table1WHERE col1 = ?3.7 游标语句格式如下:【推荐】程序中使用显示游标。格式如下OPEN cur_name;LOOPFETCH cur_ into ;EXIT WHEN cur_name%notfound; END
14、LOOP;CLOSE cur_name;3.8 IF语句条件执行语句IFELSE按以下格式编写:【推荐】IF THEN ELSE (或ELSIF) THEN END IF; 在IFTHEN和ELSE(或ELSIF)及ELSETHEN和ENDIF间可包含一条或多条PL/SQL语句,而不需要加BEGIN和END IFELSEENDIF语句可以嵌套; 注意ELSIF的写法; if后的条件要用括号括起来,括号内每行最多两个条件。例如: if (v_count = 1 or v_count = 2 or v_count = 5 or v_count = 6 ) then select sysdate i
15、nto v_date from dual; end if; 减少控制语句的检查次数,如在 else(if.else)控制语句中,对最常用符合条件,尽量往前被检查到。例如:以下例如不符合规范(假设 v_count = 1条件大数情况会被满足) if (v_count = 0) then null; elsif (v_count = 1) then null; end if;应如下书写: if (v_count = 1) then null; elsif (v_count = 0) then null; end if; 尽量避免使用嵌套的 if语句,在这种情况应使用多个 if语句来判断其可能。例如
16、:以下例如不符合规范 if v_count =0 then if v_flag = 0 then null; else null; end if; else v_count =1 then if v_flag = 0 then null; else null; end if; end if;应如下书写: if (v_count = 0) and (v_flag = 0) then null; elsif (v_count = 0 ) and (v_flag = 1) then null; elsif (v_count = 1) and (v_flag = 0) then null; elsif
17、 (v_count = 1) and (v_flag = 1) then null; end if;3.9 简单循环语句LOOP EXIT WHEN END LOOP;3.10 FOR循环语句FOR 变量 IN 变量取值范围LOOP END LOOP;3.11 WHILE循环语句WHILE LOOP END LOOP;3.12 程序块规范在sql代码块中尽量使用begin.end 语句块,提高代码可读性。对于触发器、存储过程、函数等带名的程序块,要使用块结束标识。如CREATE OR REPLACE PROCEDURE p_get_userinfoBEGINEND p_get_userinfo
18、;/* 此处的过程名p_get_userinfo是可选的,规范要求写上,与块开始的CREATE相对应 */3.13 语法规范 避免隐式的数据类型转换。说明:在书写代码时,必须确定表的结构和表中各个字段的数据类型,特别是书写查询条件时的字段就更要注意了。例如:以下代码不符合规范, status_type是 number型数据. select wdj.wip_entity_id from wip.wip_discrete_jobs wdj where wdj.status = 3;应如下书写: select wdj.wip_entity_id from wip.wip_discrete_jobs
19、wdj where wdj.status = 3; 不要将空的变量值直接与比较运算符(符号)比较。如果变量可能为空,应使用 is null 或 is not null 或 nvl函数进行比较。例如:以下代码不符合规范 if v_user_name = null then dbms_output.put_line(user name is null); end if;应该如下书写: if v_user_name is null then dbms_output.put_line(user name is null); end if; 对于非常复杂的 sql(特别是多层嵌套,带子句或相关的查询 )
20、,应该先考虑是否设计不当引起的,对于复杂的一些 sql可以考虑使用程序实现,原则上遵循一句话只做一件事情。 尽可能地使用相关表字段的类型定义,形如 %type、%rowtype。 存储过程中变量的声明应集中在 as和 begin关键字之间,不允许在代码中随意定义变量,定义变量时,完成相同功能模块的变量应放在一起,与不同模块的变形量应空行隔开,增加代码的可读性。 order by 后面字段不唯一时分页会出现问题,分页时如果 order by 后面的字段不唯一,一定要让 order by 唯一,最佳方案是增加一 pk,如实在没办法则可以追加 rowid,order by后尽量避免使用 rowid。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 命名 编码 规范 xym

限制150内