Appearance
数据库设计规范
4.1 参考文档
- 数据库范式:https://baike.baidu.com/item/数据库范式/7309898?fr=aladdin
- 数据库的规范一览:https://juejin.im/entry/5b6165adf265da0f970d46ef
- MySQL 保留字:https://blog.csdn.net/AnPHPer/article/details/79494131
- SQL保留字:https://support.office.com/zh-cn/article/SQL-保留字-b899948b-0e1c-4b56-9622-a03f8f07cfc8
- ORACLE保留字:https://www.bbsmax.com/A/LPdoj7Dg53/
4.2 主流数据库字段命名长度限制
数据库类型 | 表名 | 字段名 |
---|---|---|
SQL | 128个字符,临时表116个字符 | 128个字符 |
ORACLE | 30个字符 | 30个字符 |
MYSQL | 64个字符 | 64个字符 |
4.3 命名规范
1. 数据库表命名规范
- 数据库、表、字段名称可由A-Z、a-z、0-9和_下划线组成。
- 命名应使用英文单词、英语短句、相应缩写。慎用汉语拼音、慎用汉语拼音缩写、英汉混写(地名、专有名词、外接第三方数据除外,需标注)
- 建议使用小写与下划线命名规则
- 慎用数字,避免使用关键字\保留字
- 表命名:基础表:base_ + 表内容,业务表: xxx_ + 表内容
- 字段命名:单词、多单词由_链接,单数形式,布尔类型加is_
不建议 | 建议 | 备注 |
---|---|---|
mingzi | name | 汉语拼音 |
MZ | name | 汉语拼音缩写 |
show(bool) | is_show | 布尔类型数据库要is_ |
hong_hair | red_hair | 中英混杂 |
students | student | 应使用单数形式 |
geoToJson | geo_to_json | 建议使用_下划线拼接 |
geo2Json | geo_to_json | 不建议使用数字 |
mDay | mon/monday | 不建议使用自定义缩写 |
2. 视图命名规范
- 视图的格式如下 V_X_名称,必须以V开头
- X代表视图的用途,R:报表,M:地图(图属分离查询时使用),T:作为业务表使用,TT中间视图(即给其他视图调用)
- 名称根据业务需要自行命名,要求言简意赅
- 视图必须添加注释,规范如下
/*==============================================================*/
/* 创建人: */
/* 功能说明: */
/* 系统模块: */
/* 注意事项: */
/*==============================================================*/
3. 存储过程命名规范
- 所有的存储过程必须有前缀“PROC_”,例如:PROC_XXXXXX_SELECT,最后的行为动词就是存储过程要执行的任务。
- 如果存储过程返回一条记录那么后缀是:SELECT
- 如果存储过程插入数据那么后缀是:INSERT
- 如果存储过程更新数据那么后缀是:UPDATE
- 如果存储过程有插入和更新那么后缀是:SAVE
- 如果存储过程删除数据那么后缀是:DELETE
- 如果存储过程更新表中的数据 (ie. DROP AND CREATE)那么后缀是:CREATE
- 如果存储过程返回输出参数或0,那么后缀是:OUTPUT
4. 序列命名规范
- 所有的序列必须有前缀“SEQ_”,例如:SEQ_表名
5. 触发器命名规范
- 所有的触发器必须有前缀“TRIGER_“
4.4 使用规范
以下以’tdt_sys_auto_matching’表为测试(数据量31318条)
- 慎用select (增加消耗、不能有效利用索引、在数据库变动时易造成bug) 要什么字段取什么字段
- 使用select *:(时间16.954s)
- 使用具体属性字段:(时间2.961s)
%2)OR 改成IN查询,(查询的数据有索引,in效率更高),使用or:(时间2.942s)
- 使用In:(时间2.932s)
- 禁止使用未指定属性插入 insert into table values(x,x,x)(数据库变动易造成bug)
- 慎用NOT、!=、<>、!<、!>、NOT IN、NOT LIKE,%开头的模糊查询,造成全表查询
- Mybatis:#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
- 不直接拿 HashMap 与 Hashtable 作为查询结果集的输出,数据类型不可控