欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

MySQL数据库设计规范,

来源: javaer 分享于  点击 25318 次 点评:45

MySQL数据库设计规范,


MySQL数据库设计规范

转载原文:https://github.com/jly8866/archer/blob/master/src/docs/mysql_db_design_guide.md#%E7%9B%AE%E5%BD%95

目录

1. 规范背景与目的	

2. 设计规范

2.1 数据库设计	

2.1.1 库名	
2.1.2 表结构	
2.1.3 列数据类型优化	
2.1.4 索引设计	
2.1.5 分库分表、分区表	
2.1.6 字符集	
2.1.7 程序DAO层设计建议	
2.1.8 一个规范的建表语句示例	

2.2 SQL编写	

2.2.1 DML语句	
2.2.2 多表连接	
2.2.3 事务	
2.2.4 排序和分组	
2.2.5 线上禁止使用的SQL语句

1. 规范背景与目的

MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。

2. 设计规范

2.1 数据库设计

以下所有规范会按照【高危】【强制】【建议】三个级别进行标注,遵守优先级从高到低。

对于不满足【高危】【强制】两个级别的设计,DBA会强制打回要求修改。

2.1.1 库名

2.1.2 表结构

2.1.3 列数据类型优化

详细存储大小参考原文:https://blog.csdn.net/HXNLYW/article/details/100104768

整数型数据类型

类型名称 说明 存储大小 取值范围
TINYINT 很小的正数(一般用于boolean存储) 1个字节 -128~127
unsigned:0~255
SMALLINT 小正数 2个字节 -32768~32767
unsigned:0~65535
MEDIUMINT 中等大小的正数 3个字节 -2^23 ~2^23-1
unsigned: 2^24 -1
INT(INTEGER) 普通大小的正数 4个字节 -2^31 ~2^31-1
unsigned: 2^32 -1
BIGINT 大正数(一般用于主键) 8个字节 -2^63 ~2^63-1
unsigned: 2^64 -1

小数型数据类型

类型名称 说明 存储大小 取值范围
FLOAT(M,N) M表示总共位数,N表示小数位数(单精度浮点数) 4个字节 ±1.175494351E – 38
DOUBLE(M,N) 双精度浮点数 8个字节 ±2.2250738585072014E – 308
DECIMAL(M,D) 压缩的“严格”定点数 M+2个字节 可变;其值的范围依赖于M 和D

字符串数据类型

类型名称 说明 存储大小 取值范围
CHAR(N) 固定长度 N * C(字符存储大小见文末注释1)(与CHAR区别见文末注释2) 0~255字符
VARCHAR(N) 可变长度 实际存储大小 0~65535字节
TEXT 文本 实际存储大小 0~65535字节
LONGTEXT 长文本 实际存储大小 0~2^32-1字节

日期数据类型

类型名称 说明 存储大小 取值范围
DATE 存储日期值(yyyy-MM-dd) 3个字节 1000-01-01~9999-12-31
TIME 存储时分秒(HH:mm:ss) 3个字节 00:00:00~23:59:59
DATETIME 存储日期+时间(yyyy-MM-dd HH:mm:ss) 8个字节 1000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMP 存储日期+时间,可作时间戳(yyyy-MM-dd HH:mm:ss) 4个字节 1970-01-01 00:00:01~2038-01-19 03:14:07

注释

UTF-8 : 一个英文/数字字符占1个字节,一个中文(含繁体)字符占3个字节。
Unicode: 一个英文/数字字符占2个字节,一个中文(含繁体)字符占2个字节。
符号 : 英文标点占1个字节,中文标点占2个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

char:固定长度,最大长度是255字符。适合用在身份证号码、手机号码等定、等长的加密密码等。
varchar:可变长度,最大长度65535字节,其实最多只能存储65532个字节,还有3个字节用于存储长度。

1)char的存取速度优于varchar
2)char(20)表示这个字段最多存20个字符,如果只存了16个字符,那么也会占用20个字符的空间
varchar(20)表示这个字段最多存20个字符,如果只存了16个字符,那么只占用16个字符的空间
3)即使使用Varchar数据类型,也不能够太过于慷慨!比如你只使用到90个字符,VARCHAR(100)与VARCHAR(200),虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。

2.1.4 索引设计

2.1.5 分库分表、分区表

2.1.6 字符集

2.1.7 程序层DAO设计建议

2.1.8 一个规范的建表语句示例

一个较为规范的建表语句为:

CREATE TABLE user (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(11) NOT NULL COMMENT ‘用户id’
  `username` varchar(45) NOT NULL COMMENT '真实姓名',
  `email` varchar(30) NOT NULL COMMENT ‘用户邮箱’,
  `nickname` varchar(45) NOT NULL COMMENT '昵称',
  `avatar` int(11) NOT NULL COMMENT '头像',
  `birthday` date NOT NULL COMMENT '生日',
  `sex` tinyint(4) DEFAULT '0' COMMENT '性别',
  `short_introduce` varchar(150) DEFAULT NULL COMMENT '一句话介绍自己,最多50个汉字',
  `user_resume` varchar(300) NOT NULL COMMENT '用户提交的简历存放地址',
  `user_register_ip` int NOT NULL COMMENT ‘用户注册时的源ip’,
  `create_time` timestamp NOT NULL COMMENT ‘用户记录创建的时间’,
  `update_time` timestamp NOT NULL COMMENT ‘用户资料修改的时间’,
  `user_review_status` tinyint NOT NULL COMMENT ‘用户资料审核状态,1为通过,2为审核中,3为未通过,4为还未提交审核’,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_user_id` (`user_id`),
  KEY `idx_username`(`username`),
  KEY `idx_create_time`(`create_time`,`user_review_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网站用户基本信息';

2.2 SQL编写

2.2.1 DML语句

2.2.2 多表连接

2.2.3 事务

2.2.4 排序和分组

2.2.5 线上禁止使用的SQL语句

相关文章

    暂无相关文章
相关栏目:

用户点评