在系统应用开发中,小伙伴对业务需求进行梳理并进行数据库设计,在对小伙伴的mysql数据库设计进行评审时,发现到处是非常难以理解的基础问题,这下着急了,下面马上对mysql数据库设计规范进行简单分析。
标准的设计流程为:需求分析、概念结构设计(概念视图)、逻辑结构设计(逻辑视图)、物理结构设计(物理视图)、数据库落地;具体参考大佬相关博文,此处只是对基本的进行浅显的论述。
1、数据库命名规范
命名简洁明确,长度不能超过30个字符,采用26个英文大小写字母、0-9数字和下划线组成;
示例:shop,也可以为jingdong_shop给数据库加个前缀;
2、数据库表名命名规范
命名简洁明确,多个单词用下划线分割,采用26个英文大小写字母、0-9数字和下划线组成;
示例:user_detail;
3、数据库表字段命名规范
命名简洁明确,多个单词用下划线分割,采用26个英文大小写字母、0-9数字和下划线组成;
示例:user_id、user_name;
4、数据库表字段类型规范
用尽量少的存储空间来存放一个字段的数据;
示例:能使用int就不要使用varchar、char,能用varchar(255)就不要使用varchar(256);时间用datetime类型;
5、数据库索引规范
命名简洁明确;
示例:user_detail表user_name字段的索引应为user_name_index唯一索引;
6、简单数据库范式
第一范式(1NF):字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式);
例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那么必须设立两个独立字段;
第二范式(2NF):一个表必须有主键,即每行数据都能被唯一的区分;
备注:必须先满足第一范式;
第三范式(3NF):一个表中不能包涵其他相关表中非关键字段的信息,即数据表不能有沉余字段;
备注:必须先满足第二范式;
7、数据库设计原则
用好数值类型节约空间;
实体与实体之间的关系;
数据库字段名的修改代价很大,一定要慎重考虑;
合适的字符存储长度,如127 or 200百以上smallint、3 or 6万以上mediumint、8 or 16百int、20 or 40亿以上bingint;
varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表;
表必备三字段:id, create_time, modified_time;