当前位置:文档之家› Oracle数据库开发规范

Oracle数据库开发规范

项目编号:×××xxxOracle数据库开发规范Oracle DB Development Standardization <Language:Version><部门名称>**年**月**日文档信息:文档名称:文档编号:文档版本日期:起草人:起草日期:复审人:复审日期:版本历史:版本日期作者更改参考说明审批信息:签字/日期审核审批目录1 概述 41.1 编写目的 41.2 文档约定 41.3 预期的读者和阅读建议 41.4 参考文献 52 数据库对象命名 62.1 命名总体原则 62.2 表名 62.3 视图 62.4 同义词 62.5 序列72.6 索引72.7 存储过程72.8 存储函数82.9 存储程序包82.10 触发器82.11 字段82.12 其他93 设计规范93.1 范围93.2 表空间93.3 字符集103.4 主外键约束103.5 分区表103.6 RAC下的序列设计103.7 字段103.8 表结构设计113.9 索引设计113.10 临时表114 SQL编写规范 124.1 书写规范124.2 SQL语句的索引使用134.3 SQL语句降低系统负荷 155 PL/SQL编程规范185.1 书写规范185.2 常用数据库操作语句编码规范195.3 常用过程控制结构205.4 Condition 215.5 Cursor 225.6 变量定义与赋值225.7 过程与函数调用235.8 例外处理(Exception) 235.9 例外处理的错误消息245.10 注释(Comment) 255.11 应用调试控制275.12 并发控制275.13 代码测试、维护291 概述1.1 编写目的为规范软件开发人员的Oracle数据库开发提供参考依据和统一标准。

1.2 文档约定说明本文档中所用到的专用术语定义或解释,缩略词定义。

1.3 预期的读者和阅读建议本文档适用于所有开发员。

1.4 参考文献列出有关的参考文件,如:a.属于本项目的其他已发表文件;b.本文件中各处引用的文档资料。

列出这些文件的标题、作者,说明能够得到这些文件资料的来源。

2 数据库对象命名2.1 命名总体原则本规范所涉及数据库对象主要是指表、视图、同义词、索引、序列、存储过程、函数、触发器等;命名应使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割;避免使用Oracle的保留字或关键字,如LEVEL和TYPE;各表之间相关列名尽量同名;除数据库模式对象名称长度为1-8个字符,其余对象名称均要求不超过30个字符;命名只能使用大写英文字母,数字和下划线,且以英文字母开头。

2.2 表名规则:XXX_MMM_DDDD说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为表的简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音。

示例:PO_HEADERS_ALL2.3 视图规则:XXX_MMM_DDDD_V说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为视图简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音;V表示视图,如有多个功能类似的视图,名称以V,V1,V2...Vn区分。

示例:PO_HEADER_RELEASE_V2.4 同义词规则:与引用的原对象同名示例:PO_HEADERS_ALL2.5 序列规则:XXX_MMM_DDDD_S说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为序列简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音;S表示序列。

示例:PO_HEADERS_S2.6 索引规则:XXX_MMM_DDDD_Tn说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为索引简称含义,要求同表名,如总长度超过限制,可适当缩写;T有三种值:U表示唯一性索引,N表示非唯一性索引,B表示位图索引;n表示序号,用数字构成。

示例:PO_HEADERS_ALL_U12.7 存储过程规则:XXX_MMM_DDDD_P说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为存储过程简称含义,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;P表示存储过程。

示例:PO_HEADERS_P2.8 存储函数规则:XXX_MMM_DDDD_F说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为存储函数简称含义,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;F表示存储函数。

示例:PO_HEADERS_F2.9 存储程序包规则:XXX_MMM_DDDD_PKG说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为存储程序包简称,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;PKG表示存储程序包。

示例:PO_HEADERS_PKG2.10 触发器规则:XXX_MMM_DDDD_Tn说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为触发器简称含义,要求同表名,如总长度超过限制,可适当缩写;T表示触发器;n表示序号,用数字构成。

示例:PO_HEADERS_T12.11 字段一般性字段:使用英文单词、词组或其有意义的缩写表示,可包括下划线,不得使用汉语拼音,多个类似含义的字段,可在最后加数字序号;特殊字段:(1)代表主键的字段:表名或缩写+"_ID",如PO_HEADER_ID(2)代表外键的字段:要求与相关表对应字段相同(3)记录跟踪字段(代表记录创建人、创建时间、最后修改人、最后修改时间):字段名类型NULL?说明CREATED_BYNUMBERNOT NULL这些字段仅用于跟踪数据的变化,而不能用于其他用途。

