关系数据库理论

课本第六章 关系数据库理论

一、函数依赖:

1.完全函数依赖

通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB。

2.部分函数依赖

通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。

3.传递函数依赖

通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么说C传递依赖于A。

4.平凡依赖

定义:

若X->Y,且Y是X的子集(对任一关系模式,平凡函数依赖必然成立),就是平凡函数依赖。

例如:

在学生表(学号,姓名,年级)中,(学号,姓名)可以推出学号和姓名其中的任何一个,这就是平凡函数依赖.

直白点说,就是只要Y是X的子集,Y就依赖于X。

5.非平凡依赖

定义:

若X->Y,但Y不是X的子集,就是非平凡函数依赖。

例如:

在学生表(学号,姓名,年级)中,通过(学号,姓名)可以推出这个学生所在的年级,但年级不是(学号,姓名)的子集,这是非平凡函数依赖.((学号,姓名)就是一个x,学号或者姓名就是一个x’)。

函数依赖举例说明

Student表:Sno(学号),Sdept(系),Mname(系主任名字),Cno(课程号),Grade(成绩)

ex1: (Sno,Cno)->Grade是完全函数依赖,在该表中Sno和Cno都无法单独决定Grade,因此可以说,Grade完全依赖于Sno和Cno。

ex2: (Sno,Cno)->Sdept是部分函数依赖,因为Sno->Sdept成立,而Sno为(Sno,Cno)的真子集。

ex3: Sno->Sdept,Sdept->Mname,(加上条件Sdept不能决定Sno),此时可以说Mname传递依赖于Sno。

完全函数依赖:

{学号,课号}–>成绩

学号+课号 可以决定 成绩 但只有学号or只有课号无法决定成绩

部分函数依赖:

{学号,课号}–>姓名

只有学号就能决定姓名 (课号是冗余的)

二、码

超集:

在该图中,我们称S2为S1的子集,S2为S1的超集。

码:

1.超码:

定义:能够唯一标识一条记录的属性或属性集。

特点:

  1. 可能包含无关属性
  2. 超码的任意超集也是超码。(通俗讲,就是同一个关系r上,如果某个属性集合S包含超码K,即K是S的子集,那么S也是 r 的超码)
  3. 一张表(一个关系)一定有超码,因为至少所有属性的组合一定是超码,能唯一确定一个元组
  4. 不唯一

2.候选码:

定义:能够唯一标识一条记录的最小属性集

特点:

  1. 是超码的一个子集
  2. 任意真子集都不可能是超码,候选码就是最小的超码
  3. 没有无关属性
  4. 不唯一

3.主码:

定义:某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条)

特点:

  1. 是候选码之一
  2. 唯一或没有
  3. 由数据库设计者指定,不指定的话表就没有主码

4.主属性与非主属性

主属性 包含在任一候选码中的属性称主属性。简单来说,主属性是候选码所有属性的并集。

非主属性 不包含在候选码中的属性称为非主属性,也称为非码属性。

—ppt分类:—

1.candidate keys 候选码

能够决定其他所有列的因素,能够确定唯一一行。

2.composite keys 复合码

包含两列及以上的码。

3.primary keys 主码

当设计数据库时,会选取候选码中的其中一个充当主码,具有唯一确定一行的作用。

4.surrogate keys 代理码

当不适合用任何一个候选键作为主键时(如数据太长等),添加一个没有实际意义的键作为主键,这个键就是代理键。

ppt解释:人为加入的充当主码作用的列。

(代理码一般情况下对用户没有意义,在生成报表时进行隐藏)

5.foreign keys 外码

子数据表中出现的父数据表的主码,称为子数据表的外码。

假如我们还有一个教师表,每个教师都有自己的编号,假设老师编号在教师表中是主键,在学生表中它就是外键

6.all-key 全码

当所有的属性共同构成一个候选码时,这时该候选码为全码。

(教师,课程,学生)假如一个教师可以讲授多门课程,某门课程可以有多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要区分关系中的每一个元组,这个关系模式R的候选码应为全部属性构成 (教师、课程、学生),即主码。

三、范式:

第一范式(1NF)
数据库的每一个项都是不可分割的原子数据项,第一范式无重复的域。

不满足1NF:

满足1NF:

第二范式(2NF)
在第一范式的基础上,每一个非主属性完全依赖于任何一个候选码,即消除了部分函数依赖。

如下:图1满足1NF,但是姓名部分依赖于(学号,课名),故不满足2NF.

图1:

满足2NF的表:(图2:)

第三范式(3NF)
在2NF的基础上,任何非主属性不传递依赖于码,即进一步消除传递依赖。

图2中,学号决定系名,(包含条件系名不决定函数),系名又决定系主任,所以系主任传递依赖于学号,故不满足3NF。

满足3NF的图为:(图3:)

**巴斯-科德范式(BCNF)**BCNF是3NF的改进形式

一个满足BCNF的关系模式的条件:

1.所有非主属性对每一个码都是完全函数依赖。

2.所有的主属性对每一个不包含它的码,也是完全函数依赖。

3.没有任何属性完全函数依赖于非码的任何一组属性。
BCNF

满足3NF,消去决定因素不是码的函数依赖

若一张表的数据包括:“书号、书名、作者”,其中书号决定书名和作者,但是作者和书名同时可以决定书号,(作者,书名)非码,即现在就出现了决定因素不是码的函数依赖。
书号→(书名,作者)
(作者,书名)→书号

我们可以通过分解为两张表,实现BCNF:

四、多值依赖:

在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。例如,教师和学生之间没有直接联系,但教师和学生可通过系名,或任课把教师和学生联系起来。

