剑破冰山Oracle开发艺术-数据库编程规范.pdf
《剑破冰山Oracle开发艺术-数据库编程规范.pdf》由会员分享,可在线阅读,更多相关《剑破冰山Oracle开发艺术-数据库编程规范.pdf(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 第 1 章 大话数据库编程规范 目前在软件圈内有这么一个现象,就是 DBA 不太懂得写 PL/SQL,而开发人员写得又是五花八门,而且效率不高。如此一来,造成诸多弊端:可读性差。读别人写的一个程序花费的时间,比自己写一个程序花费的时间还要长;不但别人看不懂,时间久了连自己也看不懂了。可维护性差。程序越写越长,越改越烂。可移植性差。今天用 Oracle 写一套,明天换成 SQL Server 的时候再写一套,众多的数据库开发人员在程序的苦海中重复着低级劳动。效率和性能差。一个存储过程或 SQL 执行效率简直可以让你感觉到对时间的绝望,你很快就理解什么是相对论了。1.1.1 1 编程规范概述 事
2、实上为了统一在软件开发过程中关于数据库设计时的命名规范和编程规范,正规的 IT 公司都会制定一些关于数据库对象的命名和编程规范。否则,你写你的我写我的,各自为战不兼容,彼此看不懂,甚至到最后连自己都弄不明白了,这样的经历相信每个人都曾经遇到过。第 章 1 大话数据库编程规范 剑破冰山 Oracle 开发艺术 2 剑破冰山Oracle 开发艺术 如下面这段简单的代码,你看得明白吗?就算暂时明白,过个一年半载你还明白吗?就算你记忆超群,想必也会忘记,不是吗?A:=1;b:=2;SeLeCT username from EmPLOyee where id=a aNd Type=b;如果你改为下面这样
3、的写法,相信稍微懂点数据库的人都应该看得明白。vID:=1;-A 为 ID vType=2;-B 为类型 SELECT username FROM employee WHERE id=vID AND type=vType;1.1.2 2 书写规范 丑陋的书写规范不仅可读性较差,而且给人以敬而远之的感觉,就算你是大侠也不行;而良好的书写规范则给人以享受和艺术的体验。1.2.1 大小写风格 规则 1.2.1.1 所有数据库关键字和保留字均使用大写;关于字段、变量的大小写风格在 1.4 节详细介绍。1.2.2 缩进风格 规则 1.2.2.1 程序块严格采用缩进风格书写,保证代码清晰易读,风格一致,缩
4、进格数统一为 2/4 个。必须使用空格,不允许使用【Tab】键。以免在用不同的编辑器阅读程序时,因【Tab】键所设置的空格数目不同而造成程序布局不整齐。规则 1.2.2.2 当同一条语句需要占用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。IF flag=1 THEN SELECT username -同上一行相比缩进 2 个空格 INTO vuserinfo -INTO 与 SELECT 进行右对齐 FROM userinfo -FROM 与 SELECT 进行右对齐 WHERE userid=:iuserid;-WHERE 与 SELECT 进行右对齐 END IF;第 1 章
5、大话数据库编程规范 3 1.2.3 空格及换行 规则 1.2.3.1 不允许把多个语句写在一行中,即一行只写一条语句。规则 1.2.3.2 避免将复杂的 SQL 语句写到同一行,建议要在关键字和谓词处换行。规则 1.2.3.3 相对独立的程序块之间必须加空行。BEGIN、END 独立成行。规则 1.2.3.4 太长的表达式应在低优先级操作符处换行,操作符或关键字放在新行之首。划分出新行应当适当地缩进,使排列整齐,语句可读。当不同类型的操作符混合使用时,建议使用括号进行隔离,以使代码清晰。规则 1.2.3.5 减少控制语句的检查次数,例如,在 IFELSE 控制语句中,应将最常用的符合条件前置以
6、被检查到。DECLARE -定义局部变量 vFlag VARCHAR2(10);-判断标志 BEGIN IF(a=b AND a=c AND a=d)OR -在 OR 处断行,可使得逻辑更为清晰 (a=e AND e=f)THEN-Process something IF vFlag=1 THEN -vFlag=1 为经常出现的条件,可有效减少判断检查次数-Process something ELSIF vFlag=2 THEN -vFlag=2 为次之出现的条件-Process something ELSE -Process something END IF;4 剑破冰山Oracle 开发艺
7、术 1.2.4 其他 规则 1.2.4.1 避免使用 SELECT*语句;不要用*来代替所有字段,应给出字段列表,以避免在表结构发生变化时应用程序出现无法识别的情况。规则 1.2.4.2 INSERT 语句必须给出字段列表,以避免在表结构发生变化时发生编译错误。规则 1.2.4.3 当一个 PL/SQL 或 SQL 语句中涉及多个表时,始终使用别名来限定表名和字段名,这使其他人阅读起来更方便,避免了含义模糊的引用,并能够在别名中清晰地判断出表名和相关字段名。规则 1.2.4.4 确保变量和参数在类型和长度上与表数据列相匹配。如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。
8、DECLARE -定义相关表字段变量 vDeptNo salary.Deptno%type;-not VARCHAR2(10),以适应变化 vEmployeeNo salary.EmployeeNo%type;-not VARCHAR2(10),以适应变化 vSalary salary.Salary%type;-not NUMBER,以适应变化 BEGIN -Process something END;1.1.3 3 命名规范 一千个读者就有一千个哈姆雷特,对于命名规范来说,想做到完全统一的确是不可能的任务。命名规范更多的是个人层面的爱好,就算有命名规范,也不过是体现制定规范的相关人的爱好而已
9、。即使无法完全做到一致,但是我们仍然要尽量去遵守,必要的时候需要通过代码检查和专家评审来进行约束,因为一个不成熟的规范总会胜过没有规范。1.3.1 表和字段命名规范 在此仅提供几种常见的命名方法(表和字段的命名方式雷同)。第 1 章 大话数据库编程规范 5 以用户权限字段/表为例,如表 1-1 所示。表 1-1 命名规范表 UserPrivilege 适合那些英文比较好,并且喜欢抑扬顿挫和有艺术美感的人 userprivilege 适合那些英文好,且比较严谨的人,毕竟全部小写很容易与数据库关键字区别 tbl_user_privilege 适合那些做开发的人,开发的人会习惯性地给变量加前缀(这里
10、指表的命名,字段一般很少加前缀)yhqx 热爱中文的人,前提是恐怕你得对这些缩写先做好相关备注,等大家习惯了才行 实际上这几种命名规范各有千秋,很难去指责或否定哪种不好,完全取决于整个公司多数人的习惯,记住没有十全十美的命名规范,只有绝大多数人心甘情愿地去遵从了,那就是好的命名规范。就笔者个人而言,我更偏向于第一种命名习惯。规则 1.3.1.1 不建议使用数据库关键字和保留字(不建议并不意味着不能使用),只是为了避免不必要的冲突和麻烦。例如,name,id,level,remark,description 等。如果有兴趣,则大家可以参考 SELECT*FROM v$reserved_words
11、 WHERE reserved=Y。实际上 Oracle 不建议大家使用 v$reserved_words 表中所有的关键字,因为这些关键字太多了;reserved=Y的关键字则是被完全禁止的。规则 1.3.1.2 严禁使用带空格的名称来给字段和表命名;在产生数据库脚本并重新加载的时候可能会出现错误而被迫终止。1.3.2 其他对象命名 用户自定义的数据库对象名包括表、视图、主外键、索引、触发器、函数、存储过程、序列、同义词、数据库链接、包和包体等。规则 1.3.2.1 其他对象的命名也与表和字段的命名规则类似,风格保持一致即可。规则 1.3.2.2 除数据库名称长度为 18 个字符外,其余为
12、130 个字符,database link 名称也不要超过6 剑破冰山Oracle 开发艺术 30 个字符。命名只能使用英文字母、数字和下画线。规则 1.3.2.3 除表外,其他各种对象的命名最好用不同的前缀加以区别。采用前缀的方式来命名对象则很容易通过排序对对象进行区别。如在命名规范中各组成部分以“_”分割,则前缀建议也以“_”分割;反之则可加可不加,如表 1-2 所示。表 1-2 其他对象命名规范表 对象名 前缀 范例 表(table)tbl_/t_(或不加前缀)userinfo/t_user_info/tbl_user_info 视图(view)v_/v v_user_info/vuse
13、rinfo 序列(sequence)seq_ seq_user_info 簇(cluster)c_ c_user_info 触发器(trigger)trg_ trg_user_info 存储过程(procedure)sp_/p_ sp_user_info/p_user_info 函数(function)f_/fn_ fn_user_info/f_user_info 物化视图(materialized view)mv_ mv_user_info 包和包体(package&package body)pkg_ pkg_user_info 类和类体(type&type body)typ_ typ_us
14、er_info 主键(primary key)pk_ pk_user_info 外键(foreign key)fk_ fk_user_info_fieldname 唯一索引(unique index)uk_ uk_user_info_fieldname 普通索引(normal index)idx_ idx_user_info_fieldname 位图索引(bitmap index)bk_ bk_user_info_fieldname 同义词(synonym)依据所分配的表所属模块/模式 数据库链接(database link)无特殊要求 第 1 章 大话数据库编程规范 7 1.1.4 4 变量
15、命名 规则 1.4.1 所有 PL/SQL 中的变量与对象命名规则相似,如表 1-3 所示。表 1-3 变量命名规范表 变量类型 前缀 范例 输入变量 i_/i i_user_id/iuserid 输出变量 o_/o o_user_name/ousername 输出输入变量 io_/io io_user_name/iousername 普通变量 v_/v v_user_id/vuserid 全局变量 gv_/gv gv_user_id/gvuserid 常量 大写 PI 游标 cur_ cur_userinfo 用户自定义类型 type_ type_user_info 保存点(save poi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 冰山 Oracle 开发 艺术 数据库 编程 规范
限制150内