Oracle数据库开发规范,要想数据不添乱,首先立下基础规范

命名规则

总则

  1. 对象命名应使用英文字母开头,可包含英文字母、下划线,特殊情况下可以包含数字。
  2. 数据库名不能超过8个字符,表和字段不能超过30个字符。
  3. 禁止使用数据库的保留字。
  4. 命名应使用有意义的常用英文单词(或缩写)与下划线的组合;不常见的单词和实在不方便翻译的可以使用汉语拼音首字母缩写代替。
  5. 能用单个单词表示的绝不用组合。
  6. 对象命名时需遵循类别标识,如下表所示:
对象名关键字解释
TTable
视图VView
物化视图MV
普通索引IDX
位图索引BIX
单主键PK
复活主键AK
外键FK
类型TYP
触发器TR
存储过程P
函数FFunction
PKGPackage
序列SEQ
检查约束CHK
数据库链接DBL

表命名

数据表的命名规则:T_X_XXX_XX。
表命名分为四段,各段之间用下划线分割。

  • 第一段表示对象类别标识,使用“ T”;
  • 第二段为数据类别标识,使用下面的字母缩写:
类别关键字解释
系统基础表BBase
业务数据表DData
日志数据表LLog
报表数据表RReport
  • 第三段为数据内容描述,通常使用有意义的名词单数形式,若内容描述为词组则尽量使用词组连写(不加入任何分割符),但当连写 会发生歧义时也可在单词间加入下划线分割;

示例:

T_D_USER		--用户表
T_D_UROLE	--用户角色,其中U为用户首字母
  • 第四段是可选内容,为表类型标识, 当相同内容的表具有以下类型时,必须使用表类型标识, 表类型标识使用的缩写如下所示, 若为数据割接或上线时建的备份表须使用 BAKYYYYMMDD 作为后缀(其中 YYYYMMDD 表示备份日期)。
类型关键字解释
主表MSTMaster
从表SLV
扩展表EXTExtension
备份表BAKBackup
临时表TMPTemporary

示例:

T_D_USER_BAK20200918		--用户表2020年9月18日备份

视图命名

视图的命名规则:V_XXX_XX。
视图命名分为三段,各段之间用下划线分割。

  • 第一段表示对象类别标识,使用“ V”;
  • 第二段为逻辑主表的表名称或表名简称。
  • 第三段为数据内容描述,参照表的数据内容描述的规则。
    示例:
V_USER_POWER		--用户权限视图
V_USER_INFO			--用户详情视图

存储过程和函数命名

存储过程和函数的命名规则:X_XXX_XX。
存储过程和函数命名分为两段,各段之间用下划线分割。

  • 第一段表示对象类别标识,存储过程使用“ P”,函数使用“ F”;
  • 第二段为逻辑主表的表名称或表名简称,无逻辑主体时不加此段。
  • 第三段为处理描述,表示该存储过程或函数的功能,多用动词短语加操作描述表示。

示例:

P_ UROLE_SETDEF		--设置用户默认角色的存储过程
F_SPLISTSTR			--拆分字符串的函数

触发器命名

触发器的命名规则:TR_XXX_XX。
触发器命名分为三段,各段之间用下划线分割。

  • 第一段表示对象类别标识,使用“ TR”;
  • 第二段为表名称或表名简称。
  • 第三段为触发时机及触发条件,其值如下表所示,当一个触发器涉及多个触发条件时也可使用如“ BIU”( BEFORE INSERT,UPDATE)等表示;
触发条件关键字解释
BEFORE INSERTBI插入前
BEFORE UPDATEBU更新前
BEFORE DELETEBD删除前
AFTER INSERTAI插入后
AFTER UPDATEAU更新后
AFTER DELETEAD删除后
INSTEAD OF INSERTII
INSTEAD OF UPDATEIU
INSTEAD OF DELETEID

示例:

TR_USER_AI		--新建用户后的出发器

包的命名

包的命名规则:PKG_XXX。
包命名分为两段,各段之间用下划线分割。

  • 第一段表示对象类别标识,使用“ PKG”;
  • 第二段为功能描述。
    示例:
PKG_REPORT		--统计报表的包

主键的命名

主键的命名规则:PK_XXX_XX。
包命名分为两段,各段之间用下划线分割。

  • 第一段表示对象类别标识, 单主键使用“ PK”,复合主键使用“ AK”;
  • 第二段为表名称或表名简称;
  • 第三段为列名或列名简称。
    示例:
PK_USER_ID		--用户信息表的主键

索引的命名

索引的命名规则:IDX_XXX_XX。
包命名分为三段,各段之间用下划线分割。

  • 第一段表示对象类别标识,普通索引使用“ IDX”,位图索引使用 “ BIX”;
  • 第二段为表名称或表名简称;
  • 第三段为列名或列名简称。
    示例:
IDX_USER_PHONE		--用户表手机号码的索引

类型的命名

类型的命名规则:TYP_XXX。
类型名分为两段,各段之间用下划线分割。

  • 第一段表示对象类别标识,使用“ TYP”;
  • 第二段为类型描述,多使用名词或名词短语
    示例:
TYP_SPLITSTR		--拆分字符串函数拆分后的结果

序列的命名

