一篇文章搞懂函数依赖和关系模式范式

关系模式中的属性分为主键属性和非主键属性。主键属性是可以唯一标识一条记录的属性,而非主键属性则是不能唯一标识一条记录的属性。

例如,以下关系模式中,学号是主键属性,姓名和性别是非主键属性:

学号姓名性别
001张三
002李四

在关系模式中,属性之间可能存在函数依赖关系。函数依赖是指一个或多个属性的值可以唯一确定另一个属性的值。例如,学号可以唯一确定姓名和性别,因此学号函数依赖于姓名和性别。

函数依赖分为完全函数依赖、部分函数依赖、传递函数依赖、平凡函数依赖和非平凡函数依赖。

1. 完全函数依赖

完全函数依赖是指在一个关系模式中,如果X是候选码(即可以唯一标识一条记录的最小属性集合),Y是非主键属性,则Y完全函数依赖于X。例如,在以下关系模式中,学号是候选码,姓名和性别完全函数依赖于学号:

学号姓名性别
001张三
002李四

2. 部分函数依赖

部分函数依赖是指在一个关系模式中,如果X不是候选码,Y是非主键属性,则Y部分函数依赖于X。例如,在以下关系模式中,学生编号和课程编号联合才能唯一确定成绩,因此成绩部分函数依赖于学生编号和课程编号:

学生编号课程编号成绩
1001000180
1001000290
1002000185

3. 传递函数依赖

传递函数依赖是指在一个关系模式中,如果X→Y,Y→Z,但X不能→Z,则称Z传递函数依赖于X。例如,在以下关系模式中,学生编号可以唯一确定班级编号,班级编号可以唯一确定班主任姓名,因此班主任姓名传递函数依赖于学生编号:

学生编号班级编号班主任姓名
100101张三
100202李四
100301张三

4. 平凡函数依赖

平凡函数依赖是指在一个关系模式中,如果Y是X的子集,则称Y对X有平凡函数依赖。例如,在以下关系模式中,学号对姓名和性别有平凡函数依赖:

学号姓名性别
001张三
002李四

5. 非平凡函数依赖

非平凡函数依赖是指在一个关系模式中,如果Y不是X的子集,则称Y对X有非平凡函数依赖。例如,在以下关系模式中,学号对姓名和性别有非平凡函数依赖:

学号姓名性别
001张三
002李四

以上就是主键属性和非主键属性以及完全函数依赖、部分函数依赖、传递函数依赖、平凡函数依赖和非平凡函数依赖的详细解释。

下面是关系模式的规范化

关系模式的规范化是指将一个不符合某种范式要求的关系模式,通过分解操作转化为若干个符合要求的关系模式的过程。常见的关系模式范式有第一范式、第二范式、第三范式和BC范式。

1. 第一范式(1NF)

第一范式要求关系模式中的所有属性都是不可再分的原子值。也就是说,每个属性都应该是一个单一的值,不能再分解成更小的数据单元。例如,一个订单表中的商品名称和商品数量不能合并在一起作为一个属性。

例如,以下关系模式不符合第一范式:

订单编号商品信息
1001鞋子,2

可以将其规范化为两个关系模式:

订单编号商品编号商品数量
10010012

商品编号商品名称
001鞋子

2. 第二范式(2NF)

第二范式要求关系模式中的非主键属性必须完全依赖于主键,而不能只依赖于主键的一部分。也就是说,一个关系模式应该只描述一个实体,而不是多个实体。

例如,以下关系模式不符合第二范式:

订单编号商品编号商品名称商品价格
1001001鞋子100
1001002衣服200

可以将其规范化为两个关系模式:

订单编号商品编号商品数量
10010012
10010021

商品编号商品名称商品价格
001鞋子100
002衣服200

3. 第三范式(3NF)

第三范式要求一个关系模式中不能存在非主键属性对主键的传递依赖。也就是说,如果一个非主键属性可以通过其他非主键属性推导出来,那么这个非主键属性就应该被剥离出来形成一个新的关系模式。

例如,以下关系模式不符合第三范式:

学号姓名年龄学院编号学院名称
10001张三2001计算机学院
10002李四2102管理学院
10003王五2201计算机学院

可以将其规范化为两个关系模式:

学号姓名年龄学院编号
10001张三2001
10002李四2102
10003王五2201

学院编号学院名称
01计算机学院
02管理学院
01计算机学院

4. BCNF

BCNF(Boyce-Codd)范式要求一个关系模式中的每个依赖都是由候选键决定的。如果存在不符合这种要求的依赖,则需要将其拆分出来形成新的关系模式。

例如,以下关系模式不符合BCNF:

员工编号员工姓名部门编号
E001张三D001
E002李四D002

其中,部门编号依赖于员工编号和员工姓名,而不是只依赖于员工编号。可以将其规范化为两个关系模式:

员工编号员工姓名
E001张三
E002李四

员工编号部门编号
E001D001
E002D002

以上,就是关系模式规范化的详细解释。关系模式规范化可以帮助我们减少数据冗余和数据异常,提高数据库的性能和数据质量。


如果大家看了还是不太能理解的,建议马上去做做题,我最开始看了好几遍总是看了忘忘了看,但是题做多了反而就熟悉了。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
函数依赖范式是关系数据库设计中非常重要的概念,它们之间存在密切的关系。 函数依赖是指在一个关系模式中,一个或多个属性的值可以唯一地确定其他属性的值。例如,如果在一个学生表中,学生的学号可以唯一地确定学生的姓名和年龄,那么学号就函数依赖于姓名和年龄。 范式是用于规范关系模式设计的一组规则。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和巴斯-科德范式(BCNF)等。这些范式的目的是为了消除数据冗余和提高数据的完整性。 在课堂上讲的例子中,我们以一个学生选课表为例,来说明函数依赖范式的关系。在这个表中,一个学生可以选多门课程,因此表中存在多个重复的学生记录。为了消除数据冗余,我们可以将表进行拆分,得到一个学生表和一个选课表。在这个过程中,我们需要考虑属性之间的函数依赖关系,以满足范式的要求。 在学生表中,学生的学号可以唯一地确定学生的姓名和出生日期,因此学号函数依赖于姓名和出生日期。在选课表中,学号和课程编号可以唯一地确定选课的分数,因此学号和课程编号函数依赖于分数。根据这些函数依赖关系,我们可以将学生表和选课表分别拆分为学生信息表和选课结果表,以满足3NF的要求。 通过这个例子,我们可以看到函数依赖范式之间的紧密联系。在进行关系模式设计时,需要考虑属性之间的函数依赖关系,以满足范式的要求,消除数据冗余和提高数据完整性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值