【mysql】表结构设计规范

1、在创建表结构时,表名、字段需要见名知意,不采用拼音

create table  `tb_abc` (
  `id` int(10) unsigned not null auto_increment comment  "此处写你的注释",
  `name` varchar(50) not null comment '此处写你的注释',
  )engine=innodb default charset=utf8mb4 comment '此处写你的注释';
  • 一定要有主键!一定要有主键!
  • 整形自增(一般用无业务意义的id)(用mycat如有自增功能,就不需要在表结构里边定义自增)。
  • 不要在字段里边自己定义字符集
  • 字段和表要有comment

 

2、首先明确规定:函数,触发器,视图,外键;所有逻辑业务上实现,尽量不使用存储过程

  • 一定使用innodb 引擎,不允许用myisam。
  • 业务表设计时必须包含日期字段,createitme和lastupdatetime

         每个表的update 语句,必须包含对 UpdateTime的更新

         所有字段建议为not null  , 时间类型必须为not  null

  • 必须要有主键,主键尽量用自增字段类型,推荐类型为 INT或者 BIGINT类型。
  • 需要多表 join的字段,数据类型保持绝对一致。
  • 当表的字段数较多时,将表分成两张表,一张作为条件查询表,一张作为详细内容表。
  • 当字段的类型为枚举型或布尔型时,建议使用 tinyint类型。(不用char或者varchar)

 

3、一定要整型ID作为主键(没有主键的表有严重性能问题)

  • 字段类型越短越好
  • 常见字段类型(一般不允许用text和blob),若必须使用则拆分到单独的表
  • 尽量不要使用default null,字段都定义为:not null default ‘合理默认值’

 

4、为什么字段类型越短越好(能用整形的尽量用整形,比如tiny代替char(1))等

1> 更少的存储空间

2>更少的磁盘IO

3> 更少的网络IO

4>更少的MySQL计算空间

5> 更少的APP计算空间

6>整形存储和运算代价比字符型小

  • 有text字段的,最好请分表。(本质上说,不是mysql不适合存储text,而是在太多的情况下我们期望mysql能够更加高效的提供小数据查询/事务处理)
  • 表字段数要少而精

 

5、为什么必须有自增整形主键,一般该字段没有业务意义;少用唯一键

789140-20171225195310462-1264918186.png

 

6、为什么尽量不要使用default null ?

  • 索引不会包括NULL值。影响索引的统计信息,影响优化器的判断。
  • 复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。
  • 所以我们在数据库设计时不要让字段的默认值为NULL。
  • 字段统一加上not null default ‘合理默认值’
  •  

7、常见问题一——int(10)和int(2)区别

有别于char(x)和varchar(x),int(x)中的x表示的是整型(tinyint smallint mediumint int bigint)在添加了zerofill描述符后的显示宽度,所以在不添加zerofill描述符的时候,int(1) 和int(10) int(100) 都没什么区别。

789140-20171225195311790-363953054.png

 

8、常见问题二——怎么存储IP

用什么字段类型存储IP,char(15),varchar(15)还是int unsigned?

image

 

9、常见问题三——乱用字段类型

  • 所有字符串都用varchar(255)------------>给合适长度就好
  • 所有的数字都用bigint------->给合适类型,比如tinyint、smallint等
  • 所有数字都用decmal-------->不精确值,可以使用其他浮点型,或者用整形来代替
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读