表结构设计数据表结构设计很基础,也很关键,优秀的表结构设计可以抵御业务发展以及用户剧增带来的挑战与风险。在设计表结构时,简易混用范式化和反范式化。 范式化设计提升增删改效率:建议表结构尽量遵循第三范式原则(即确保主键列之间没有传递函数依赖关系,也就是消除传递依赖),保障结构更加清晰规范,减少冗余字段,提升增删改的效率。 反范式化设计提升查询效率:对于分析查询较多的应用场景,尤其是涉及到多表联查时,可以采用反范式进行优化。即以空间换时间的方式,通过增加冗余字段来提高查询效率。
表字段数据类型设计表字段数据类型的选择,关系到查询效率的高低以及存储空间的大小。
1. 字段能用数值类型,就不要用字符类型;若用字符型,长度尽量设置的短一些。
2. 对于字符类型而言,字符长度固定时简易采用CHAR类型;字符长度不固定时采用VARCHAR类型。
3. 建议使用枚举或整数代替字符串类型。
4. 建议使用 TIMESTAMP 而非 DATETIME。
5. 避免使用BIGINT,建议使用INT + UNSIGNED的方式来扩大一倍的数值容量。
6. 建议用整型来存IP。
数据表设计规范
1. 避免表字段null值出现,建议用其他字符(如默认数字0)代替 null。因为null值难查询、难优化,并且还会占用额外的索引空间。
2. 建议单表字段个数限制在20个以内。
3. 建议每张表都设置主键,且该主键是无业务意义的。
4. 尽量避免外键,建议在应用层实现外键的逻辑。外键不适合高并发场景,大并发下容易产生死锁。