转载出:http://www.cnblogs.com/lovekingly/p/5044278.html

MYSQL数据库设计规范
1、数据库命名规范
  • 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;
  • 命名简洁明确(长度不能超过30个字符);
  • 例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀;
  • 除非是备份数据库可以加0-9的自然数:user_db_20151210;
2、数据库表名命名规范
  • 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;
  • 命名简洁明确,多个单词用下划线'_'分隔;
  • 例如:user_login, user_profile, user_detail, user_role, user_role_relation,
  • user_role_right, user_role_right_relation
  • 表前缀'user_'可以有效的把相同关系的表显示在一起;
3、数据库表字段名命名规范
  • 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;
  • 命名简洁明确,多个单词用下划线'_'分隔;
  • 例如:user_login表字段 user_id, user_name, pass_word, eamil, tickit, status, mobile, add_time;
  • 每个表中必须有自增主键,add_time(默认系统时间)
  • 表与表之间的相关联字段名称要求尽可能的相同;
4、数据库表字段类型规范
  • 用尽量少的存储空间来存数一个字段的数据;
  • 例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256);
  • IP地址最好使用int类型;
  • 固定长度的类型最好使用char,例如:邮编;
  • 能使用tinyint就不要使用smallint,int;
  • 最好给每个字段一个默认值,最好不能为null;
5、数据库表索引规范
  • 命名简洁明确,例如:user_login表user_name字段的索引应为user_name_index唯一索引;
  • 为每个表创建一个主键索引;
  • 为每个表创建合理的索引;
  • 建立复合索引请慎重;
6、简单熟悉数据库范式
  • 第一范式(1NF):字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式);
  • 例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那么必须设立两个独立字段;
  • 第二范式(2NF):一个表必须有主键,即每行数据都能被唯一的区分;
  • 备注:必须先满足第一范式;
  • 第三范式(3NF):一个表中不能包涵其他相关表中非关键字段的信息,即数据表不能有沉余字段;
  • 备注:必须先满足第二范式;
  • 备注:往往我们在设计表中不能遵守第三范式,因为合理的沉余字段将会给我们减少join的查询;
  • 例如:相册表中会添加图片的点击数字段,在相册图片表中也会添加图片的点击数字段;
MYSQL数据库设计原则

1、核心原则
  • 不在数据库做运算;
  • cpu计算务必移至业务层;
  • 控制列数量(字段少而精,字段数建议在20以内);
  • 平衡范式与冗余(效率优先;往往牺牲范式)
  • 拒绝3B(拒绝大sql语句:big sql、拒绝大事物:big transaction、拒绝大批量:big batch);
2、字段类原则
  • 用好数值类型(用合适的字段类型节约空间);
  • 字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能);
  • 避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效);
  • 少用text类型(尽量使用varchar代替text字段);
3、索引类原则
  • 合理使用索引(改善查询,减慢更新,索引一定不是越多越好);
  • 字符字段必须建前缀索引;
  • 不在索引做列运算;
  • innodb主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改,字符串不应该做主键)(理解Innodb的索引保存结构就知道了);
  • 不用外键(由程序保证约束);
4、sql类原则
  • sql语句尽可能简单(一条sql只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大sql可以堵死整个库);
  • 简单的事务;
  • 避免使用trig/func(触发器、函数不用客户端程序取而代之);
  • 不用select *(消耗cpu,io,内存,带宽,这种程序不具有扩展性);
  • OR改写为IN(or的效率是n级别);
  • OR改写为UNION(mysql的索引合并很弱智);
    select id from t where phone = ’′ or name = ‘john’;
=>
select id from t where phone=’′
union
select id from t where name=’jonh’
  • 避免负向%;
  • 慎用count(*);
  • limit高效分页(limit越大,效率越低);
  • 使用union all替代union(union有去重开销);
  • 少用连接join;
  • 使用group by;
  • 请使用同类型比较;
  • 打散批量更新;
5、性能分析工具
  • show profile;
  • mysqlsla;
  • mysqldumpslow;
  • explain;
  • show slow log;
  • show processlist;

