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)

  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/likingzi/p/15407415.html
Copyright © 2011-2022 走看看