ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:31.49KB ,
资源ID:6966735      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6966735.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Oracle数据库命名编码规范doc 27页.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Oracle数据库命名编码规范doc 27页.docx

1、Oracle数据库命名编码规范doc 27页Oracle数据库命名编码规范(doc 27页)文件标识:QD-30-08密级:内部版本号:Ver1.0大庆金桥软件开发作业体系Oracle数据库命名编码规范变更历史操作责任人日期版本变更内容创建李富华2010-04-20无创建文档编辑周强2010-04-21无修改文档1. 文档介绍 41.1 文档目的 41.2 文档范围 41.3 定义 41.4 参考资料 42. 命名规范 42.1 一般规则 42.2 对象命名汇总表 53. 编码规范 63.1 一般性规定 63.2 CREATE语句 73.3 SELECT语句 73.4 INSERT语句 83.

2、5 UPDATE语句 83.6 DELETE语句 93.7 游标语句 93.8 IF语句 93.9 简单循环语句 113.10 FOR循环语句 113.11 WHILE循环语句 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.1 pl/sql异

3、常规范 227.2 后台验证异常信息规范 238. 附录 238.1 附一 开发工具 238.2 附二 预定义异常 248.3 附三 范式 258.3.1 第一范式 258.3.2 第二范式 258.3.3 第三范式 258.3.4 Boyce-Codd范式 268.3.5 第四范式 268.3.6 第五范式 268.3.7 反规范化 261.文档介绍1.1文档目的本文档用于指导开发设计人员对Oracle数据库进行设计和编码。使用统一的命名和编码规范,使数据库对象命名及编码风格标准化,可增加程序的可读性,增强系统的可维护性,提高软件的质量。本文档仅仅针对Oracle数据库做的规范,对其他数据库

4、不具有指导意义。1.2文档范围本规范适用于公司范围内所有以Oracle作为后台数据库的应用系统和项目开发工作。对公司2010年以前用Oracle数据库开发的项目不做限制。1.3定义无1.4参考资料2.命名规范2.1一般规则Oracle中的各种数据对象,包括实例、数据库、表空间、表、视图、存储过程、函数、解发器等的命名都要遵循Oracle的标准命名规则:1)以字符打头,30个字符以内,名称超过长度的情况下适当采用缩写。2)只能包含A-Z,a-z,0-9,_。3)不能和同一个表空间下的其他对象重名。4)不能是Oracle服务器的保留字。5)数据对象尽量不要使用缩写;如要缩写最好使用容易看懂的缩写。

5、2.2对象命名汇总表对象对象名前缀范例描述表(table)t_t_user表名长度原则上不超过25个字符;表、视图、字段名中不出现复数,创建表必须要注释,comments必须要填写。视图(view) 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

6、_fk_student_user_userid簇(cluster) cl_cl_user_student触发器(triger) tr_i _ tr_u _ tr_d _tr_iud_tr_i_ add_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

7、_type_user_class同义词(synonym)inv_inv_user保存点(savepoint)save_save_表的保存点事务的保存点事务(transaction)trans_trans_insert_userinfo字段(field)create_date单词小写,中间用下划线隔开,字段必须要注释,comments必须要填写。游标(cursor)cur_ cur_user_info数据库链接(database link)link_若远程服务器名和数据库名一致,采用 link_用户及角色3.编码规范3.1一般性规定1、sql语句中的所有表名、字段名全部小写,系统保留字、内置函数

8、名、sql保留字大写。【推荐】 2、连接符OR、IN、AND、以及、=等前后各加上一个空格。当语句中出现括号时,括号的两边不留空格。3、“不等于”统一使用。虽然 !=和是等价的,为了统一,不等于一律使用表示。4、对较为复杂的sql语句加上注释,说明算法、功能。5、使用空行将逻辑相关的代码段之间分隔开。6、程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为 2个。必须使用空格,不允许使用TAB键,以免用不同的编辑器阅读程序时,因 TAB键所设置的空格数目不同而造成程序布局不整齐。7、一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进。8、where子句书写时,每个条件占一

