数据库规范

数据库规范 【数据库规范】一 建表规约
- 1、表达是与否概念的字段,使用 is_xxx 方式命名,数据类型使用 unsigned tinyint 1 表示是,0 表示否
- 2、表名不使用复数名词
- 3、表名不使用复数名词
- 4、主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名
- 5、小数类型为 decimal,禁止使用 float 和 double
- 说明 float和double 在存储的时候存在精度损失的问题 ,很可能在值的比较的时候得不到正确的结果,如果存储的数据范围超过decimal的范围,建议将数据拆分成整数和小数分开存储
- 6、如果存储的字符串长度几乎相等 ,使用chard定长字符串类型
- 7、小数类型为 decimal,禁止使用 float 和 double
- 8、表必备三字段:id, gmt_create, gmt_modified。
- 9、表的命名最好是加上“业务名称_表的作用
- 10、如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。
- 11、字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循。
- *****1)不是频繁修改的字段 2)不是 varchar 超长字段,更不能是 text 字段。
eg:商品类目名称使用频率高,字段长度短,可在相关表种冗余
- - - 12、单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
- - *如果预计三年后的数据量根本达不到这个级别,不要再建表的时候就分表分库
- - - **13、合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检
索速度**
eg:人的年龄 类型:unsigned tinyint 字节 无符号 0到255
二 索引规约
1、业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引
说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明
显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然会有脏数据产生。
2、【强制】超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致;多表关联查询时,
保证被关联的字段需要有索引。
说明:即使双表 join 也要注意表索引、SQL 性能
3、在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据
实际文本区分度决定索引长度即可。
说明:一般对字符串类型数据,长度为20的索引,区分度高达90%以上,可以使用 count(distinct left(列名,索引长度))/count(*)区分度来确定
4、严禁页面搜索使用左模糊或全模糊
索引文件具有B-tree的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引
5、如果有 order by的场景 ,利用索引的有序性,order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort的情况,影响查询性能。
eg:where a=? and b=? order by c ; 索引 a_b_c
索引中有范围的查找,那么索引的有序性无法利用 eg:where a>10 order by b ; 索引a_b无法排序
6、利用覆盖索引来进行查询操作,避免回表
目录就是起到覆盖索引的作用
正例:能够建立索引的种类分为主键索引、唯一索引、普通索引三种,覆盖索引就是一种查询效果,显示已使用索引,用explain的结果extra 列会出现using index
7利用延迟关联或子查询优化超多分页场景
说明:先快速定位需要获取的id段,然后再关联
select a.* from 表1 a,(select id from 表 1 where 条件 limit 10000,20 )b where a.id=b.id

    推荐阅读