MySQL 三种范式以及反范式

  • A+
所属分类:MySQL

第一范式

确保数据表中每列(字段)的原子性,即每个字段都是最小单位,不可拆分。

如:用户表(user)中的 user_name,password,nick_name。

第二范式

在第一范式的基础上,保证表中的每列都与主键相关。

如果一个关系满足第一范式,并且除了主键外的其余字段都依赖于主键,则满足第二范式。

如:一个用户只有一个角色,而一个角色对于多个角色,可参考以下建表:

user 用户表:user_id,user_name,password,nick_name,role_id

role 角色表:role_id,role_name

第三范式

在第二范式的基础上,确保表中的列都与主键直接相关,而不是间接相关。

如:一个用户可以多个角色,一个角色也可以对应多个用户,可参考以下建表:

user 用户表:user_id,user_name,password,nick_name

role 角色表:role_id,role_name

user_role 中间表: id,role_id,user_id

像这样,通过中间表来建立用户表与角色表,且符合范式化的原则,就可以称为第三范式。

反范式

反范式指的是通过增加冗余或者重复的数据来数据库的读性能。

如:在上述 user_role 表中加入 role_name ,减少 join 次数。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: