一、背景及目的
随着业务系统的越来越多、复杂程度越来越高,DB层面浮现出若干问题:
1、DB对象命名混乱,具有很大随意性、
2、SQL脚本编写混乱、且没有评审、
3、索引创建混乱,造成性能问题、
4、SQL开发质量欠佳,造成性能问题、
5、DB用户权限授予混乱,隐含DB操作风险、
6、SQL移交未统一,造成DB风险。
鉴于以上情况,为了统一对象命名、提高数据库效率、实现标准化开发及便于数据库的统一管理、监控、降低DB风险,特制定本规范,旨在今后的工作中,对相干人员的一系列操作建立一个规范文本,并希望能够照此严格执行。
二、术语和缩略语
序号 | 术语/缩略语 | 全称和说明 |
1 | 表(TABLE) | 数据库中用于存储数据的基本存储单位 |
2 | 派生授权 | 给用户授权时,使用with grant option,使得被授权的用户可以将被授权的对象授权给其它用户 |
3 | 索引(INDEX) | 索引是一个物理的数据库结构。它依赖于表,是关于表中特定主题的信息位置关键字的列表,并提供了快速访问这些信息的方法。 |
4 | 区分度 | 索引列里存储不同值的数目和记录数的比值。 |
5 | 同义词(SYNONYM) | 同义词是指向其它数据库对象的数据库指针。
|
6 | 公共同义词 (PUBLIC SYNONYM) | 可被所有的数据库用户访问的同义词。 |
7 | 私有同义词 (PRIVATE SYNONYM) | 只能被其属主用户或其授权用户访问的同义词。 |
8 | SEQUENCE(序列) | sequence(序列)用来产生序列号。 |
9 | RAC模式数据库(集群) | 多个instance(又称实例或节点)对应一个oracle database即称为rac模式数据库。 |
10 | exclusive模式数据库 | 只有一个instance(又称实例或节点)对应一个oracle database即称为exclusive模式数据库。 |
14 | DB审计系统 |
三、对象命名规范概览
序号 | 对象名 | 命名规范 | 说明 |
1 | 数据库 (Database) | 开发测试阶段: 阶段简称+”_”+序号+”_”+业务简称 生产阶段: 业务简称(代表生产系统含义英文缩写的SID) | 阶段简称: D:开发阶段 T:测试阶段 |
2 | 表空间 (Tablespace) | ”TBS_”+模块简称+”_”+2位序号 | |
3 | 角色(Role) | ”R_”+用户名+”_”+操作类型 | 操作类型: DML、QRY |
4 | 用户(User) | 模块简称+用户类别 | 用户类别: OPR、DATA |
5 | 表(Table) | 表 模块简称+”_”+业务描述 表约束: 主键约束:PK_+表名_+字段名; 外键约束:FK_+表名_+字段名; 唯一约束:UN_+表名_+字段名; 非空约束:NN_+表名_+字段名; 值检查约束:CK_+表名_+字段名; | |
6 | 分区表 (Partition Table) | 分区表的表名与普通表一致 分区索引的命名与普通索引一致 表分区的命名格式为:”表名_”+分区特征+”_pt” 索引分区的命名格式为:”索引名_”+分区特征+”_pi” | |
7 | 索引(Index) | ”IDX_”+表名+”_”+字段名或字段名组合 | |
8 | 同义词 (Synonym) | 若系统同义词无冲突: 则同义词名与其指向的对象同名 若有冲突: 则采用 数据库用户名+”_”+表名 | |
9 | 序列号 (Sequence) | 表名+”_”+字段名+ “_SEQ” | |
10 | 视图(View) | 模块简称+”_”+视图描述+”_V” | |
11 | 物化视图(MV) | 模块简称+”_”+物化视图描述+ “_MV” | |
12 | 存储过程 (Procedure) | 模块简称+”_”+过程描述+“_PRC” | |
13 | 触发器(Trigger) | 模块简称+”_”+触发器描述+ “_TRI” | |
14 | 包(Package) | 模块简称+”_”+包描述+“_PKG” | |
15 | 函数(Function) | 模块简称+”_”+函数功能描述+ “_FUN” | |
16 | 数据库链接 (DB Link) | 对于公共链接: 远程库名+”_”+远程用户名+”_DBLINK” 对于私有链接 模块简称+”_”+远程库名+”_”+远程用户名+”_DBLINK” |
三、通用规则
序号 | 规则项 | 详细描述 |
1 | 对象名长度限制 | ORACLE数据库内部有规定,所有对象的命名长度,不能超过30个字符;如果长度超过了30个字符,则对象描述部分采用缩写的方式,单词缩写必须能够完整表达原有英文全称的含义。 缩写原则: ·包含四个或四个以下字符的单词,可以不必缩写; ·所有的缩写必须唯一,不能有多义; ·一个单词的缩写必须以该单词的首字母开头; ·缩写中不能包含数字或特殊字符; ·缩写应当从命名右侧的单词开始,自右向左地进行缩写,直到满足所需的长度为止。 缩写方法:(按照下述步骤逐一来缩写) 1. 查看公司现有的单词缩写列表(见下),看看是否已存在该单词缩写; 2. 不管该单词的首字母是元音还是辅音,都以它作为缩写的首字母; 3. 如果该单词中有两个连续的相同辅音字母,则只取其一; 4. 如果该单词以两个连续的相同元音字母结尾,则这两个元音字母都保留; 5. 然后去掉单词中剩下的其他元音字母; 6. 如果单词中包含“CK”这样的字母组合,则去掉字母C,保留字母K。 举例1:单词Doorbell 1. 在现有单词缩写列表中没有Doorbell的缩写; 2. 首字母d需要保留,并作为缩写的首字母; 3. 两个连续的辅音字母l,去掉其中一个,只保留一个。得到doorbel; 4. 这个单词没有以连续的元音字母结尾; 5. 其他的元音字母都去掉。得到drbl; 6. 这个单词没有包含“ck”字母组合。 最终Doorbell这个单词的缩写就是drbl。 举例2:单词Entitlement 1. 在现有单词缩写列表中没有Entitlement的缩写; 2. 首字母e保留(虽然它是一个元音字母); 3. 这个单词没有连续的两个辅音字母; 4. 这个单词没有以连续的元音字母结尾; 5. 其他的元音字母都去掉。得到enttlmnt。 6. 这个而单词没有包含“ck”字母组合。 最终Entitlement这个单词的缩写就是enttlmnt。 举例3:单词Grantee 1. 在现有单词缩写列表中没有Grantee的缩写; 2. 首字母g保留; 3. 这个单词没有两个连续的辅音字母; 4. 结尾的两个连续的相同元音字母ee都保留。得到grantee; 5. 去掉剩下的元音字母。得到grntee; 6. 这个单词没有包含“ck”字母组合。 最终Grantee这个单词的缩写就是grntee。 |
2 | 对象名大小写 | 对象命名都采用大写方式 |
3 | 下划线为分隔符 | 所有的命名中,单词之间必须以下划线作为分隔符,如customer_name |
4 | 英文单词组成 | 命名以英文单词组成,不允许使用汉语拼音 |
5 | 不允许使用关键字 | 命名中不允许出现ORACLE数据库中的关键字(Reserved Word),如:user、remark等单词不允许使用。Oracle关键字可从v$reserved_words中查询。 |
6 | 命名禁止使用双引号 | 为避免出现大小写敏感问题,禁止使用双引号将对象引用,如,不允许定义这样的带双引号的字段名:”user” |
四、命名约束
1.数据库的命名格式 - 开发测试阶段:阶段简称+”_”+序号+”_”+业务简称;生产阶段:业务简称(代表生产系统含义英文缩写SID)其中'
是否正确 | 举例 | 说明 |
错误 | TEMPLATEDB、ORCL、TEST | |
正确 | D0DPM:DPM业务开发阶段数据库 T0DPM:DPM业务测试阶段数据库 DPM:DPM业务生产阶段数据库 |
2.表空间
规范2: 表空间的命名格式为:”TBS_”+模块全称+”_”+2位序号
建议1: 创建表空间时指定存储选项
如:create tablespace的时候建议指定extent management local autoallocate 和segment space management auto。
是否正确 | 举例 | 说明 |
错误 | TEST、ROLE1 | |
正确 | R_SECURITYDATA_DML:数据用户DML权限角色 R_SECURITYDATA_QRY:数据用户查询权限角色 R_SECURITYOPR_DML:操作用户DML权限角色 R_SECURITYOPR_QRY:操作用户查询权限角色 |
3.角色 (Role)
规范3: 角色的命名格式为:”R_”+用户名+”_”+操作类型
操作类型:DML、QRY
数据用户:”R_”+数据用户名+”_”+”DDL”
”R_”+数据用户名+”_”+”DML”
”R_”+数据用户名+”_”+”QRY”
操作用户:”R_”+操作用户名+”_”+”DML”
”R_”+操作用户名+”_”+”QRY”
是否正确 | 举例 | 说明 |
错误 | TEST、ROLE1 | |
正确 | R_SECURITYDATA_DML:数据用户DML权限角色 R_SECURITYDATA_QRY:数据用户查询权限角色 R_SECURITYOPR_DML:操作用户DML权限角色 R_SECURITYOPR_QRY:操作用户查询权限角色 |
4.用户 (User)
规范4: 用户的命名格式为:模块全称+用户类别
用户类别:OPR、DATA
操作用户:模块全称+”OPR”
数据用户:模块全称+”DATA”
是否正确 | 举例 | 说明 |
错误 | TEST、USER01 | |
正确 | SECURITYDATA:数据权限用户 SECURITYOPR:操作权限用户 PUB_QUERY:查询权限用户 PUB_TEST:测试用户 |