第一范式:属性不能重复,属性不可拆分
EG: 编号 品名 ____进货___ _____销售_____ 备注
数量 | 单价 数量 | 单价
编号 品名 进货数量 进货单价 销售数量 销售单价 备注
第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性
EG: 比如一张表中有这么些属性:key1,key2,列1,列2,列3
其中key1和key2组成主键,第二范式就是说列1、2、3完全依赖于key1+key2,而不是仅依赖于key1或者仅依赖于key2(也就是部分依赖)。
第三范式:如果数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。
EG:
商品名称 价格 商品描述 重量 有效期 分类 分类描述
可乐 3.00 250ml 2014.6 酒水饮料 碳酸饮料
苹果 8.00 500g 生鲜食品 水果
存在以下转递函数依赖关系:
(商品名称)->(分类)->(分类描述)
也就是说存在非关键字段“分类描述”
对关键字段“商品名称”的传递函数依赖
BCNF : 在第三范式的基础之上,数据库表中如果不存在任何字段对任一候选关键字的传递函数依赖则附合BC范式。
也就是说如果是复合关键字,则复合关键字之间也不能存在函数依赖关系。
EG: 供应商 商品ID 供应商联系人 商品数量
饮料一厂 1 张三 10
饮料一厂 2 李四 20
饮料二厂 1 王五 20
-- ------------------------------------------------------------------------------------
供应商联系人只能受雇于一家供应商,每家供应商可以供应多个商品则存在如下决定关系:
(供应商,商品ID)->(联系人,商品数量)
(联系人,商品ID)->(供应商,商品数量)
存在下列关系因此不符合BCNF要求:
(供应商)->(供应商联系人)
(供应商联系人)->(供应商)
1、超键(super key): 在关系中能唯一标识元组的属性集
2、候选键(candidate key): 不含有多余属性的超键
3、主键(primary key):从一个关系的多个候选键中,选定一个作为主键
4、主属性: 任何一个候选键中的属性