学习 阿里巴巴 Java开发手册 中 MySQL 制表规范

阿里巴巴是 MySQL 数据库 的老用户了,并且阿里巴巴自己还开发 开源了 MySQL 的 一个分支 AliSQL 

对于阿里巴巴编写的关于 MySQL 数据库 制表 的 规范很有学习价值!

以下是我的一些心得体会

阿里巴巴要求

>>表示 是非 状态 的 字段 字段名 需是  is_xxx 这样 ,这个字段的类型 是 unsigned tinyint 值 1代表'是',0 代表 '否';

本来

*表的字段类型选择=>要求是性能尽量好,占用空间尽量小

优先选用: int -> date time -> enum -> char -> vchar -> text

这里我自己以前喜欢用枚举类型,嘻嘻;

详解 unsigned tinyint 类型

这个数据类型 是 表示 这个数的范围是 非负 的,输入负数 MySQL 会抱错,

将一个字段的 数据类型 设为 unsigned tinyint 可以通过 SQLyog 小海豚的 可视化工具操作,

也可以通过SQL 语句 这样 设置

ALTER TABLE t_food ADD ( age TINYINT UNSIGNED DEFAULT NULL COMMENT '备注');

>>表名 必须使用 小写字母 或 数字 , 字段名 必须使用 小写字母 或 数字 或 下划线

 禁止出现 数字开头,禁止两个下划线中间出现数字;

说明:MySQL 在 Windows 下 不区分 大小写,但是 在 Linux 下 默认 是 区分大小写;

>>表名 不使用 复数 名称

比如表达 食物 就用 food 不要用 foods

>>禁用保留词 ,如 desc / range / match/ delayed 等等,请参考MySQL 官方保留词;

>>索引名 命名 规范 主键索引:pk_字段名;唯一索引:uk_字段名 ;普通索引: idx_字段名;

>>小数 类型 阿里巴巴 的要求是 用 decimal 类型 做存储, 禁止 float 或 double

  因为他俩 存储 小数的时候存在精度损失,

    这是二进制存 十进制小数不可避免的问题,decimal 不会精度损失是底层用字符串存的小数;

    我的理解是根据实际业务需要来,小数存储精度越高,存储空间越大,所以根据自己的精度需要选择小数的存储类型;

>>如果存储的字符串长度特别接近,使用char 定长字符串,

 这个算基本常识了,varchar 与 char 的区别 就不赘述了,不考虑业务情景,char的性能更好;

>>如果存储的 某字段 的值是 文字 ,文字长度超过5000,则定义数据类型是 text,并且与主键对应独立出来做一张

    表,避免影响其他字段索引效率;

>>一张表 必备的 三个字段 id (这个不用多说),  gmt_create(表示某条数据的创建的时间,数据类型是 datetime),  gmt_modified(表示某字段的修改时间,数据类型是 datetime);

阿里巴巴的 推荐 规范

>>表名 最好 是 加上 '业务名称_表的作用'

例如:alipay_task     trade_config  种种

>>库名 与 应用 名称 尽量一致

>>如果修改字段含义或对字段表示状态的追加时,注意及时更新 字段 的注释

>>字段允许 冗余 ,已提高 查询性能,但必须考虑数据一致. 冗余字段 应遵守:

  I 不是频繁修改的字段

       II不是varchar超长字段,更不可能是 text 字段

>>单表行数 超过 500 万 行 或者 单表 容量 超过 2GB 才推荐 分库分表;

   不过这个阿里的运行环境毕竟是一般人不能比的,所以知道有这个事,具体还是根据自己的情况来;

阿里巴巴提供的一些参考

>> 一些字段设置值的范围

对象           年龄区间         字段类型                  字节   表示范围

人           150岁以内       tinyint unsigned         1     无符号 0-255

龟             数百岁             smallint unsigned      2    无符号 0-65535

恐龙化石  数千年             int unsigned               4   无符号 0-约42.9亿

太阳    约50亿年         bigint unsigned          8   无符号 0- 约10的19次方

原文地址:https://www.cnblogs.com/cjd01/p/14071382.html