总结规范化的过程:

(1)取原始的1NF关系投影,消去非主属性对键的部门函数依赖,从而产生一组2NF关系。
(2)取2NF关系的投影,消去非主属性对键的传递函数依赖,产生一组3NF关系。
(3)取这些3NF的投影,消去决定因素不是键的函数依赖。产生一组BCNF关系。
(4)取这些BCNF关系的投影,消去其中不是函数依赖的非平多值依赖,产生一组4NF关系。
(来源:百度)

参考:

https://blog.csdn.net/sumaliqinghua/article/details/85872446

https://blog.csdn.net/panzelinsdo/article/details/102779683?
utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight

https://blog.csdn.net/wenco1/article/details/88077279

https://www.cnblogs.com/guojiaxue/p/12655068.html

https://blog.csdn.net/SevenGirl2017/article/details/77678233?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

函数依赖 候选码 主码 第三范式 BCNF 多值依赖相关推荐

  1. 数据库—属性 码 候选码 主码 外码 主属性 非主属性

    问题产生:在学习第6章关系数据理论时,由于之前关于码的各种概念不熟悉,导致不理解. 资料来源:数据库系统概论–王珊 概念及举例 (1):基础定义 实体:客观存在的物体 属性:一个实体的某个特征 码:能 ...

  2. 彻底搞懂数据库中的超码,候选码,主码,主属性,非主属性,全码的区别

    超码:某一个能够唯一标识一条记录的属性或属性集 候选码:某一个属性组的值能够唯一的标识一个元组,而其子集不能,则称该属性组为候选码,候选码是一类特殊的超码,包含候选码的属性组一定是超码 主码:若一个关 ...

  3. 超码 候选码 主码

    例如:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生.假设学生(实体)具有多个属性:学号,身份证号,姓名,性别.因为通过学号可以找到唯一一个学生,所以{学号}是一个 ...

  4. “主码的属性不能称之为主属性”和“若属性X函数依赖于属性Y时,则属性X与属性Y之间具有多对一的联系”

    这是一个初学者很容易绕晕的知识点,这里我用图文的形式让他们更加形象化 候选码:若关系中某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码 主码:若一个关系中有多个候选码,则选定其中 ...

  5. 【数据库】码,超码,候选码与主码,外码

    码的作用 用于区分不同元组.也就是不同行,此表中则为区分不同学生. 超码 超码 是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组: e.g. 在上表中,{学号} 可唯一标 ...

  6. mysql 中外码和主码_数据库原理与应用(6)——关系的候选码、主码和外码、关系完整性、关系代数、元组关系的演算、域关系演算...

    一.关系的候选码 候选码(Candidate Key):能唯一标识关系中元组的一个属性或属性集 性质:唯一性,最小性 二.关系的主码和外码 主码(Primary Key):从多个候选码中选择一个作为查 ...

  7. 数据库(笔记)——候选码、主码、外码以及关系的完整性

    关系的码与关系的完整性 关系的码 1. 候选码 2. 主码 3. 外码 关系的完整性 总结 关系的码 1. 候选码 候选码是能够唯一标识关系中某一个元组的一个属性或属性集,也叫候选键 如: 学生关系中 ...

  8. 数据库中码、超码、主码、候选码

    码 码是一个或多个属性的集合. 超码 是一个或多个属性的集合,超码中的这些属性可以让我们在一个实体集中唯一地标识一个实体. 候选码 候选码是极小的超码集,也就是它的任意真子集都不是超码,而他本身是超码 ...

  9. 数据库原理和应用(6)—— 候选码、主码和外码,关系的完整性、关系代数、关系的演算

    一.候选码.主码和外码 1. 候选码(Candidate Key) 定义:能唯一标识关系中元组的一个属性或属性集,称为候选码. 性质:具有唯一性和最小性. 2. 关系的主码和外码 主码 定义:从多个候 ...

最新文章

  1. 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)
  2. Java字节码浅析(—)
  3. Java中的split函数
  4. Redis学习之Sentinel(四)
  5. rabbitmq文档
  6. 鸿蒙济判法讲义,2020-02-09《薛兆丰经济学讲义》读书笔记
  7. 齐鲁计算机函授学院,【齐鲁师范学院继续教育学院自考网站】2021自考本科|电话|专业有哪些...
  8. django “如何”系列4:如何编写自定义模板标签和过滤器
  9. 当他不再爱你的时候(男女生一定要看)
  10. 腾讯滑块验证码识别和加速度模拟(1)
  11. 试题 算法提高 盾神与积木游戏
  12. 大学四年生活总结_大学四年生活总结
  13. 企业上云要几步?中拓互联奉送企业上云全攻略
  14. 基于fpga的单线激光雷达数据处理
  15. LabVIEW编更改研华数字板卡中DIO方向 例程与相关资料
  16. windows10的几个常用快捷键
  17. 企业非法集资风险预测
  18. 菜鸟窝大数据课程(免费试听):Linux基础课程
  19. CF662C Binary Table FWT
  20. VaR风险价值-Python版本

热门文章

  1. Android中在自己的程序中打开另一个apk(应用)
  2. C语言:输入10个整数,比较求最大值
  3. c语言ifb0是否正确的是,EDA技术与Verilog-中国大学mooc-题库零氪
  4. 微信小程序基本使用流程
  5. Tesseract与tess4j验证码识别
  6. 算法工程师研发技能表
  7. 二叉树的性质与推导及常见习题整理
  8. 计算机专业 英语六级作文,英语六级作文范文大全:信息技术
  9. The Snowball
  10. 太阳能光伏系统新能源环保类企业公司通用官网/蓝色大气产品案例展示