闭包

image-20230213200634282

主要需要注意传递律还有合并规则,还有函数依赖的闭包格式是怎么写的(X^+^F)

image-20230213200945199

image-20230213201237208

image-20230213201431721

最小依赖集

image-20230213202156277

image-20230213203013274

关系代数表达式

image-20230213203124275

image-20230213204737655

image-20230213205219450

image-20230213205443430

image-20230213210103976

SQL语句

image-20230213210444301

image-20230213210820089

image-20230213211118218

image-20230213211332159

image-20230213211352031

image-20230213211800415

image-20230213212052370

image-20230213212145295

image-20230213212446372

image-20230213212519432

image-20230213212722034

image-20230213212736245

image-20230213212756745

image-20230213212826528

image-20230213212941003

image-20230213212950258

范式

  • 超键
    超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键

  • 候选键
    候选键(candidate key):不含有多余属性的超键称为候选键。也就是关系中的一个属性组,其值能唯一标识一个元组。若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选键。

  • 主属性:任何一个候选键中的属性称作主属性。(请记住这个概念)

  • 主键
    主键(primary key):用户从一个关系的多个候选键中,选定一个作为主键。

结合具体的例子进行解释,现有学生表如下:
学生(学号,姓名,性别,身份证号)

学号 姓名 性别 身份证号
1 小王 344
2 小吴 354
3 小丽 364
4 小张 374
  • 超键
    超键的定义可知,在学生表中含有学号或者身份证号的任意组合都可以唯一标识一个学生,那么它们就是此表的超键。如:(学号)、(身份证号)、(学号,姓名)、(身份证号,性别)等。

  • 候选键
    候选键属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。对于(学号、姓名)来说,去掉姓名后仍是一个超键,那么它就不是候选键。其中,学生表中的候选键为:(学号)、(身份证号),主属性就是学号、身份证号。

  • 主键
    主键就是候选键里面的一个,用户可以选择,那么在这里我们选择(学号)作为学生表的主键。

  • 键 = 码,英文key。

  • 函数依赖

    也就是一个或者一组属性的值可以决定其他属性的值。候选键都可以做到。

  • 部分依赖

    举个例子,现有一关于学生的关系模式Student(学生编号 , 学生姓名, 班级编号, 院系, 课程编号 , 成绩)

学生编号 学生姓名 班级编号 院系 课程编号 成绩
S01 杨明 D01 思齐 C01 90
S02 李婉 D01 思齐 C01 87
S01 杨明 D01 思齐 C02 92
S03 刘海 D02 述圣 C01 95
S04 安然 D02 述圣 C02 78
S05 乐天 D03 省身 C01 82

(学生编号#、课程编号#)作为主键,可以唯一标识每条元组,但是对于学生姓名、学生所属的班级编号院系,这三个属性可以直接通过学生编号来确定,在这里课程编号#显得很多余。于是称,学生姓名、班级编号、院系对(学生编号#、课程编号#)部分函数依赖

即,非主属性部分函数依赖

  • 传递依赖

    学生编号可以唯一确定他所在的院系,但是注意到这中间存在传递过程,即学生编号唯一确定该学生所对应的班级编号班级编号对应唯一的院系。我们称,院系学生编号传递函数依赖。

  • 范式

关系数据库中的模式设计要满足一定的规范,引入了范式这一概念。
不管做哪种范式的设计,最终要的思想是“one fact in one place”,也就是“一事一地”。

  • 1NF
    定义:关系中每一分量不可再分。即不能以集合、序列等作为属性。(也就是不能表中套表,要保证数据的原子性。)

举例

学生编号 课程编号
S01 {C1,C2,C3}
S02 {C1,C4}

它就不满足1NF,因为{C1,C2,C3}和{C1,C4}是集合。

修改为符合1NF:

学生编号 课程编号
S01 C1
S01 C2
S01 C3
S02 C1
S02 C4
  • 2NF

  • 定义:在1NF基础上,消除非主属性对键的部分依赖,则称它符合2NF。
    根据上面对部分依赖的分析,对于学生姓名、学生所属的班级编号院系,这三个属性可以直接通过学生编号来确定,在这里课程编号#显得很多余。也就是,学生姓名、班级编号、院系对(学生编号#、课程编号#)部分函数依赖。把Student表进行拆分,可以消除部分依赖。

其中,学生表Student如下:

学生编号 学生姓名 班级编号 院系
S01 杨明 D01 思齐
S02 李婉 D01 思齐
S01 杨明 D01 思齐
S03 刘海 D02 述圣
S04 安然 D02 述圣
S05 乐天 D03 省身

学生-课程表如下:

学生编号 课程编号 成绩
S01 C01 90
S02 C01 87
S01 C02 92
S03 C01 95
S04 C02 78
S05 C01 82

符合2NF。

  • 3NF
    定义:在2NF基础上,消除非主属性对键的传递依赖,则称它符合3NF。

根据上面对传递依赖的分析,对于Student表,学生编号可以唯一确定他所在的院系,但是注意到这中间存在传递过程,即学生编号唯一确定该学生所对应的班级编号,班级编号对应唯一的院系。我们称,院系对学生编号传递函数依赖。

把Student表继续进行拆分,可以消除传递依赖。
其中,学生表Student如下:

学生编号 学生姓名 班级编号
S01 杨明 D01
S02 李婉 D01
S01 杨明 D01
S03 刘海 D02
S04 安然 D02
S05 乐天 D03

班级-院系表如下:

班级编号 院系
D01 思齐
D02 述圣
D03 省身

符合3NF。

  • BCNF

image-20230214113419103

image-20230214114101467

image-20230214120523750

image-20230214120457414

image-20230214121309384

ER图

image-20230214123313529

image-20230214121836515

对于1:n,将它俩关系即雇佣的所有属性加到n所在表中,并把1所在表的主键也加到n所在表中

m:n的 和三个及以上的连接,直接用关系表示(单独的拿出来作为一个讨论的),需要包括连接端的主键和自己的属性,连接端的主键为外码

image-20230214132128949

image-20230214131439480

image-20230214131620700

并发调度的正确结果就是可串行化的并发调度的结果

image-20230214132034581

image-20230214132347402