序列的命名规则:SEQ_XXX。
序列名分为两段,各段之间用下划线分割。

  • 第一段表示对象类别标识,使用“ SEQ”;
  • 第二段为序列使用场景描述。
    示例:
SEQ_QUEUEID		--队列ID使用的序列

表设计规范

命名

  • 列名中只应包含列本身的含义,不应包含表的含义。
    示例:
    用户表(USER)中的主键列可命名为 ID 而不是 USERID。
  • 表中的列和其它相关联的表中的列具有相同的含义时应尽量使用相同的列名。

使用主键

原则上所有的永久表都应该有主键,主键可使用表中有意义的列表示,也可生成无意义的列作为主键。当使用表中有意义的列时应 使用逻辑上不可更改的列,无意义的主键(如 ID)可使用 sequence 生成的自增的数字或 guid 字符串。

数据类型和长度

  • 字符数据类型的列应定义为 VARCHAR2 类型并根据需要指定必要的长度,不可随意规定一个较大的长度,当有其他标准规定某 字符型数据为固定长度时,应使用 CHAR 类型,如字典中的代码列, VARCHAR2 和 CHAR 类型数据的长度均以字节表示法;
    示例:
TITLE VARCHAR2(120) 	--文章标题 
REMARK VARCHAR2(1000) 	--备注
  • 数字数据类型的列应定义为 NUMBER 类型,并根据需要指定精度和刻度,不可使用默认的精度;
    示例:
PRICE NUMBER(8,2) 	--商品价格,精确2位小数
  • 日期时间数据类型的列使用 DATE 或 TIMESTAMP,根据应用场景和需要的精确程度而定,不可使用 VARCHAR2 或 CHAR 类型 来存储日期时间数据类型;
  • 数据库中统一使用 NUMBER(1)用于存储布尔型的数据;
    示例:
ISVALID NUMBER(1) --是否有效 0无效 1有效

使用约束

为保证数据完整性,在表设计时可通过约束来实施数据完整性,这些约束包括:

  • 唯一约束(唯一索引)
    唯一约束能确保表中的数据的唯一性,防止重复数据的产生。 当表中具有逻辑唯一性的列时须在该列上建立唯一约束。
  • 参照完整性约束(外键)
    使用外键有利于保证数据的参照完整性,即存在逻辑上主从关系的表之间的数据能保证从表中的数据所参照的主表的列在主表中 一定能找到唯一对应的数据。例如: 招聘会表与招聘会岗位表之间应具有主从关系,招聘会岗位表中的招聘会 ID 列应参照招聘会 表的 ID 列。 当表间具有逻辑上的主从关系时应在从表中使用参照完整性约束,且外键的列上应建立相应的索引。如在某特定业务环境中确实 不需要使用外键,须做独立评估,并在相应的设计文档中做特别说明。
    注:
    由于大数据及过多的外键将给数据库带来一定的开销,因此设计时可不做物理上的外键约束,由程序进行限制处理
  • 检查约束
    检查约束是用来限制列值所允许的取值范围的,其表达式中必须引用相应列,并且表达式的计算结果必须是一个布尔值。 当可以使用数据库约束确保数据完整性时,应尽量使用数据库约束实现,因为使用数据库约束来保证数据完整性是最高效的,且不 会因为使用程序的变更影响数据的完整性。不要尝试使用程序中的代码来实现本可使用数据库约束实现的数据完整性校验,或以在程序 代码中实现为借口不使用数据库约束。

使用注释

原则上系统中的表和列都应该有注释,以进一步明确表或列的用途。
使用注释应注意以下几点:

  • 注释的语言应清晰,不可含混,应没有二义性;
  • 因注释的新增和修改使用相同的方法,修改注释应注意原来的注释内容,不可丢失原有的含义;
  • 表的注释可包含表的用途、业务方、作者等信息,但语言应简洁;
  • 存储代码值的列的注释除应包含其含义外,还应注明代码值的解释,如:字典表,字典类别或直接注明各枚举值代表的含义;

SQL代码规范

书写风格

  • 关键字大写,表名、列名全部大写;
  • SQL 语句访问一个表时,不使用表别名;
  • SQL 语句访问多个表时须使用别名,别名应简洁,尽可能使用一两个字符,访问的列须始终使用表的别名来限定列名;
  • SQL 书写单行不应超过 80 个字符(含缩进);
  • SQL 的换行原则上应在谓词处, 多行的 SQL 语句须缩进,第一个谓词与最后一个谓词须左对齐,若换行发生在不是谓词的地 方,换行后应与上一行中同种性质的单词对齐;
  • 缩进统一使用 TAB 键;
  • 连接符 OR、 IN、 AND、以及=、 <=、 >=等前后加上一个空格;
  • 在查询语句中,除复杂表结构外,推荐指定列名(替换使用通配所有列),但该规则不包括 SELECT COUNT()语句。

语句性能

  • 在条件表达式中尽可能使用相等(=)比较运算符,条件表达式之间尽可能使用 AND 连接;
  • 在条件表达式中应防止发生列数据类型的隐式转换(即确保条件表达式两端的数据类型一致);
  • 条件表达式中应在比较运算符左边直接使用列名,尽量不使用对列的变换(类型转换、函数、运算等);
  • 应在 SQL 中使用绑定变量而不是拼接 SQL 字符串的方式;
  • 尽可能减少访问数据的次数。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值