• 数据库建表规范(摘自rrc-wiki)


    1 基础要求

    以下为一般业务场景的通用要求

    1.1 使用innodb引擎,字符集编码为UTF-8;

    1.2 有自增主键,类型建议为bigint;

    1.3 表数据的增删改,不使用并且依赖外键,触发器,存储过程;

    1.4 非空约束必须为not null;

    2 字段要求

    2.1 不使用enum枚举类型,可用int,varchar等替代;

    2.2 精确的数值计算使用decimal类型;

    2.3 字符小于255并且长度较固定时,使用char类型,其它情况使用varchar类型;

    2.4 时间字段,createtime updatetime等unix时间戳字段直接使用int类型,日期优先使用timestamp类型,需要较大时间跨度的情况下再使用datetime;

    createtime updatetime不推荐使用int类型,可读性太差,除非性能可能成为瓶颈

    3 索引要求

    3.1 索引根据实际情况优化,原则上索引的数量不超过字段数的20%;

    3.2 根据索引覆盖,最左原则等原则建索引;

    3.3 有唯一语义的情况下使用uniqe索引;

    3.4 区分度不高的情况下,不必建索引(依据:过滤后的结果集/总量 > 1/10)

    • 例如:需要查询某个电话从某个product进来的线索详情,只需要在phone建索引,不需要phone+product的联合索引,因为product区分度低

    4 变更要求

    对于已经上线的表进行变更时要考虑对线上业务的影响;

    4.1 所有的表结构的操作都需要在线下进行测试;(通过阿里云创建临时库,进行测试,估计运行时间)

    4.2 对于牵涉到删除索引的操作,需要确认索引缺失可能造成的查询性能下降;

    4.3 对于小表(10万行以下),可以确认后执行;

    4.4 对于大表,必须在低峰期(上午9点前或者凌晨)执行,推荐凌晨执行,出现故障影响更可控;

    4.5 对于确定的执行时间超过10分钟并且会造成锁表的,推荐使用 创建新表,同步旧表数据,rename的方式来更新;

    CREATE TABLE `rrc_order`.`cm_user_c2_intent_20160912` LIKE `rrc_order`.`cm_user_c2_intent`;
    
    
    ALTER TABLE `rrc_order`.`cm_user_c2_intent_20160912`  
        CHANGE COLUMN `created_at` `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录生成时间|2016-09-17' ,  
        CHANGE COLUMN `updated_at` `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录变更时间|2016-09-17' ,  
        ADD INDEX `update_time_index` (`updated_at` DESC);
    
    
    INSERT INTO `rrc_order`.`cm_user_c2_intent_20160912` SELECT * FROM `rrc_order`.`cm_user_c2_intent`;
     
    INSERT INTO `rrc_order`.`cm_user_c2_intent_20160912` SELECT * FROM `rrc_order`.`cm_user_c2_intent` WHERE `id` > (SELECT MAX(`id`) FROM `cm_user_c2_intent_20160912`);
    
    RENAME TABLE  
        `rrc_order`.`cm_user_c2_intent` TO `rrc_order`.`cm_user_c2_intent_temp`,  
        `rrc_order`.`cm_user_c2_intent_20160912` TO `rrc_order`.`cm_user_c2_intent`,  
        `rrc_order`.`cm_user_c2_intent_temp` TO `rrc_order`.`cm_user_c2_intent_20160912`;

    4.6、其他tips:

    操作前确保有dms的连接在,防止出现问题时连接被占满,无法连接数据库;

    如果操作中出现故障,尽量将流量先从故障实例切走(例如从库出现问题,可以把读请求都切到主库),再进行故障分析;

    5 大数据建表规范

    schema规范 

    6 参考文档

    其他细节可以参考编写指南,大部分情况下适用。

     链接: https://pan.baidu.com/s/1OE3SQrB1BmGSHDiCGcwzwQ  密码: mn4s

  • 相关阅读:
    设计模式_2_简单工厂、工厂方法、抽象工厂比较
    SQL模拟padding函数
    MySqlHelper c#访问MySql的工具类
    常见数据库设计(1)——字典数据
    常见数据库设计(2)——历史数据问题之单记录变更
    设计模式_1_单例模式
    代码调用存储过程超时,SQL Server Management Studio里运行很快 (改进)
    转:Rowid和Rownum区别
    Oracle数据库中system和sys的区别
    转:Python之全局变量
  • 原文地址:https://www.cnblogs.com/wt645631686/p/13878530.html
Copyright © 2020-2023  润新知