结合网上资料与项目实际情况,总结下列MYSQL数据库设计规范。

一、MYSQL数据库设计规范
1、数据库命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使用mysql保留字;
命名简洁明确(长度不能超过30个字符);
例如:vr_mmo;
除非是备份数据库可以加0-9的自然数:vr_mmo_20171210;

2、数据库表名命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使用mysql保留字;
命名简洁明确,多个单词用下划线'_'分隔;
静态表的表名增加s_的前缀,动态表的表名增加d_的前缀。
例如:用户表d_user, 物品类型表s_itemtype
表前缀'player_'可以有效的把相同关系的表显示在一起;

3、数据库表字段名命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使用mysql保留字;
命名简洁明确,多个单词用下划线'_'分隔;
例如:player表字段 id, name, login_time;
每个表中必须有自增主键;
使用配置表的ID做为字段,字段名要体现出对应的表。比如物品表item有个字段是物品类型对应itemtype的id,那物品表的相应字段应该为itemtypeId。
表与表之间的相关联字段名称要求尽可能的相同;

4、数据库表字段类型规范
用尽量少的存储空间来存数一个字段的数据;
例如:能使用tinyint就不要使用smallint,能使用smallint就不要使用int,能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256),只有配置表(总体尺寸小)才不需要遵守;
字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能);
建议使用UNSIGNED存储非负数值;
固定长度的类型最好使用char,例如:邮编;
所有字段均定义为NOT NULL,给每个字段一个默认值(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效);
在扩充表字段的时候,通常建议在原表的尾部添加字段,不要在中间插入。这样在更新时,可以提前更新表结构,后更新代码。减少因版本更新不同步,导致的字段错位和混乱,甚至导致数据丢失等严重后果;

5、数据库表索引规范
命名简洁明确,例如:item表owner字段的索引应为owner_index唯一索引;
为每个表创建一个主键索引,推荐使用UNSIGNED自增列作为主键;
哪些情况需要建立索引:出现在where的字段,较频繁地作为查询条件的字段
不适合建立索引:字段更新太频繁,唯一性太差的字段(比如性别)
建立复合索引请慎重,不用外键(由程序保证约束),建立索引可以加快查询速度,但是索引的创建和维护需要消耗时间和物理空间。

6、简单熟悉数据库范式
第一范式(1NF):字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式);
例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那么必须设立两个独立字段;

第二范式(2NF):一个表必须有主键,即每行数据都能被唯一的区分;
备注:必须先满足第一范式;

第三范式(3NF):一个表中不能包含其他相关表中非关键字段的信息,即数据表不能有冗余字段;
备注:必须先满足第二范式;
备注:平衡范式与冗余,效率优先;

二、MYSQL数据库设计原则
1、核心原则
不在数据库做运算;
控制列数量(字段少而精,字段数建议在20以内);

2、sql类原则
当只要一行数据时使用 LIMIT 1(提高查询性能,预防非预期错误)
sql语句尽可能简单(一条sql只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大sql可以堵死整个库);
减少与数据库交互次数,尽量采用批量SQL语句
禁用count(*);
使用union all替代union(union有去重开销);
少用连接join;
使用group by;
使用同类型比较;

三、sql提交要求
1、结构更新sql、数据sql、函数sql、清库sql分开提交,分别为vr_mmo_update.sql、vr_mmo_data.sql、vr_mmo_clean.sql
vr_mmo.sql 表的初始版本
vr_mmo_update.sql 以增量方式提交的表和过程函数的修改
vr_mmo_clean.sql 清库sql
vr_mmo_data.sql 库的初始数据,一般只包含配置数据,只维护当前的版本
2、提交sql要包含功能说明、作者、提交时间、表的注释、字段注释,增加字段要使用after避免刷库顺序导致的bug
3、增加的sql语句加到文件尾,如果是版本内的修改要在原有提交处修改
4、提交的sql以固定格式的注释开头:
########################################################################################################
## 功能单 :76153【VR-MMO】xxxxxxx
## 提交者 :xxx
## 提交日期:xxxx年x月x日18:00:00
########################################################################################################

