公司表结构设计的一些规范

马克飞 4月前 184

  • 【强制】所有字段不允许出现null,给各自类型的默认值;任何字段如果为非负数,必须是unsigned。

  • 【强制】任何时候只允许新增字段,禁止删除字段;

  • 【强制】涉及到是否真假,一律0为假否、1为真是;必须使用is_xxx的方式命名,数据类型为unsigned tinyint。

  • 正例 :是否删除is_deleted,1为已删除 0为未删除;是否可用is_available, 1为可用 0为不可用。

  • 【强制】涉及到类别枚举,统一从1开始,不允许从0开- 始。如1私教课、2免费团体、3付费团体课;

  • 【强制】MySQL在Linux下是区分大小写的,库名、表名、字段名必须全为小写,多字母间以下划线_相连,;

  • 【强制】表名、字段名必须具有可读性,不可过长,多字母以下划线_相连;

  • 【强制】所有表设计必须要有comment备注,编码使用utf8;

  • 【强制】所有重要操作,如购卡、订单、权限,都必须要有操作日志表;

  • 【强制】所有表设计都要有id(自增主键,看数据量定义unsigned int或unsigned big int)、create_time(记录生成时间,unsigned int)、update_time(记录更新时间,unsigned int)字段;

  • 【强制】禁用数据库保留字,如select、type、desc、alter、status、range等,请参考MySQL保留字;

  • 【强制】主键索引名为pk_字段名,唯一索引名为uk_字段名;普通索引名为idx_字段名;

  • 【强制】小数类型为decimal,禁止使用float或double,存在精度丢失问题;

  • 【推荐】库名与业务名保持一致;

  • 【推荐】非必要情况尽量不使用text、blob等字段类型,varchar字段尽量不要超过512字节;

  • 【推荐】所有涉及到时间的字段统一使用unsigned int直接表示unix时间戳、所有涉及到金额的字段统一使用unsigned int表示,单位为分

  • 【推荐】字段适当进行冗余以提高查询性能,但必须考虑数据一致性。冗余字段应遵循:

    • 1) 不是频繁修改的字段
    • 2) 不是varchar超长字段,更不能是text字段

    正例 :私教课名、团课名使用频率高,但基本不会改变,可以在相关表如排期表、订单表中冗余课程名字段。

  • 【参考】针对具体情况选择合适的字段类型,不仅可以节约存储空间、索引空间,更能提高查询效率。

  • 正例:如下表所示,其中无符号值可以避免误存负数且扩大了边界范围。

    对象 年龄区间 类型 存储字节 表示范围
    150岁内 unsigned tinyint 1 0~255
    数百岁 unsigned smallint 2 0~65535
    恐龙化石 数千万年 unsigned int 4 0~42.9亿
    太阳 约50亿年 unsigned bigint 8 0~约10的19次方
最新回复 (0)
    • 都市菜鸟网
      2
        立即登录 立即注册 
返回