数据库设计规

数据库设计规

目的

​为规范数据管理,统一数据设计,特指定本规范。

本规范的主要目的是希望规范数据库设计,尽量提前避免有于数据设计不当而产生的麻烦。

通用规范

使用英文:要用简单命了的英文单词,不要用拼音,特别是拼音缩写。主要目的明确,让人容易明白这个对象是做什么用的;

一律小写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常习惯,最好一律小写;

数据对象命名规范

数据库命名

  1. 前缀db下划线_项目名称,多个英文单词请用下划线分割;
    1. 例如:db_log
    2. 例如:db_log_analysis

表的命名

  1. 前缀t加下划线_加表名,多个英文单词请用下划线分割;
    1. 例如:t_user
    2. 例如:t_user_log

字段命名

  1. 尽量避免使用数据库关键命名 ,多个英文单词请用下划线分割;
    1. 例如:name type index 等等
    2. 例如:create_time user_name

备注

  1. 数据需加备注信息
  2. 表需要备注,说明该表存放的是什么数据
  3. 字段需要备注,说明该字段含义以及各种状态
CREATE TABLE `t_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(50) DEFAULT NULL COMMENT '菜单名称',
  `icon` varchar(50) DEFAULT NULL COMMENT 'icon',
  `router` varchar(50) DEFAULT NULL COMMENT '页面路由',
  `url` varchar(50) DEFAULT NULL COMMENT '请求路径: /admin/**',
  `type` int(1) DEFAULT NULL COMMENT '类型[1一级,2二级,3三级,4按钮]',
  `parent_id` int(11) DEFAULT NULL COMMENT '父级菜单ID,一级为0',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='系统菜单';

数据常用字段说明

create_time 创建时间

  1. 数据需要设置默认值,避免代码中每次创建对象每次插入当前时间。

update_time 更新时间

  1. 数据需要设置默认值。

is_enable 表状态字段

  1. [true是false否] 1为真0为假
  2. 项目中所有需要用户状态的字段,且只有两种状态请使用该字段
    1. 字段类型 tinyint
    2. 长度为 1
    3. 无符号型

is_delete 假删除字段

  1. 是否删除[true是false否] 1为真0为假
  2. 项目中所有需要假删除数据,请使用该字段
    1. 字段类型 tinyint
    2. 长度为1
    3. 无符号型

creator_id 创建者

  1. 表需要关联当前记录创建人,请使用该字段。

表关联关系

所有表不使用物理外键关联,请使用逻辑关联即可

表字段长度

请合理分配字段长度避免资源浪费

错误示范:手机号11位,使用 varchar(255) 请避免

数据设计

非特殊需求特殊情况,请遵守数据库设计三大范式;

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。

  1. 1NF

    1. 每一列属性都是不可再分的属性值,确保每一列的原子性
    2. 两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据
  2. 2NF

    1. 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分
  3. 3NF

    1. 属性不依赖于其它非主属性,而直接依赖于主键