9、行,保留字或者连接符放到行的最后面,含有键的条件放到其他条件的前面。3.2CREATE语句CREATE TABLE t_dksz(YHBS VARCHAR2(20) NOT NULL,ZHGX DATE,DKKHD VARCHAR2(24),CONSTRAINT pk_dksz_yhbs PRIMARY KEY (YHBS)3.3SELECT语句查询语句采用以下原则编写(可最大化重用共享池中的SQL语句,提高应用程序性能):(1)由SELECT开头,后跟一个显示查询结果的列表;【推荐】(2)语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行;(3)由FROM开头,后跟一

10、个或多个获取数据所涉及的表,如果后面跟多个表,关键字右对齐;【推荐】(4)由WHERE开头,后跟一个或多个确定所需值的条件,如果后面有多个条件,关键字右对齐;【推荐】(5)由GROUP BY开头,后跟一个或多个表列名,通过这些列以对查询结果进行汇总,关键字右对齐;【推荐】(6)由ORDER BY开头,后跟一个或多个表列名,通过这些列以对查询结果进行排序,关键字右对齐;【推荐】(7)当语句中出现括号时,括号的两边不留空格;(8)在SQL语句使用运算符时,操作两边应各留一个空格;(9)每个部分分行编写,将每一行的第一个关键字与第一行的SELECT尾部对齐;例如:SELECT col1, col2,

11、 col3FROM table1WHERE col1 col2GROUP BY col1, col2ORDER BY col1;SELECT col1, col2, col3, col4, col5, col6,col7, col8, col9, col10FROM sb_sbqkxx,sb_bb011101WHERE sb_sbqkxx.czwdbh = sb_bb.czwdbhAND sb_sbqkxx.swdjbh = avc_swdjbhAND sb_sbqkxx.sbsssq = avc_sbsssq;3.4INSERT语句关键字用大写,列名和表名采用小写;【推荐】语句中嵌入逗号时,

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_updat

13、ed_by,last_update_date, disable_date ) selectduty_id, duty_name, created_by, creation_date, last_updated_by,last_update_date, disable_date from sm_dutywhere duty_id =: duty_id3.5UPDATE语句关键字右对齐;格式如下:【推荐】UPDATE SET = , = , = 3.6DELETE语句格式如下:【推荐】DELETE FROM table1WHERE col1 = ?3.7游标语句格式如下:【推荐】程序中使用显示游标

14、。格式如下OPEN cur_name;LOOPFETCH cur_ into ;EXIT WHEN cur_name%notfound; END LOOP;CLOSE cur_name;3.8IF语句条件执行语句IFELSE按以下格式编写:【推荐】IF THEN ELSE (或ELSIF) THEN END IF;在IFTHEN和ELSE(或ELSIF)及ELSETHEN和ENDIF间可包含一条或多条PL/SQL语句,而不需要加BEGIN和ENDIFELSEENDIF语句可以嵌套;注意ELSIF的写法;if后的条件要用括号括起来,括号内每行最多两个条件。例如: if (v_count = 1

15、or v_count = 2 or v_count = 5 or v_count = 6 ) then select sysdate into 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_co

16、unt = 0) then null; end if;尽量避免使用嵌套的 if语句,在这种情况应使用多个 if语句来判断其可能。例如:以下例如不符合规范 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

17、) then null; elsif (v_count = 1) and (v_flag = 0) then null; elsif (v_count = 1) and (v_flag = 1) then null; end if;3.9简单循环语句LOOP EXIT WHEN END LOOP;3.10FOR循环语句FOR 变量 IN 变量取值范围LOOP END LOOP;3.11WHILE循环语句WHILE LOOP END LOOP;3.12程序块规范在sql代码块中尽量使用begin.end 语句块,提高代码可读性。对于触发器、存储过程、函数等带名的程序块,要使用块结束标识。如CRE

18、ATE OR REPLACE PROCEDURE p_get_userinfoBEGINEND p_get_userinfo;/* 此处的过程名p_get_userinfo是可选的,规范要求写上,与块开始的CREATE相对应 */3.13语法规范避免隐式的数据类型转换。说明:在书写代码时,必须确定表的结构和表中各个字段的数据类型,特别是书写查询条件时的字段就更要注意了。例如:以下代码不符合规范, status_type是 number型数据. select wdj.wip_entity_id from wip.wip_discrete_jobs wdj where wdj.status = 3

19、;应如下书写: select wdj.wip_entity_id from wip.wip_discrete_jobs 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(

20、user name is null); end if;对于非常复杂的 sql(特别是多层嵌套,带子句或相关的查询 ),应该先考虑是否设计不当引起的,对于复杂的一些 sql可以考虑使用程序实现,原则上遵循一句话只做一件事情。尽可能地使用相关表字段的类型定义,形如 %type、%rowtype。存储过程中变量的声明应集中在 as和 begin关键字之间,不允许在代码中随意定义变量,定义变量时,完成相同功能模块的变量应放在一起,与不同模块的变形量应空行隔开,增加代码的可读性。order by 后面字段不唯一时分页会出现问题,分页时如果 order by 后面的字段不唯一,一定要让 order by

