mysql学习之三大范式

数据库的三大范式:     1NF:列不可再分
2NF:列必须与主键直接相关
3NF:列之间不存在传递依赖

1.要求数据表中的列是不可再分列,列为原子列,要求表中每一列只能包含一种数据类型,就目前关系型数据来说,不可能设计出不符合第一大范式的表

例子:

错误:

用户表1

用户编号   用户名字   用户信息

修改后1(及一列只有一种数据类型,数据类型与列(一对一关系)):

 

用户表2

用户编号   用户名字    用户密码  手机号         详细地址

 

2.在满足第一大范式的前提下,要求表中的每一列都必须直接跟主键相关,不能间接相关

(要有主键,表中所有列直接关联主键)

 

错误表

商品表

商品id 商品名字  商品单价 库存量  分类名 分类编号 分类备注

1      美的空调   2900.8    20      家电    10     null

2      长虹电视   2000      20      家电    10     null

 

修改后A+B表:类别,编号与商品id无直接联系与商品编号直接联系:

商品表:

商品id   商品名   单价  库存    类别编号

  1     美的空调 2900.8   20       10

  2     长虹电视 2000     20       10

 

类别表:

类别编号  类别名  类别备注  

10         家电     null  

 

3.第三范式要求建立在第二范式基础上 ,要求表中不存在非主键字段对主键字段的传递依赖,例如(主键A--->B--->C

 

错误表(用户表与订单表存在依赖关系不能存在同一表)

订单表

订单号   商品号  商品名  单价  购买数量   总价格用户id  用户名   用户的地址

001        1    美的空调2900.8   2        5801.6  1       softeem   湖北武汉

002        1    美的空调2900.8   10      29008   2       admin     湖北武汉      

 

修改后:

商品表:

商品id   商品名   单价  库存    类别编号

  1     美的空调 2900.8   20       10

  2     长虹电视 2000     20       10

 

用户表:

用户id    用户名   手机号   邮寄地址

 1        softeem   110      湖北武汉

 2        admin     120     湖北武汉

 

订单表:

订单号    购买量    商品id   用户id  总价   购买时间

001        2          1         1    5801.6   XXXX

002        10         2         2    29008    XXXX


总结:

1NF:列不可再分

2NF:列必须与主键直接相关

3NF:列之间不存在传递依赖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值