数据库三大范式

2019-10-25  本文已影响0人  蛮荒月

1NF: 强调列的原子性

第一种表设计:

userID userName sex age tel region
1 22 123 河南省北京市永旺区
2 21 456 河南省安阳市朝阳区23号
3 21 456 河南省安阳市朝阳区22号

注意: 不符合第一范式,region列不具有原子性,可以拆分成省市县

第二种表设计:

userID userName sex age tel province city region
1 22 123 山东省 北京市 永旺区
2 21 456 山西省 海淀市 朝阳区23号
3 21 456 河北省 承德市 朝阳区253号

符合第一范式


2NF: 表中每列与主键相关,而不是和主键的某部分相关(针对联合主键)

例子引入

设计一个订单信息表,订单有多种商品,将订单编号和商品编号作为联合主键

第一种表设计:

错误示范.png

第二种表设计:

正确示范.png

第一种表设计不满足第二范式。
订单编号和商品编号作为联合主键,由于商品名称,单位,价格这几列只与商品编号有关,与订单编号无关,因此与主键(联合主键)无关,违反范式第二原则;


3NF: 确保主键列之间没有传递函数依赖关系。

例子引入

需求描述:
需要再数据库种存储如下信息:
学生编号
学生卡号
用户ID号
操作员级别
操作日期
操作时间

第一种表设计

studentNo cardNo userID userLevel date time
021101 1 Operator 操作员 2011/10/24/ 11:100

不符合第三范式,在表种,一个userID能确定一个userLevel。
userLevel依赖userID, 而 userID 依赖studentNo和cardNo,这样就导致了依赖传递

第二种表设计(符合第三范式)

studentNo cardNo userID date time
021101 1 Operator 2011/10/24/ 11:100
userID userLevel
Operator 操作员

搬运自stutterr, 侵删,各种侵各种删

上一篇 下一篇

猜你喜欢

热点阅读