希赛考试网
首页 > 软考 > 软件设计师

数据库范式例题

希赛网 2024-07-02 08:32:57

在数据库设计中,范式是一个重要的概念。范式是一组规则,用于规范关系型数据库中表的设计。较高级别的范式会进一步规范关系型数据库的表,从而提高表的规范化程度,减少数据冗余,增加数据的完整性和一致性。本文将通过一个例题,从多个角度来探讨范式的应用。

范式的级别

范式共有6个级别:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。下面我们将通过一个例题来说明。

假设有一个学生选课的数据库,其中包括三个表:

- 学生表(Student):学生编号(student_id)、学生姓名(name)、年龄(age)

- 课程表(Course):课程编号(course_id)、课程名称(name)、教师编号(teacher_id)、学分(credit)

- 选课表(Selection):学生编号、课程编号、成绩(score)

第一范式

第一范式的规定是“属性不可再分”,即每一列的值都是原子性的,不可再分。我们可以发现上述数据库的三个表都满足了第一范式的要求。

第二范式

第二范式的规定是“每个非主属性都完全依赖于主键”,即每个表都应当有一个主键,非主属性只能依赖于主键。在上述例子中,学生表的主键是学生编号(student_id),课程表的主键是课程编号(course_id),选课表由学生编号(student_id)和课程编号(course_id)构成的复合主键。其中,选课表中成绩(score)只依赖于复合主键,因此该表也已经满足第二范式的要求。

第三范式

第三范式的规定是“非主属性不传递依赖于主键”,即非主属性不能依赖于非主属性,只能依赖于主键。在上述例子中,课程表的教师编号(teacher_id)只依赖于课程编号(course_id),因此不满足第三范式的要求。为了满足第三范式的要求,可以将课程编号(course_id)和教师编号(teacher_id)分别放在两个表中,形成关于课程和教师的两个表。这样,如果教师编号发生变化,只需要修改教师表,而不需要在多处修改课程表。

巴斯-科德范式(BCNF)

一些数据库学者认为BCNF比第三范式更高级,是在第三范式的基础上进一步规范完整性约束。在上述例子中,存在一个函数依赖关系:课程编号(course_id)->课程名称(name)、学分(credit)、教师编号(teacher_id)。因此,该表不满足BCNF要求。

第四范式和第五范式

第四范式和第五范式相对较少使用,一般只在大型数据库中使用。第四范式的规定是“没有多值依赖”,即每个属性都唯一。第五范式的规定是“没有逆转依赖”,即没有非主属性依赖于非主属性。这些规则都更加严格,一般不常用。

软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件