日期:2014-05-16  浏览次数:21153 次

mysql开发规范文档

Author:sakte

Time:2013/02/27

 

mysql开发规范文档

 

1.mysql数据库命名规范

2.表结构设计、数据类型选择

3.开发注意事项

 

1.mysql数据库命名规范

1.1 命名规范:

Table/view/procedure/function/package

object类型简称+功能模块简称的小写字母+“_”+业务意义小写单词,如:

主键/外键/索引:

object类型简称+”_”+表名简称+字段名

 

object类型简称

Table:t

View:v

Procedure:p

Function:fn

Package:pk

主键 :pk

外键 :fk

索引 :idx

 

Eg:

Trader后台功能:tbk_operate_log

搜索功能表:ts_operate_log

索引命令:idx_tablename_column

 

2.表结构设计、数据类型选择

  2.1 常用数据类型

    整型:tinyint,smallint,mediumint,int,bigint。一般int就够用了

浮点型:DECIMAL(M,D)精准,不建议用DECIMAL,建议乘以固定倍数转换成整数存储,可以节省存储空间,且不会带来任何附加维护成本 

  • TINYINT>SMALLINT>MEDIUMINT>INT>BIGINT>DECIMAL(存储空间逐渐变大,而性能却逐渐变小)。   
  • 自增序列类型的字段只能使用int或bigint,且明确标识出无符号型(unsigned),当该字段超过42亿时,才使用bigint  

    字符型:varchar,char,ENUM和SET,text

字符列选择类型时,尽量不要使用TEXT数据类型,lob类型更是要坚决杜绝,仅当字符数超过20000时,可以采用text类型,且所有使用text类型的字段,必须和原表拆分,与原表主键单独存储在另外一个表里。它的处理方式决定了它的性能要低于char或者是varchar类型的处理。定长字段,建议使用CHAR类型,不定长字段尽量使用VARCHAR,且仅仅设定适当的最大长度,而不是非常随意的给一个很大的最大长度限定,因为不同的长度范围,MySQL也会有不一样的存储处理。对于状态字段,可以采用char类型,也可以尝试使用ENUM来存放,因为可以极大的降低存储空间,而且即使需要增加新的类型,只要增加于末尾,修改结构也不需要重建表数据。如果是存放可预先定义的属性数据呢?可以尝试使用SET类型,即使存在多种属性,同样可以游刃有余,同时还可以节省不小的存储空间。

 

   日期时间:常用TIMESTAMP,date

     需要精确(年月日时分秒)的时间字段,可以使用datetime,timestamp ;如果时间字段只需要精确到天,那就用date类型

     

  2.2 表结构基本设计

    2.2.1.字段字段使用not null

      MySQL NULL类型和Oracle的NULL有差异,会进入索引中,如果是一个组合索引,那么这个NULL类型的字段会极大影响整个索引的效率。此外,NULL 在索引中的处理也是特殊的,也会占用额外的存放空间