MySQL三范式&逆范式

一、三范式

概念:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则(注:在关系型数据库中这种规则就称为范式)
1、确保每列/字段保持原子性(1NF)
概念:指每个字段不可以再拆分
案例:地区表

id(编号)   address(地址)     #可以拆分:省  市  区
1		    北京北京朝阳区
2			上海上海浦东新区
3			江苏泰州海陵区

2、有主键,非主键字段依赖主键(2NF)
概念:指每个表有一个主键,一个表只描述一件事
案例:用户表

id(编号)  username(用户名)  password(密码)  address(收货地址)

#说明:应该新增收货地址表

3、消除传递依赖,非主键字段不能相互依赖(3NF)
概念:一个表不能包含其他表的非主键字段(一个表只能包含其他包的主键字段)
案例:

#文章表
文章编号      文章标题   	 文章内容       用户ID       #用户姓名(不该有) 
文章表主键    文章表	  	 文章表		 用户表主键    #用户表非主键
#用户表
用户ID    用户姓名   用户年龄 ...

二、逆范式

概念:符合范式设计是为了减少冗余提高读写效率,但有时候我们需要反其道而为之,利用空间来换时间(数据冗余策略),该设计被称之为“逆范式”
案例:

#文章表
编号     标题       内容      评论总数... 
#评论表
编号     所属用户   所属文章   评论内容 ....

正常流: select count(*) from 评论表 where id=当前文章的编号
逆范式: 给文章表加一个“评论总数字段”后期评论时候给该字段+1
设计表推荐如下字段:编号、创建日期、更新日期、是否删除

猜你喜欢

转载自blog.csdn.net/csdn_heshangzhou/article/details/82777978