软件工程之数据库规范

2019-11-26 16:29:13 语法专题 243 0

表约束

| 约束名 | 详情 | | ---- | ---- | | 数据表名 | 最大长度不超过50 | | 字符编码 | utf8mb4 | | 业务数据引擎 | InnoDB |

公共字段

每个表都得有以下属性

~~~sql id int(11) unsigned NOT NULL AUTOINCREMENT COMMENT '主键', status tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态(0:删除,1:上线,2:未上线)', create_time datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '创建时间', update_time timestamp NOT NULL DEFAULT CURRENTTIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', ~~~

说明
  • 它们是表的公共属性
  • 它们不能作为业务数据
    • 如,涉及开始时间、最后一次某个属性更新时间,请新建业务字段
  • status 表达的是数据状态,属于数据逻辑。因此,它的枚举可以在 Dao

字段约束

每个表都得受以下属性

  • 每个字段必须 NOT NULL
    • NULL是需要一个标志位的,占用1个字符
  • 每个字段必须有 默认值
  • 每个字段必须有 字段备注
  • 非负数字,必须 unsigned
    • 表达负数会占用一个符号位
    • 若没有 fill_zero 的限制,长度统一设置为1

MYSQL规约

索引命名规范

注:索引前缀、每个数据列名 之间依据以顺序 以 _ 分隔

| 索引类型 | 索引前缀 | 备注 | 示例 | | ---- | ---- | ---- | ---- | | index | idx | 单索引与联合索引 | KEY `idx-userid` (`userid`) ; KEY `idx-userid-goodsid` (user_id,goods_id) | | unique | unique | 唯一索引 | UNIQUE KEY `unique-tradeno` (`tradeno`) | | primary | | 不需要前缀 | PRIMARY KEY (`id`) |

分表原则

  • 规则a
    • 单表数据量不超过 500W 行 或 容量不超过 2GB
  • 规则b
    • 预测未来三年内如果数据量会超过规则a,则考虑三年内应先分多少表
    • 如果未来数据量有可能远超当前预测规划的,提前想好对应方案
  • TODO

分库原则

  • TODO
注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处