数据库设计约定
时间:2018/7/30 19:37:57
说明:
- 基于MySql
数据库设计规范#
一些约定#
- 不使用外键、触发器、视图、存储过程。表必须有主键。
- 使用InnoDB引擎。
- 不在线上做压力测试。
- 分离测试开发环境数据库。
- 关系型数据库很难解决的问题,考虑特定问题的NoSql数据库或文档数据库。
创建数据库#
- 数据库名用小写,单词之间用分割线隔开。
1
CREATE DATABASE IF NOT EXISTS database default character set utf8mb4 COLLATE utf8mb4_unicode_ci
创建数据表#
- 表名用小写,单词之间用分割线隔开,表名要有模块的前缀 如:
dm
。 - 枚举和布尔类型使用
tinyint
, 整形使用int
, 长整形使用bigint
。 - 长度固定的字段使用
char
, 不固定的字段使用varchar
。 - 所有字段非空且指定默认值。
- 默认使用
utf-8
编码,必要时使用utf8m64
编码(支持表情)。 - 手机号使用
varchar(20)
1 2 3 4 5 6 7 8 9 10 11
CREATE TABLE `dm_file_base_info` ( `file_base_info_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文件基础信息ID', `file_path` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ' ' COMMENT '文件路径', `file_name` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ' ' COMMENT '文件名字', `file_type` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ' ' COMMENT '文件类型', `is_directory` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否是目录', `record_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录日期', `file_absolute_path` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ' ' COMMENT '文件绝对路径', PRIMARY KEY (`file_base_info_id`), UNIQUE KEY `dm_file_base_info_file_name_uindex` (`file_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件基本信息表';
创建索引#
- 在区分度高的列上创建索引
- 在join的列上创建索引
- 单表索引个数控制在5个以内,单个索引字段个数不要超过5个
- 最左前缀原则
优化运维#
- 大字段、访问频度低的字段拆分到单独的表中存储,分离冷热数据。
- 单实例数据表控制在2000个以内,单表分表个数控制在1024个以内。
- 应用程序记录异常SQL。
数据查询#
- in 的值控制在50个以内