【转】MYSQL数据库设计规范与原则的更多相关文章

  1. MYSQL数据库设计规范与原则

    MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat ...

  2. 收集整理mysql数据库设计规范与原则

    1. 数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;命名简洁明确(长度不能超过30个字符);例如:user, stat, log, 也可以wifi ...

  3. MYSQL数据库设计规范11111

    MYSQL数据库设计规范       1.数据库命名规范         采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;         命名简洁明确(长度不能超 ...

  4. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  5. mysql 数据库设计规范

    MySQL数据库设计规范 目录 1. 规范背景与目的 2. 设计规范 2.1 数据库设计 2.1.1 库名 2.1.2 表结构 2.1.3 列数据类型优化 2.1.4 索引设计 2.1.5 分库分表. ...

  6. MySQL数据库设计规范

    1. 规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短.本规范旨在帮助或指导R ...

  7. MySQL 数据库最优化设计原则

    规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎. 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过10 ...

  8. MySql数据库规范与原则

    1.数据库表名命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确,多个单词用下划线'_'分隔; 例如:user_login, user_pro ...

  9. Mysql数据库性能

    Mysql数据库设计规范 https://www.cnblogs.com/Luke-Me/p/8994432.html 我们在项目一开始的设计中,就要忙着考虑数据库的设计,表.字段.索引.sql等等, ...

随机推荐

  1. struts2返回List json

    利用struts2-json-plugin 之前一直输出null.... 按网上的配也不行 后来不知道怎么突然可以了 赶紧记录一下 private List<Shop> moneyshop ...

  2. CodeM Qualifying Match Q1

    问题描述: 具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 difference 最小.两段等长音频的 difference 定义为: difference = ...

  3. [2017BUAA软工]第2次个人作业

    软工第2次个人作业--代码复审 一.代码复审Check List 1.概要部分 代码能符合需求和规格说明么? 能正确处理题目要求,代码能符合需求和规格. 代码设计是否有周全的考虑? 能正确生成和解出数 ...

  4. vsftpd重启失败解决方法

    vsftpd dead,but subsys locked vsftpd已死,但是subsys被锁 关于VSFTPD服务器重启失败,研究了一晚上,当virtual_use_local_privs=ye ...

  5. 如何调换antd中Modal对话框确认按钮和取消按钮两个按钮的位置

    今天有个工作是把所有的确认按钮放在取消按钮的左边,类似于下图这样的,公司用的时antd组件 但是antd组件的按钮时确认键放在右边的 可以采用下面的方式,将按钮调换过来: 对的,就是在modal里面的 ...

  6. DAY2-Python学习笔记

    1.迭代器:可以直接作用于for循环的对象统称为可迭代对象:Iterable,使用isinstance()判断一个对象是否是Iterable对象: >>> from collecti ...

  7. Luogu4885 灭顶之灾

    显然1的位置确定了整个矩阵,每一段连续的数即是对该位置的限制.化一下式子可以发现是一段区间或一段区间的补集,最后要求的是他们的交.看起来不太好求,于是转为求补集的并,那么排个序就完了. #includ ...

  8. HEOI2015小L的白日梦

    题面链接 洛咕 sol 为什么网上面只有神仙题解啊!!! 引起我这种蒟蒻不适QAQ. 性质证明留给巨佬 然后我只贴性质了QwQ. 1.一定存在最优解每一天不高兴的概率是单调不增的. 2.一定存在最优解 ...

  9. 【转】每个 Linux 新手都应该知道的 10 个命令

    你可能认为你是 Linux 新手,但实际上并不是.全球互联网用户有 3.74 亿,他们都以某种方式使用 Linux,因为 Linux 服务器占据了互联网的 90%.大多数现代路由器运行 Linux 或 ...

  10. bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火

    每次把元素随便扔随机一个初始解,退火时每次随机拿一个元素扔到随机一个集合里,当温度高时因为状态不稳定扔到那个元素和最小的里边. 如果新解优,更新ans. 把原式拆一下,就可以用int存了. bzoj ...