Mysql schema设计中的缺陷
太多的列
太多的关联
全能的枚举
变相的枚举
非此发明的NULL
1、太多的列
从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的
2、太多的关联
EAV设计模式 - 实体(Entity)-属性(Attribute)-值(Value)是一个糟糕的设计模式,在Mysql下不能靠谱的工作。Mysql限制了最多只能61张表,但是EVA数据库需要许多自关联。
如果希望查询执行的快速且并发性好的,单个查询最好在12个表以内。
3、全能的枚举
避免将一些可能涉及多个值的字段,用枚举来设计,这样如果要扩展,将是一个很糟糕的设计,因为每一次都是需要做一次ALTER TABLE,在早期版本,这个操作是阻塞的。
这种可以用整数作为外键关联到字典表活着查找表来查找具体的值
4、变相的枚举
枚举列允许在列中存储一组定义值中的单个值,集合(set)列则允许在列中存储一组定义值中的一个或者多个值,有时这会造成混乱。
如果这里真和假不会同时出现,那么毫无疑问应该使用枚举列替代集合列
5、非此发明的NULL
如果一定要存储一个“空值” 不一定非得使用null,也可以是0,某个特殊值,或者空字符串替代,但是还是要看场景,替代方案收益大,就用替代方案,不行也可以使用null
下一节 范式和反范式