21、唯一,最佳方案是增加一 pk,如实在没办法则可以追加 rowid,order by后尽量避免使用 rowid。使用 varchar2代替 varchar类型。当存储过程有多个分支返回时,若有事务,需确保各个分支都结束了事务。in、out参数应按类别分开书写,不要交叉,对于 out参数,特别是 nest table、record,尽量都带上 nocopy,提高程序的运行效率。聚集函数 max、min、sum在没有记录得符合查询条件的情况下返回 null,不会产生 no_data_found异常。原则上不要使用动态 sql,如果非得使用运态 sql,须绑定变量。【推荐】尽量不要使用子函数方式实现存

22、储过程,应分别定义。【推荐】代码中不建议使用 goto语句。【推荐】确保所的变量和参数都使用到。【推荐】确保变量和参数在类型和长度与表数据列类型和长度相匹配。如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。例如:如 fnd_users表 user_name字符宽为 50,当用户名大于 10时会报错。 declare v_user_name varchar2(10); begin select fu.user_name into v_user_name from fnd_user fu where fu.user_id = p_user_id; end; 当一个 PL/SQ

23、L或 SQL语句中涉及到多个表时,始终使用别名来限定字段名,这使其它人阅读起来更方便,避免了含议模糊的引用,其中能够别名中清晰地判断出表名。别名命名时,尽量避逸使用无意义的代号 a、 b、c,而应该有意义 (如表 system_items_b对应别名为 msi,po_headers_all别名对应为 pha)。例如:以下编码不符合规范: selectwip_entity_name,a.wip_entity_id,a.date_released from wip.wip_entities b, wip.wip_discrete_jobs a where b.wip_entity_id = a.w

24、ip_entity_id and a.status_type = 3 and a.date_released trunc(sysdate)应如下书写: select we.wip_entity_name, wdj.wip_entity_id, wdj.date_released from wip.wip_entities we, wip.wip_discrete_jobs wdj where we.wip_entity_id = wdj.wip_entity_id and wdj.status_type = 3 and wdj.date_released trunc(sysdate)4.设计规

25、范4.1一般表设计表空间设计,原则上表空间名与 schema名一致,其索引所在空间为 schema name + index。如: schema为 INV,则默认的表空间应该为 INV,所对应的索引空间为 INVINDEXtablespace每个表在创建时候,必须指定所在的表空间,不要采用默认表空间,以防止表建立在 system空间上,导致性能问题。对于事务比较繁忙的数据表,必须存放在在该表专用空间中。根据性能需要,可以适当可曾加冗余;4.2特殊表设计原则分区表对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表按某些字段进行增长,则采用按字段值范围攻进行分区;如果表按某个

26、字段的几个关键值进行分布,则采用列表分区;对于静态表,则采用 hash分区或列表分区;在范围分区中,如果数据按某关键字段均衡分由,则采用子分区的复合分区法。在分区表中不建议使用全局索引,因为 trunc分区时会导致全局索引失效,造成难以维护。 4.3索引设计原则每个索引在创建时,必须指定表空间,不要采用默认表空间,以防止索引建立在 system空间和非索引专用空间,以减少 IO冲突,提高性能。 4.4完整性设计原则主键约束原则上所有的数据表都要有主键。对于数据量比较大的表,要求指定索引字段。外键关联对于关联两个表字段,一般应该分别建立主键、外键。实际是否建立外键,根据对数据完整性的要求决定。为

27、了提高性能,对于数据量较大的表要求对外键建立索引。对于有要求级联删除属性的外键,必须指定 on delete cascade.Null值对于字段能否为 null,应该在 sql建表脚本中明确指定,不应该使用缺省。由于 null值在参加任何计算时,结果均为 null,所以在程序中必须用 nvl()函数把可能为 null值的字段或变量转换非 null的默认值。Check条件对于字段有检查性约束,需指定 check原则。 4.5触发器触发器是一种特殊的存储过程,通过数据表的 DML操作而触发执行,其作用为确保数据的完整性和一致性不被破坏而创建,实现数据的完整性约束。说明:触发器的 before或 a

28、fter事务属性的选择时候,对表操作的事务属性必须与应用程序保持一致,以避免死锁发生,在大型导入表中,尽量避免使用触发器。在系统中不要使用过多的触发器。 4.6视图设计尽量使用简单的视图,避免使用复杂的视图。简单视图:数据来自单个表,且无分组 (distinct/group by)、无函数。复杂视图:数据来自多个表,或有分组、有函数。4.7性能优化避名频繁 commit,尤其是把 commit写在循环体中每次循环都进行commit。使用绑定变量,避免常量的直接引用。例如:以下书写不符合本规范 . insert into sm_users(user_id,user_name,created_by,creation_date) values (1,Tang,-1,sysd

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1