【数据库】数据库三大范式解析

数据库三大范式

第一范式是满足了原子性

第二范式是消除了部分依赖

第三范式是消除了传递依赖

第一范式

第一范式是满足了原子性

比如下面的表:

学生ID姓名课程
1张三数学, 英语
2李四物理, 化学

课程里面只能有一个数据,不能两个混杂,所以改成下面的表:

学生ID姓名课程
1张三数学
1张三英语
2李四物理
2李四化学

这样就满足了原子性,实现了第一范式

第二范式

第二范式是消除了部分依赖

什么是部分依赖呢?部分依赖就是C依赖AB,那么缺了A不行,缺了B也不行。

给出下面的销售情况表

OrderIDCustomerIDCustomerNameProductIDProductNameQuantityPrice
1101Alice001Product A210.00
2102Bob002Product B520.00
  • CustomerIDCustomerName 依赖于 OrderID,但它们实际上是属于客户信息。
  • ProductIDProductName 依赖于 OrderID,但它们实际上是属于产品信息。

我们可以这样拆分:

订单表

OrderIDCustomerIDProductIDQuantityPrice
1101001210.00
2102002520.00

这里,OrderID 是主键,CustomerIDProductID 是外键,完全依赖于 OrderID

客户表

CustomerIDCustomerName
101Alice
102Bob

这里,CustomerID 是主键,CustomerName 完全依赖于 CustomerID

产品表

ProductIDProductName
001Product A
002Product B

这里,ProductID 是主键,ProductName 完全依赖于 ProductID

这样就消除了部分依赖

第三范式

第三范式是消除了传递依赖

什么是传递依赖呢?A依赖于B,B最终还得依赖于C,其中C是表的主键,那么这就是一个传递依赖

给出原始课程表:

StudentIDStudentNameCourseIDCourseNameTeacherIDTeacherName
1Alice101Math1Mr. Smith
1Alice102Science2Ms. Johnson
2Bob101Math1Mr. Smith
  • StudentName 依赖于 StudentID,这是一个部分依赖,因为它只依赖于主键的一部分。
  • CourseNameTeacherName 依赖于 CourseIDTeacherID,这也是部分依赖。
  • TeacherName 依赖于 CourseID,这是一个传递依赖,因为它通过 CourseID 间接依赖于 StudentID

对于这个表,我们这样拆分:

学生表

StudentIDStudentName
1Alice
2Bob

课程表

CourseIDCourseName
101Math
102Science

教师表

TeacherIDTeacherName
1Mr. Smith
2Ms. Johnson

选课表

StudentIDCourseIDTeacherID
11011
11022
21011

从而实现:

  • 学生表只包含学生编号和姓名,消除了对课程编号的依赖。
  • 课程表只包含课程编号和课程名称,消除了对教师编号的依赖。
  • 教师表只包含教师编号和教师姓名。
  • 选课表将学生、课程和教师的关系连接起来,消除了传递依赖。
  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值