跳转至

数据库设计约定

时间: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个以内