关系型数据库范式

1 篇文章 0 订阅

1NF:列的不可拆分,

把(学生编号;姓名;年龄)作为一个字段,不满足1NF
地址字段可细分为(省;市;地区;详细地址),不满足1NF

2NF:满足1NF,非主键列完全依赖于主键,而不是依赖于主键的一部分;

选课关系表:SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分)
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
存在如下关系:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
即非主键列依赖部分主键列而非完全依赖的情况
不满足2NF

3NF:满足2NF,非主键列只直接依赖于主键,不依赖于非主键列(冗余);

学生表:Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话)
所在学院→学院地点等信息
不满足3NF

BCNF:满足3NF,主键列不依赖于主键列

仓库管理:StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量)
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都可以作为key
存在如下关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
这就是主键列决定主键列的情况
不满足BCNF

改为两张表:
仓库管理:StorehouseManage(仓库ID, 管理员ID)
仓库:Storehouse(仓库ID, 存储物品ID, 数量)

4NF:满足BCNF,消除非平凡的多值依赖

多值依赖就是一个表中多对多的关系,如果可以分成两列,这两列多对多,这就平凡的多值依赖,如果是分成三列,固定某一列的值,其他两列多对多,这就是非平凡的多值依赖,第四范式要消除的就是非平凡的多值依赖。函数依赖是特殊的多值依赖,因为多对多其实也是一对多。

表:
(课程,学生,先修课)
(JAVA,未来程序员1,高数)
(JAVA,未来程序员1,线代)
(JAVA,未来程序员1,概率论)
(JAVA,未来程序员2,高数)
(JAVA,未来程序员2,线代)
(JAVA,未来程序员2,概率论)
右如下关系:
课程:学生 = 1:n
课程:先修课 = 1:n
当固定课程的时候,有:
学生:先修课 = n:n
是非平凡的多值依赖
不满足4NF


改为:
表1:(课程,教师)
表2:(课程,参考书)

参考文献:

https://blog.csdn.net/weixin_33023513/article/details/113391105

https://zhuanlan.zhihu.com/p/94019884

https://blog.csdn.net/qq_29034779/article/details/81697467

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值