命名规则
总则
- 对象命名应使用英文字母开头,可包含英文字母、下划线,特殊情况下可以包含数字。
- 数据库名不能超过8个字符,表和字段不能超过30个字符。
- 禁止使用数据库的保留字。
- 命名应使用有意义的常用英文单词(或缩写)与下划线的组合;不常见的单词和实在不方便翻译的可以使用汉语拼音首字母缩写代替。
- 能用单个单词表示的绝不用组合。
- 对象命名时需遵循类别标识,如下表所示:
对象名 | 关键字 | 解释 |
---|---|---|
表 | T | Table |
视图 | V | View |
物化视图 | MV | |
普通索引 | IDX | |
位图索引 | BIX | |
单主键 | PK | |
复活主键 | AK | |
外键 | FK | |
类型 | TYP | |
触发器 | TR | |
存储过程 | P | |
函数 | F | Function |
包 | PKG | Package |
序列 | SEQ | |
检查约束 | CHK | |
数据库链接 | DBL |
表命名
数据表的命名规则:T_X_XXX_XX。
表命名分为四段,各段之间用下划线分割。
- 第一段表示对象类别标识,使用“ T”;
- 第二段为数据类别标识,使用下面的字母缩写:
类别 | 关键字 | 解释 |
---|---|---|
系统基础表 | B | Base |
业务数据表 | D | Data |
日志数据表 | L | Log |
报表数据表 | R | Report |
- 第三段为数据内容描述,通常使用有意义的名词单数形式,若内容描述为词组则尽量使用词组连写(不加入任何分割符),但当连写 会发生歧义时也可在单词间加入下划线分割;
示例:
T_D_USER --用户表
T_D_UROLE --用户角色,其中U为用户首字母
- 第四段是可选内容,为表类型标识, 当相同内容的表具有以下类型时,必须使用表类型标识, 表类型标识使用的缩写如下所示, 若为数据割接或上线时建的备份表须使用 BAKYYYYMMDD 作为后缀(其中 YYYYMMDD 表示备份日期)。
类型 | 关键字 | 解释 |
---|---|---|
主表 | MST | Master |
从表 | SLV | |
扩展表 | EXT | Extension |
备份表 | BAK | Backup |
临时表 | TMP | Temporary |
示例:
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 INSERT | BI | 插入前 |
BEFORE UPDATE | BU | 更新前 |
BEFORE DELETE | BD | 删除前 |
AFTER INSERT | AI | 插入后 |
AFTER UPDATE | AU | 更新后 |
AFTER DELETE | AD | 删除后 |
INSTEAD OF INSERT | II | |
INSTEAD OF UPDATE | IU | |
INSTEAD OF DELETE | ID |
示例:
TR_USER_AI --新建用户后的出发器
包的命名
包的命名规则:PKG_XXX。
包命名分为两段,各段之间用下划线分割。
- 第一段表示对象类别标识,使用“ PKG”;
- 第二段为功能描述。
示例:
PKG_REPORT --统计报表的包
主键的命名
主键的命名规则:PK_XXX_XX。
包命名分为两段,各段之间用下划线分割。
- 第一段表示对象类别标识, 单主键使用“ PK”,复合主键使用“ AK”;
- 第二段为表名称或表名简称;
- 第三段为列名或列名简称。
示例:
PK_USER_ID --用户信息表的主键
索引的命名
索引的命名规则:IDX_XXX_XX。
包命名分为三段,各段之间用下划线分割。
扫描二维码关注公众号,回复:
11977926 查看本文章
- 第一段表示对象类别标识,普通索引使用“ 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 字符串的方式;
- 尽可能减少访问数据的次数。