数据库原理概论

发布时间 2023-09-20 16:02:27作者: Lovi*

数据库原理概率

数据库设计

来自b站某个up一下子忘记了,看到可以提醒一下

image-20230320125133414

(其实除了这些之外,还有防止冗余的方法)

范式

(1)1NF:所有属性都是不可分割的数据项 如果某个属性,例如学校,还可以继续拆分为高中和大学,就不满足1NF了。 1NF是关系数据库需要满足的最低要求

(2)2NF:在满足1NF的前提下,不包含非主属性对码的部分函数依赖(即每 一个非主属性都完全函数依赖于码) 例如在关系R中,码是学号和班级,非主属性是姓名,因为通过学号就能直接 推出姓名了,不需要班级,此处姓名就部分依赖于码了,不满足2NF

(3)3NF:在满足2NF的前提下,不包含非主属性对码的传递函数依赖(即码 应该直接决定非主属性,不能间接决定) 传递函数依赖:若X Y,Y Z,且Z Y,Y X,有X Z,此时称Z对X有传递函数 依赖。 例如在关系R中,码是客户姓名,非主属性是订单编号和订单负责人,通过客 户姓名可以推出他的订单编号,再通过订单编号能推出订单负责人,这种情 况下客户姓名和订单负责人是间接决定的,存在传递函数依赖,不满足3NF

(4)BCNF:消除任何属性对候选码的传递依赖,即每一个决定因素都包含 码,表现为在函数依赖集当中,左边的都包含候选码(整个属性组!) (5)4NF:不允许有非平凡且非函数依赖的多值依赖 多值依赖(个人理解,仅供参考,我觉得不会细考):X,Y,Z属于集合U, 且Z=U-X-Y。当给定一组(x,z)值的时候,可以确定一组Y的值,但这组Y的 值仅仅取决于x,此时有X Y。其实这里就是存在了一对多的关系,即一个x 和一组z有关,但x并不能唯一确定一个z,通过x和z能找到一组y,但你只通过 x也能确定y。

平凡的多值依赖:Z是空集 非平凡的多值依赖:Z不是空集

判断方法与分解方法:

image-20230320125750146

最小函数依赖集

  • step 1: 拆分右侧

    • 例如将A BC拆为A B和A C
  • step 2: 去除自身求闭包

    • 若有有AB C,BC E,AE G,去除AB自身能推出的C,基于剩余的依赖关系求 AB的闭包,若AB通过剩余的关系也能求出C,那么删除AB C这个依赖关系
  • step 3: 左侧最小化

  • 例如目前保留的关系有ABC D,观察左边的ABC当中,A是否能由BC推出,B是 否能由AC推出,C是否能由AB推出。假设C能被AB推出,那么左侧去掉C,更 新为AB D

image-20230320131429595