在MySQL中为保证数据库存储数据的性能,方便编程人员对数据的操作,势必要有一些科学、合理的设计数据库结构规则,这在关系型数据库中称它为范式。

每一列的属性都是不可再分保证其原子性,属性相近或类似的合并成一列,尽量减小数据的冗余。
以下student表“地址”属性包含了国家与城市信息,不满足第一范式。


第二范式是指一行记录只表述一件事,有重复的数据应把表拆开来。
student表经第一范式调整后,“国家”、“城市”属性会有大量重复数据,造成数据冗余。要把student拆分成一张表述学生信息表和一张地址信息表,再用外键约束把它们关联起来。


在满足第一、二范式基础上,表内每个属性都是与主键是直接联系而不是间接关系。
比如student增加一列“班主任”,那么“班主任“信息应单独建个表,否则会导致很多麻烦。如”黄药师“班主任是新入职的,手上还没有学生如放在student表是不合适的;”杨康“班主任走了,学生信息与班主任信息在同一张表时,删除杨康的同时把学生信息一并删除是错误的。
小结
范式是设计数据库的基本概念,使用它可建立尽可能科学、合理的数据库结构。但在一些场合,出于特殊考虑牺牲结构换取性能也是可以理解的。不要一味的追求范式,应采用需求->性能->结构的理念来设计数据库。
网友评论