本文转自:

Mysql数据库、表设计规范指南 - Boom__Clap - 博客园 (cnblogs.com)

Mysql数据库、表设计规范指南的更多相关文章

  1. MySql数据库表设计规范

    建表规约 索引规约 SQL 语句 其他实战建议 选用utf8编码 建议使用InnoDB存储引擎 建议每张表都设置一个主键 建议字段定义为NOT NULL 唯一值字段要指定唯一性约束 ALTER TAB ...

  2. mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

  3. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  4. 用户中心mysql数据库表结构的脚本

    /* Navicat MySQL Data Transfer Source Server : rm-m5e3xn7k26i026e75o.mysql.rds.aliyuncs.com Source S ...

  5. mysql数据库表结构导出

    mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...

  6. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  7. 查看MySQL数据库表的命令介绍

    如果需要查看MySQL数据库中都有哪些MySQL数据库表,应该如何实现呢?下面就为您介绍查看MySQL数据库表的命令,供您参考. 进入MySQL Command line client下查看当前使用的 ...

  8. Database学习 - mysql 数据库 表操作

    mysql 数据库 表操作 创建数据表 基本语法格式: 创建数据表: create table 表名( 字段名 datatype 约束, 字段名 datatype 约束, ...... ) 修改表名 ...

  9. 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

    https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...

  10. 第二百七十八节,MySQL数据库-表内容操作

    MySQL数据库-表内容操作 1.表内容增加 insert into 表 (列名,列名...) values (值,值,值...); 添加表内容添加一条数据 insert into 表 (列名,列名. ...

随机推荐

  1. docker 对容器中的文件进行编辑

    用途 有一些情况下,例如docker安装的redis.nacos.mysql等等,在docker容器中的安装未进行文件的映射,当需要对其进行更改配置信息时,就会遇到这种情况,需要去容器中进行编辑配置文 ...

  2. 前端vue 宫格组件提供常见九宫格菜单组件,扩充性好,可切换九宫格 十二宫格 十五宫格

    快速实现vue uni-app宫格组件提供常见九宫格菜单组件,扩充性好,可切换九宫格 十二宫格 十五宫格; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net. ...

  3. FPGA加速技术:在数据中心和云计算中的应用

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成与测试 4. 应用示例与代码实现讲解 4.1. 应用场景介绍 4. ...

  4. 代理详解(java代理和CGLIB动态代理)

      [代理]大家都知道,特别是在spring中aop.spring中的事务.spring解析注解@Configuration,以及最原始的解析spring.xml的配置,这些都是使用代理来进行实现的, ...

  5. 统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序

    前言   在ubuntu上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdep ...

  6. Hexo博客使用valine评论系统无效果及终极解决方案

    注意事项 有一些博主valine评论系统无效果,有一些原因: 1.很大程度是因为next的版本升级导致某些参数设置不同 2.valine评论是基于LeanCloud,还有一个文章阅读次数功能也是用Le ...

  7. Doris写入数据异常提示actual column number in csv file is less than schema column number

    版本信息: Flink 1.17.1 Doris 1.2.3 Flink Doris Connector 1.4.0 写入方式 采用 String 数据流,依照社区网站的样例代码,在sink之前将数据 ...

  8. 如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作

    Redis是一个开源的.高性能的.基于内存的键值数据库,它支持多种数据结构,如字符串.列表.集合.散列.有序集合等.其中,Redis的散列(Hash)结构是一个常用的结构,今天跟大家分享一个我的日常操 ...

  9. 2023年CCPC河南省程序设计竞赛 mjh

    首先,很荣幸有机会参加此次ccpc,虽然成绩很一般... 这次ccpc一共过了两道签到题.比赛开始就找到了a题,考察字符串的回文判断,通过调用c++库函数过了.第二道签到题类似于数学题.通过类似于找规 ...

  10. 2021-7-6 new tcpip

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...