数据库的三大范式: 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:列之间不存在传递依赖

被折叠的 条评论
为什么被折叠?



