Mysql数据库、表设计规范指南
结合网上资料与项目实际情况,总结下列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数据库、表设计规范指南的更多相关文章
- MySql数据库表设计规范
建表规约 索引规约 SQL 语句 其他实战建议 选用utf8编码 建议使用InnoDB存储引擎 建议每张表都设置一个主键 建议字段定义为NOT NULL 唯一值字段要指定唯一性约束 ALTER TAB ...
- mysql数据库表的自增主键号不规律,重新排列
mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...
- 用户中心mysql数据库表结构的脚本
/* Navicat MySQL Data Transfer Source Server : rm-m5e3xn7k26i026e75o.mysql.rds.aliyuncs.com Source S ...
- mysql数据库表结构导出
mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- 查看MySQL数据库表的命令介绍
如果需要查看MySQL数据库中都有哪些MySQL数据库表,应该如何实现呢?下面就为您介绍查看MySQL数据库表的命令,供您参考. 进入MySQL Command line client下查看当前使用的 ...
- Database学习 - mysql 数据库 表操作
mysql 数据库 表操作 创建数据表 基本语法格式: 创建数据表: create table 表名( 字段名 datatype 约束, 字段名 datatype 约束, ...... ) 修改表名 ...
- 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式
https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...
- 第二百七十八节,MySQL数据库-表内容操作
MySQL数据库-表内容操作 1.表内容增加 insert into 表 (列名,列名...) values (值,值,值...); 添加表内容添加一条数据 insert into 表 (列名,列名. ...
随机推荐
- 无法将“Ethernet0”连接到虚拟网络“VMnet8”。
出现这个问题的解决办法,请参考右侧链接:https://blog.csdn.net/big_bigwolf/article/details/79147388
- CentOS 7 下/etc/ssh/sshd_config 文件解释
CentOS 7 下/etc/ssh/sshd_config 文件详解 SSH由客户端和服务端的软件组成,在客户端可以使用的软件有SecureCRT.putty.Xshell等,而在服务器端运行的是一 ...
- PB从入坑到放弃(一)第一个HelloWorld程序
前言 网上关于PowerBuilder的资料确实是少之又少. 为了方便,后面我们都用pb 来代替PowerBuilder 说到这不得不来说说自己的pb入坑经历, 自己也不是计算机科班出生. 刚到公司面 ...
- JAVA代码下载TXT文件(本地和服务器上的代码都可以)
// 读取服务器文件内容(TXT文件测试可以) public static List<String> showTxt(String filePath) throws IOException ...
- 2023-07-13:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。 花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串 定义下面几条语
2023-07-13:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串. 花括号展开的表达式可以看作一个由 花括号.逗号 和 小写英文字母 组成的字符串 定义下面几条语 ...
- CentOS 30分钟部署免费在线客服系统
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程.期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 7.9 来安装部署. 我详细列 ...
- Thread 和 ThreadPool 简单梳理(C#)【并发编程系列】
〇.前言 对于 Thread 和 ThreadPool 已经是元老级别的类了.Thread 是 C# 语言对线程对象的封装,它从 .NET 1.0 版本就有了,然后 ThreadPool 是 .Net ...
- Mysql基础4-数据查询
一.DQL介绍 DQL全称:Data Query Language(数据查询语言),用来查询数据库中表的记录. 关键字:select 二.DQL语法 select 字段列表 from 表名列表 whe ...
- JSGRID loaddata显示超级多空行
这个逼问题困扰了我两天了 作为一个主后端的程序员 初体验前端技术栈真的麻之又麻 以防万一 请先确认 是不是和我一个情况 如果是 请往下看 首先 我们需要念一段咒语 json是json string是s ...
- Django创建超级管理员用户
python manage.py createsuperuser 后面就会提示你输入用户名.邮箱以及密码.