数据库规范

大纲:

范式要求
建库规约
建表规约
建字段规约
索引规约
SQL语句
一、范式要求

严格遵循数据库三范式:

第一范式(1NF):字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式);

例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那么必须设立两个独立字段;


第二范式(2NF):一个表必须有主键,即每⾏数据都能被唯一的区分;

备注:必须先满足第一范式;


第三范式(3NF):一个表中不能包涵其他相关表中非关键字段的信息,即数据表不能有沉余字段;

备注:必须先满足第二范式;

二、建库规约

1、字符集使用【UTF-8】

2、命名规范

命名可使用:英文字母(全大写)、数字; 禁止使用MySQL保留字、特殊字符、关键字等,如:name,time ,datetime,password等;

命名简洁明确(长度不超过30个字符);

例:PANGU、EASY7

三、建表规约

1、字符集使用【UTF-8】

字符规则:utf8mb4 -- UTF-8 Unicode

排序规则:utf8mb4_unicode_ci

2、表存储引擎使用 InnoDB 引擎,支持事务控制

3、命名规范

● 命名可使用:英文字母(全大写)、数字、下划线; 禁止使用MySQL保留字、特殊字符、关键字等,如:name,time ,datetime,password等;
● 命名简洁明确、见名知义,长度不超过32个字符,多个单词用下划线'_'分隔;
● 通用表命名规则:TAB_功能点,例:TAB_USER、TAB_DEVICE
● 各行业表命名规则:TAB_模块标识_功能点;
● 公共插件的数据字典设计去掉行业属性,
    例:TAB_JCW_PERSON(X)
            TAB_PERSON        (√)

4、表设计中禁止使用:触发器、自定义函数、存储过程;

5、表设计中必须有主键,不推荐使用联合主键;

6、建表需要添加备注,备注格式:产品-模块-表说明;

7、备份库、备份表必须以【BAK_】为前缀并以日期为后缀;

8、临时库表必须以【TMP_】为前缀并以日期为后缀;

9、每个表必须有如下字段:


S_ID    varchar    100    一位空字符串【 】    默认主键
S_CREATE_USER    varchar    50    当前登录⽤户ID    创建人(用户ID)
S_UPDATE_USER    varchar    50    当前登录⽤户ID    更新人(用户ID)
DT_CREATE_TIME    datetime    0    系统当前时间(代码中传递值)    创建时间(年月日 时分秒)
DT_UPDATE_TIME    datetime    0    系统当前时间(代码中传递值)    更新时间(年月日 时分秒)(数据创建时,DT_UPDATE_TIME = DT_CREATE_TIME 按照)


注:

1、创建时间、更新时间、创建人、更新人,在盘古封装的操作数据库模块中,会自动填充数据,调用接口时不用进行传参

2、新开发功能,使用物理删除(原逻辑删除【I_DEL_FLG】随版本迭代修改,改为物理删除)

四、建字段规约

1、命名规范:

1、命名可使用:英文字母(全大写)、数字、下划线;禁止使用 MySQL 保留字、特殊字符、关键字等,如:name,time ,datetime,password 等;

2、命名简洁明确,多个单词用下划线【_】分隔;

3、按字段类型使用对应前缀,具体参考【7】;例:S_ID、I_TYPE、DT_CREATE_TIME

2、字符串统一使用 varchar,id 类、uuid 类字段长度 50;

3、禁止使用 blob 类型字段;

4、所有字段,必须有【默认值】,不允许出现 NULL;

5、所有字段,必须有【描述信息】;

6、逻辑型中数值 0 表示为“假”,数值 1 表示为“真”

7、字段前缀要求:


字符串和文本    S_    varchar、text    空字符串(不允许null)    
1、长度4000以下使用varchar、长度4000以上使用text

数字    I_    tinyint、int    
0或-100

1、tinyint值范围:有符号范围是-128到127,无符号范围是0到255
2、int 值范围:0-43亿

3、考虑降低默认值带来业务处理中冲突概率

日期(年月日)    D_    date    
考虑不带时区
时间(年月日时分秒)    DT_    datetime    
考虑不带时区
           

五、索引规约

1、命名规范

1、命名可使用:英文字母(全大写)、数字、下划线,命名简洁明确,多个单词⽤下划线【_】分隔;禁止使用 MySQL 保留字、特殊字符、关键字等,如:name,time ,datetime,password 等;

2、主键索引前缀:PK_,命名规范:PK_表名_字段名;(例:PK_TAB_USER_S_ID)

3、其他索引前缀:IDX_,命名规范:IDX_表名_字段名;(例:IDX_TAB_DEVICE_I_DEVICE_TYPE、IDX_TAB_USER_S_ID)

2、索引类型选择【BETREE】索引;

3、创建索引的时候请符合以下原则,提升索引的使用效率:

1、使用唯一索引。考虑某列中值的分布,索引的列的基数越大,索引效果越好。

2、杜绝过度索引,会降低写操作的性能。推荐单表索引数不要超过 4 个。

4、推荐超过三个表禁止 join,需要 join 的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引;

5、如果有 order by 的场景,请注意利用索引的有序性。避免出现 file_sort 的情况,影响查询性能;

6、建组合索引的时候,区分度最大的在最左边;

7、如果字段需做模糊查询之外的条件查询,需建索引;

六、SQL语句规约

1、所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT 及其子句,IF……ELSE、CASE、DECLARE 等;

2、不要使用 COUNT(列名) 或 COUNT(常量)来替代 COUNT(*),COUNT(*) 是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关

3、禁止使用 SELECT * 必须用 SELECT 字段列表查询;

4、禁止使用不含字段列表的 INSERT 语句;

5、禁止使用 ORDER BY RAND() 进行随机排序 ;

6、使用 ISNULL() 来判断是否为 NULL 值

说明:NULL 与任何值的直接比较都为 NULL。

1、NULL <> NULL 的返回结果是 NULL,而不是 false。

2、NULL = NULL 的返回结果是 NULL,而不是 true。

3、NULL <> 1 的返回结果是NULL,而不是 true。

7、禁止使用存储过程,存储过程难以调试和扩展,更没有移植性

8、禁止使用数据库函数,避免切换数据库产生兼容性问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值