【软考】数据库范式详解 (1NF、2NF、3NF、BCNF;包括候选键、非平凡函数)

一、范式介绍

1NF、2NF、3NF和BCNF是关系数据库中常用的范式(Normalization)概念,用于设计规范化的数据库模式,确保数据库的数据结构良好、无冗余、便于管理和维护。下面详细描述每个范式,并进行区分,并举例说明:

1、第一范式(1NF):

  • 定义:要求数据库表中的每个列都是原子性的,即每一列都不可再分。
  • 区分:1NF主要解决的问题是每列的原子性,确保数据没有重复项。
  • 示例:假设有一个学生表,其中包含学生ID、姓名和联系电话,每个属性都是原子性的,没有重复值。

2、第二范式(2NF):

  • 定义:在满足第一范式的基础上,要求非主属性完全依赖于候选键,即不存在部分依赖。
  • 区分:2NF主要解决的问题是消除部分依赖,确保每个非主属性完全依赖于候选键。
  • 示例:考虑一个订单表,包含订单ID、产品ID、产品名称和产品价格,其中订单ID和产品ID是候选键,产品名称和产品价格完全依赖于候选键。
候选键(Candidate Key)

是在关系数据库中用来唯一标识每条记录的一组属性(列)。候选键的特点是:

唯一性:候选键的值在整个表中是唯一的,没有重复的记录。
最小性:候选键的组合是最小的,即不能再去掉任何一个属性而保持唯一性。
.
候选键通常用于确定关系数据库中的主键,因为主键必须满足唯一性和最小性的要求。当存在多个候选键时,可以选择其中一个作为主键,而其他的候选键则成为备选的候选键或是唯一键(Unique
Key)。
.
举例说明:

假设有一个学生表,包含以下属性:

学生ID(StudentID) 姓名(Name) 学号(StudentNo) 手机号(PhoneNumber) 在这个表中,学生ID、学号和手机号都有可能作为候选键,因为它们都具有唯一性和最小性的特点。例如,如果学生ID是唯一的且最小的,那么学生ID就是候选键之一。同样,学号和手机号也可以作为候选键。
.
候选键的选择取决于具体的业务需求和数据特点。在设计数据库表时,需要仔细考虑哪些属性能够唯一标识每条记录,从而确定候选键和主键。

3、第三范式(3NF):

  • 定义:在满足第二范式的基础上,要求不存在传递依赖,即非主属性不依赖于其他非主属性。
  • 区分:3NF主要解决的问题是消除传递依赖,确保每个非主属性只依赖于候选键
  • 示例:继续使用订单表的例子,如果产品表包含产品ID、产品名称和供应商信息,供应商信息依赖于产品ID而不是订单ID,可以将供应商信息独立出来,避免传递依赖。

4、Boyce-Codd范式(BCNF):

  • 定义:在满足第三范式的基础上,要求每个非平凡函数依赖都是候选键的超键,即不存在非平凡的主属性对候选键的部分依赖。
  • 区分:BCNF是对第三范式的强化,主要解决的问题是消除主属性对候选键的部分依赖,确保每个非平凡函数依赖都是候选键的超键。
  • 示例:继续使用订单表的例子,如果订单表包含订单ID、客户ID和客户姓名,其中订单ID是候选键,客户姓名依赖于客户ID而不是订单ID,需要将客户信息独立出来,符合BCNF。
非平凡函数依赖(Non-Trivial Functional Dependency)

在数据库设计中,非平凡函数依赖是指存在关系 R 中的两个或多个属性之间的依赖关系,其中右侧属性(依赖结果)不是左侧属性(依赖因子)的子集。换句话说,非平凡函数依赖意味着属性之间存在具有实际意义的依赖关系,并且右侧属性不能通过左侧属性的某种子集来确定。
.
具体来说,对于关系R中的属性集合 X 和 Y ,如果 X 的取值能唯一确定 Y 的取值,并且 Y 中的属性不能通过 X 中的任何真子集来确定,那么称 X 函数决定Y,即 X → Y 是非平凡函数依赖。
.
举例说明:

假设有一个订单表,包含以下属性:

订单号(OrderID) 产品ID(ProductID) 产品名称(ProductName) 产品价格(ProductPrice)
在这个表中,如果我们知道订单号(OrderID),就可以确定对应的产品ID(ProductID),因为一个订单对应唯一的产品。这种依赖关系表示为 OrderID → ProductID,是一个非平凡函数依赖。因为订单号能够唯一确定产品ID,并且产品ID不能通过订单号的任何真子集来确定。
.
另外,如果我们知道产品ID(ProductID),也可以确定对应的产品名称(ProductName)和产品价格(ProductPrice),因为每个产品ID对应唯一的产品名称和价格。这种依赖关系表示为 ProductID → ProductName, ProductPrice ,也是一个非平凡函数依赖。
.
非平凡函数依赖在数据库设计中很重要,它们决定了数据库中的数据关系和数据完整性。在规范化数据库时,需要识别并消除非平凡函数依赖,以确保数据库表的结构合理、减少数据冗余和不一致性。

总的来说,1NF确保数据的原子性,2NF解决部分依赖,3NF解决传递依赖,BCNF进一步解决主属性对候选键的部分依赖。这些范式的目标是规范化数据库结构,减少数据冗余和不一致性,提高数据的完整性和一致性。

后续加例题,持续更新中,关注我的专栏。。。

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值