zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    阿里双11,如何实现每秒几十万的高并发写入
    记住:永远不要在 MySQL 中使用 UTF-8
    史上最烂的项目:苦撑 12 年,600 多万行代码
    除了不要 SELECT * ,使用数据库还应知道的11个技巧!
    厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
    请停止学习框架
    基于 MySQL 主从模式搭建上万并发的系统架构
    JS获取节点
    JS函数
    JS
  • 原文地址:https://www.cnblogs.com/likingzi/p/15407415.html
Copyright © 2011-2022 走看看