美文网首页
数据库设计规范

数据库设计规范

作者: ChenyuMa | 来源:发表于2018-06-06 09:29 被阅读0次
    1. 数据库字段设计规范
      a) 所有数据库对象名称必须使用小写字母并用下划线分割(大小写敏感)
      b) 所有数据库对象名称禁止使用Mysql保留关键字
      -- 关键字 'from'
      c) 数据库对象的命名药能做到见名识义,并且最好不要超过32个字符
      d) 所有表必须使用Innodb存储引擎
      e) 数据库和表的字符集统一采用UTF-8(避免产生乱码)
      f) 所有表和字段都需要添加注释
      使用comment从句添加表和列的备注
      从一开始就进行数据字典的维护
      g) 尽量做到冷热数据分离,减少表的宽度
      减少磁盘IO,保证热数据的内存缓存命中率
      禁止在表中建立预留字段

    2. 索引设计规范

      a) 限制每张表上的索引数量,建议单张表索引不超过五个
      b) 禁止给表中每列都建立单独的索引
      c) 每个Innodb表必须有一个主键
      不使用更新频繁的列作为主键,不使用多列主键
      不使用UUID,MD5,HASH,字符串列作为主键
      主键 建议 选择使用自增ID
      d) 常见索引列建议
      select, update, delete 语句的where从句中的列
      包含在ORDER BY,GROUP BY, DISTINCT中的字段
      多表JOIN的关联列
      e) 如何选择索引列的顺序
      对于频繁的查询优先考虑使用覆盖索引
      尽量避免使用外键
      不建议使用外键约束,但是表与表之间的关联键上建立索引是必须的

    1. 数据库SQL开发规范
      a) 所有存储相同数据的列名和列类型必须一致
      b) 优先使用符合存储需要的最小的数据类型
      c) 对于非负数据才采用无符号整型进行存储
      SIGNED INT -2147483648~ 2147483648
      UNSIGNED INT 0~4294967295
      d) VARCHAR(N) 中的N代表的是字符数,而不是字节数
      使用UTF8存储汉字VARCHAR(255) = 765 个字节
      过大的长度会消耗更多的内存
      e) 避免使用TEXT,BLOB数据类型(一般使用varchar)
      分离到单独的扩展表中
      只能进行前缀索引,而且不能有默认值
      f) 避免使用ENUM数据类型
      g) 字符串存储日期型的数据(不正确)
      缺点1:无法用日期函数进行计算和比较
      缺点2:用字符串存储日期要占用更多的空间
      使用TIMESTAMP或者DATIME类型存储时间 (DATIME8个字节,但是字符串需要16个字节)
      TIMESTAMP 只能存储1970-01-01 00:00:01 ~ 2038-01-19 03:13:07
      TIMESTAMP占用4字节和INT相同,但比INT可读性高
      超出TIMESTAMP取值范围的使用DATETIME类型
      h) 非精准浮点与精准浮点
      非精准浮点
      float,double
      精准浮点(适用于财务)
      decimal (计算时不会丢失精度,占用空间由定义的宽度决定,可用于存储比bigint更大的整数类型)

    j) 每个字段尽可能具有Not null属性
    k) 建议使用预编译进行数据库操作
    l)避免使用隐式转换
    m) 避免使用select*必须使用select <字段列表>查询
    消耗更多的CPU和IO以及网络带宽资源
    无法使用覆盖索引
    减少表结构带来的影响
    n) 禁止使用不包含字段列表的inset语句
    o) 避免使用子查询,可以把查询优化为jon操作
    子查询的结果集无法使用索引
    子查询会产生大量的临时表,消耗过多的CPU及IO
    p) 避免使用JOIN关联太多的表
    q)减少同一数据库的交互次数
    数据库更适合处理批量操作
    合并多个相同的操作到一起,可以提高处理效率
    r)使用in代替or
    in的值不要超过500个
    in操作可以有效的使用索引
    s) 禁止使用order by rand()进行随机排序
    会把所有符合条件的数据装载到内存中进行排序
    会消耗大量的CPU和IO及内存资源
    推荐在程序中获取一个随机值,然后从数据库中获取数据
    t) where从句禁止对列进行函数转换和计算
    对列进行函数转换或计算会导致无法使用索引
    where data(createtime) = '20160901' (不好)
    where createtime > = '20160901' and createtime < '20160902' (更好)

    1. 数据库操作行为规范

    相关文章

      网友评论

          本文标题:数据库设计规范

          本文链接:https://www.haomeiwen.com/subject/zvwvsftx.html