CREATION_DATEDATENOT NULLLAST_UPDATED_BYNUMBERNOT NULLLAST_UPDATE_DATEDATENOT NULL(4)扩展字段(预留未来使用):ATTRIBUTE+n,n代表序号,如ATTRIBUTE1,类型统一为VARCHAR2(150);对应扩展属性分类字段,命名为ATTRIBUTE_CATEGORY,类型为VARCHAR2(30)。

2.12 其他其他对象参照上述原则和对象命名。

3 设计规范3.1 范围设计规范主要是对与开发关系密切的数据库整体设计部分进行说明,以便于DBA更有效的管理和维护数据库。

主要包括表空间、字符集、主外键约束、分区表、字段类型等内容。

3.2 表空间一致性:无论是基于商品化软件的开发,还是独立的客制化开发系统,对于客制化对象,每个子系统或模块都使用统一的一组表空间(数据表空间和索引表空间各一个,且数据表空间为默认表空间);独立性:数据和索引独立存储,表空间由DBA统一管理和维护,任何新建表均应使用默认的数据表空间,新建索引均需使用指定的索引表空间;新建表和索引时,原则上不允许指定除表空间以外的任何参数,特殊情况必须指定有别于表空间的默认参数时,需经过单独评审。

示例:CREATE TABLE TABLE_NAME (FIELD1...) TABLESPACE XXX;例外情况:当使用分区表时,可根据情况建立独立的表空间。

3.3 字符集应用系统数据库应使用UTF8字符集,应用程序开发本身也需要支持UTF8字符集录入和查询。

注意事项:UTF8字符集默认排序规则非中文拼音,如有需要应在代码级或数据库会话级做特殊处理。

3.4 主外键约束数据库表对象原则上禁止使用主外键约束,主外键所承担的主要作用应通过其他方式实现,如主子表数据完整性由应用层实现,索引功能通过建立单独索引实现。

3.5 分区表为了降低数据库的维护复杂度,非必要情况下,不使用分区表;或经常需要跨分区查询数据,此时也不应使用分区表;特殊应用场景确有必要时,可选择范围分区表、列表分区表、哈希分区表、组合分区表几种方式,并根据分区类型和分区依据,调整索引,使相关数据查询尽量在一个分区中完成。

3.6 RAC下的序列设计当数据库部署架构为RAC时,原则上禁止使用序列生成依赖其大小排序的单据号码,如确有必要,则序列必须设计为禁用缓存模式。

3.7 字段数值类型使用NUMBER,需要存储整型数值时,可指定小数位精度为0;枚举类型优先使用数值型替代字符型,且需要备注说明枚举类型的各个不同取值的含义;ID结尾的字段为应为数值型,CODE结尾的字段可为字符型或数值型;用CHAR(1)表示布尔值的取大写:"Y","N",或改为数值型,用0和1表示;原则上使用VARCHAR2代替CHAR类型,以节省存储空间,但对性能要求太别高的应用场景例外;日期时间型应使用DATE,禁止使用字符型;使用CLOB代替LONG,BLOB代替LONG RAW;一般性字段应有含义注释,对于可以有缺省值的字段,应设为非空类型,并给出缺省值。

3.8 表结构设计原则上表结构设计应符合第三范式,减少冗余字段,但在不影响数据一致性的情况下,为了提高性能或开发实现的方便性,可以适当增加冗余字段。

创建表时,应添加相关注释,简要说明主要用途。

表与表之间的关系应提供E-R图。

3.9 索引设计对代表唯一记录的字段或字段组合应建立唯一索引,对于查询中需要作为查询条件的字段,可以考虑建立非唯一索引,对于作为查询条件的枚举型字段,可考虑建立位图索引。

建立复合索引时,应根据条件字段的查询频率决定索引字段顺序。

开发过程中新编写的SQL,应对照查询条件检查有无相关索引,除需要特别指定全表扫描的情况外,原则上应建立相关索引。

3.10 临时表临时表指创建表时指定临时表参数的数据表,并非指表名中含有TEMP字符的表。

尽量避免在临时表上使用DISTINCT、ORDER BY、GROUP BY、HAVING、JOIN,以减轻临时表负担,同时应避免频繁创建和删除临时表,减少系统表资源的消耗。

在新建临时表时,如果一次性插入数据量很大,应使用SELECT INTO代替CREATE TABLE,避免数据库LOG,提高速度;如果数据量不大,为了缓和系统表的资源,可先CREATE TABLE,然后INSERT。

相关主题