因为数据库的表结构涉及到接下来的所有开发,前前后后已经想了很久了,还是尽快决定下来。
规范
MySQL表设计大致遵循 阿里巴巴Java开发手册,但做出了以下改变:
- 数据表名使用复数形式。
- 长字段定义:大于2048字节,如有同属于一个表内的长字段且逻辑上有一定关联,会被独立出来并归并到另外一个的表里,否则单独列为一个表,禁止索引任何大字段!
- 使用created_at, updated_at TIMESTAMP 替代gmt_create, gmt_modified DATETIME (嗯,我不管2038问题,这是MySQL管的Orz
- 不允许使用NULL,包括deleted_at这种字段,如果nullable字段与其他字段建立Unique关系,会出现可重复问题
- updated_at 字段 默认值使用 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- deleted_at 字段 默认值使用 0
- 除 updated_at, deleted_at 字段外,其余TIMESTAMP字段默认值使用 CURRENT_TIMESTAMP
- ip储存为varchar(40),我认为IPv6没那么容易用完。
总览
适当冗余和反范式,以减少查询复杂度。
所有文件位于GITHUB
选择带外键的来阐述设计想法,以及本地开发使用,但不建用于生产环境。
不带外键的 sql 中删去了部分外键所带来的不必要的索引。
请查看 GITHUB **
-- EOF --
comments