zoukankan      html  css  js  c++  java
  • 学习 阿里巴巴 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次方

  • 相关阅读:
    20175215 2018-2019-2 第十周java课程学习总结
    2018-2019-2 20175215 实验三《敏捷开发与XP实践》实验报告
    MyCP(课下作业,必做)
    2018-2019-1 20175234 《信息安全系统设计基础》有关系统调用的部分学习
    2018-2019-1 20175234 《信息安全系统设计基础》第2周学习总结
    一个想要拥有正常的F1~F12的联想小新潮
    2018-2019-1 20175234 《信息安全系统设计基础》第1周学习总结
    Visual C++ 6.0精简绿色版下载及简单使用教程
    20175234 2018-2019-2 实验五 网络编程与安全
    20175234 2018-2019-2 实验四 Android程序设计
  • 原文地址:https://www.cnblogs.com/cjd01/p/14071382.html
Copyright © 2011-2022 走看看