vlambda博客
学习文章列表

Mysql schema设计中的缺陷

  1. 太多的列

  2. 太多的关联

  3. 全能的枚举

  4. 变相的枚举

  5. 非此发明的NULL


1、多的列

从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的


2、太多的关联

EAV设计模式 - 实体(Entity)-属性(Attribute)-值(Value)是一个糟糕的设计模式,在Mysql下不能靠谱的工作。Mysql限制了最多只能61张表,但是EVA数据库需要许多自关联。

如果希望查询执行的快速且并发性好的,单个查询最好在12个表以内。


3、全能的枚举

避免将一些可能涉及多个值的字段,用枚举来设计,这样如果要扩展,将是一个很糟糕的设计,因为每一次都是需要做一次ALTER TABLE,在早期版本,这个操作是阻塞的。

这种可以用整数作为外键关联到字典表活着查找表来查找具体的值


4、变相的枚举

枚举列允许在列中存储一组定义值中的单个值,集合(set)列则允许在列中存储一组定义值中的一个或者多个值,有时这会造成混乱。

如果这里真和假不会同时出现,那么毫无疑问应该使用枚举列替代集合列



5、非此发明的NULL

如果一定要存储一个“空值” 不一定非得使用null,也可以是0,某个特殊值,或者空字符串替代,但是还是要看场景,替代方案收益大,就用替代方案,不行也可以使用null



下一节 范式和反范式