数据库的知识从基础的SQL语法(DDL、DML、DCL、DQL)、事务(隔离级别&传播级别)、索引(下推&命中)、锁(MVCC和LBCC),到其中的应用技巧与底层原理,错综复杂,学习成长之路漫漫。
本文先抛开上述,总结一下自己在实践中领悟到的数据库设计的思路,万事开头难,只要表结构设计得当,可以省去后期诸多不必要的SQL优化,事半功倍。
1、数据库的选择:关系型数据库 or 非关系型数据库
主业务数据普遍选择建立在 中,方便维护,考虑业务数据量巨大或者是审计日志、操作记录等非主要业务数据,可以使用NoSql,减少对主数据库的存储及性能压力。
业务的增长会让数据量的估值不够准确,而后常常会根据业务特性使用的方案的来解决性能瓶颈。
2、恰当的关联关系:基于业务关系的梳理
- A表对B表 :A或B上建立关联主键皆可,通常看驱动关系或者数据流向,如果A->B或者说B依赖A,建议在B表上建立A表关联主键;
- A表对B表 :在B表上建立A表的关联主键;
- A表对B表 :建立新的关联表来记录A和B的关联关系。
3、表粒度
可以通过增加type区分的业务组合,减少重复表结构的建立,相对代码也是对表的一种封装;
业务数据隔离或者数据量庞大的情况,即使表结构类似,也应当独立出来;
业务字段过多,可能根据业务划分出基础信息、扩展信息表等;
,通常独立于主业务表,否则会影响主业务表的性能和结构化关系。
4、常用字段的处理:mysql5.7+
- 考虑存储大小:满足业务需求
varchar(30)可以存储 30个数字/30个字母/30个汉字;
longtext可以无限存储;
date只能存日期,timestamp和datetime可以精确到时分秒;
整型和浮点型BigDecimal。 - 考虑占用空间:限制每个表最多存储4096列,并且每一行数据的大小不能超过65535字节
date类型 3字节、timestamp类型 4字节、datetime类型 8字节;
char(n) n字节 ; vharchar(n) 3n+2字节[如果是UTF-8编码,2存储长度],如果是可以为null的字段,还要加1。 - 考虑场景:
莫非定理下的唯一性索引;
常用查询的普通索引或者联合索引。
数据库知识丰富多彩,耐人寻味,多看几遍58沈剑数据库30条军规、阿里数据库操作规范等,学习理论结合工作实践,提升技术,提升对数据库的理解。
网友评论