MySQL数据库三大范式和反范式

10 篇文章 0 订阅
9 篇文章 0 订阅
第一范式(1NF):

数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。

Table: t_user_info

idinfo(address + mobile)
主键四川省成都市高新南区天府大道北段1700号(13312341234)
idaddressmobile
主键四川省成都市高新南区天府大道北段1700号13312341234
idprovincecitydistrictaddressmobile
主键四川省成都市高新南区天府大道北段1700号13312341234
第二范式(2NF):

满足1NF后要求表中的所有列,都必需依赖于主键,而不能有 任何一列与主键没有关系(一个表只描述一件事情)。

例如:订单表只能描述订单相关的信息,所以所有的字段都必须与订单ID相关。
产品表只能描述产品相关的信息,所以所有的字段都必须与产品ID相关。
因此在同一张表中不能同时出现订单信息与产品信息。

Table:t_order (old)

oidorder_sngoods_namegoods_price
主键cd201801010001书籍100

Table:t_order (new)

oidorder_sngoods_idgoods_num
主键cd201801010001书籍1

Table:t_goods

goods_idgoods_namegoods_price
主键书籍100
第三范式(3NF)

满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)

例如:一个用户可以对应多个角色,一个角色也可以对应多个用户。则可以按如下方式建立数据表关系,使其满足第三范式。

Table:t_user 用户表

uidusernamepassword
主键namepass

Table: t_role 角色表

role_idname
主键name

Table: t_user_role用户-角色中间表

iduser_idrole_id
主键11

像这样,通过第三张表(中间表)来建立用户表和角色表之间的关系,同时又符合范式化的原则,就可以称为第三范式。

4. 反范式化

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

Table: t_user_role用户-角色中间表,id,user_id,role_id,role_name

iduser_idrole_idrole_name
主键11超级管理员

例如:在上例中的user_role用户-角色中间表增加字段role_name。
反范式化可以减少关联查询时,join表的次数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值