1. 函数依赖
在学生信息表中,我们有两个字段:学号和学生姓名。学号是唯一的,而学生姓名可能重复。这里的函数依赖关系是 学号 -> 学生姓名
。这意味着,给定一个学号,我们可以确定一个唯一的学生姓名。这种依赖关系说明了学号决定了学生姓名,而学生姓名的重复性表明它不能单独决定学号。
名字比较抽象,但是不用理会,只需明白什么是函数依赖即可。
学号 | 学生名字 |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王三 |
4 | 张三 |
如何理解函数依赖呢?看到一个数据库表,分析字段,有:学号、学生姓名 。
看到学号是没有重复的是主键,学生姓名有重复的张三。
诀窍:重复的依赖不重复的
学号->学生姓名 (学生姓名依赖于学号)。
2. 完全函数依赖
在学生选课信息表中,我们有三个字段:学号、课程号和成绩。这里的成绩依赖于学号和课程号的组合,即 (学号,课程号)-> 成绩
。这是一个完全函数依赖的例子,因为成绩只能通过同时知道学号和课程号来确定。单独的学号或课程号都不能提供足够的信息来确定成绩。
学号 | 课程号 | 成绩 |
---|---|---|
1 | 3001 | 100 |
1 | 3002 | 97 |
2 | 3001 | 86 |
2 | 3002 | 99 |
完全函数依赖:成绩依赖于(学号+课程号)才能确定成绩是谁的,是哪一门课程的成绩。
满足:
- 通过学号不能推出课程。
- 通过课程号也不能推出成绩
- 就是课程完全依赖(学号+课程号)。
3. 部分函数依赖
在学生身份信息表中,我们有学号、身份证号和姓名三个字段。姓名依赖于学号和身份证号的组合,即 (学号,身份证号)-> 姓名
。然而,如果我们只知道学号或身份证号中的一个,我们仍然可以确定学生的姓名。这种情况下,学号和身份证号中的任何一个都可以推出姓名,所以这是一个部分函数依赖的例子。
学号 | 身份证号 | 姓名 |
---|---|---|
1 | 3001 | 张三 |
2 | 3002 | 王五 |
3 | 3003 | 马琦 |
部分函数依赖就是满足函数依赖的条件(姓名依赖学号和身份证号),然后不满足完全函数依赖,也就是(学号+身份证)其中一个可以推出名字,所以不满足完全函数依赖,因为其中的学号或者身份证均可以推出姓名所以,满足部分依赖。
4. 传递函数依赖
在商品信息表中,我们有商品 ID、商品名称和商品类型三个字段。这里存在两个直接的依赖关系:商品类型依赖于商品名称,商品名称依赖于商品 ID。这两个依赖关系合起来形成了一个传递依赖,即 商品 ID -> 商品类型
。这意味着,尽管商品类型不是直接依赖于商品 ID,但它通过商品名称间接依赖于商品 ID。
商品 id | 商品名称 | 商品类型 |
---|---|---|
1201 | 电脑主机 | 电子器件 |
1211 | 泡面 | 食物 |
9921 | 面包 | 食物 |
1234 | 矿泉水 | 饮品 |
传递依赖就是 x->y ; y->z 可以得出结论:x->z;这就是传递依赖,解释上述表
商品类型依赖商品名称, 商品名称依赖商品 id,所以商品类型依赖于商品 id;
通过这些具体的例子和表格,我们可以更清晰地理解函数依赖的不同类型,以及它们在数据库设计中的重要性。这些概念帮助我们避免数据冗余和更新异常,确保数据的一致性和准确性。在设计数据库时,理解并应用这些原则是至关重要的。