关系数据库范式定义与举例说明

关系数据库的范式是一系列规则,用于减少数据冗余,提升数据库设计的合理性和一致性。以下是主要范式的定义及例子:

第一范式 (1NF)

定义:所有属性都必须是原子性的(不可再分的)。即每一列中的数据都是不可分的单一值。

例子:考虑一个表 Orders,包含如下数据:

OrderIDCustomerNameItems
1AlicePen, Pencil
2BobNotebook

在这个表中,Items 列包含多个商品,不符合1NF。为满足1NF,我们可以将 Items 分解,使每个单元格仅包含一个商品:

OrderIDCustomerNameItem
1AlicePen
1AlicePencil
2BobNotebook

第二范式 (2NF)

定义:在满足第一范式的基础上,每个非主属性都必须完全依赖于主键,不能存在部分依赖

例子:考虑一个 StudentCourses 表,其中主键是 (StudentID, CourseID):

StudentIDCourseIDStudentNameCourseName
1101AliceMath
1102AliceScience
2101BobMath

在该表中,StudentName 只依赖于 StudentIDCourseName 只依赖于 CourseID,这就导致了部分依赖,不符合2NF。

为满足2NF,我们可以分解表为两个表:

Students 表:

StudentIDStudentName
1Alice
2Bob

Courses 表:

CourseIDCourseName
101Math
102Science

StudentCourses 表:

StudentIDCourseID
1101
1102
2101

第三范式 (3NF)

定义:在满足第二范式的基础上,每个非主属性都必须直接依赖于主键,不能存在传递依赖

例子:考虑一个 Employees 表:

EmployeeIDDepartmentIDDepartmentName
110Sales
220Marketing

在此表中,DepartmentName 依赖于 DepartmentID,而 DepartmentID 又依赖于 EmployeeID,因此 DepartmentName 传递依赖于 EmployeeID,不符合3NF。

为满足3NF,可以将 Department 相关信息分成一个单独的表:

Employees 表:

EmployeeIDDepartmentID
110
220

Departments 表:

DepartmentIDDepartmentName
10Sales
20Marketing

这样每个非主属性都直接依赖于主键,符合3NF。

BCNF (Boyce-Codd Normal Form)

定义:在满足3NF的基础上,所有非主属性必须完全依赖于候选键,适用于更复杂的候选键场景。

例子:考虑一个 ClassEnrollment 表,其中 (StudentID, CourseID) 是主键:

StudentIDCourseIDProfessorID
11011001
21021002

假设 CourseID 决定 ProfessorID,那么 ProfessorID 依赖于 CourseID,而非主键组合 (StudentID, CourseID)。此时,我们可以将课程和教授信息分离:

Courses 表:

CourseIDProfessorID
1011001
1021002

ClassEnrollment 表:

StudentIDCourseID
1101
2102

这样满足BCNF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值