关系数据库设计

本文深入解析数据库规范化过程,包括函数依赖集的闭包、属性集的闭包、正则覆盖、Boyce-Codd范式(BCNF)及第三范式(3NF)的定义与分解方法。介绍了如何通过分解消除冗余,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)两种闭包

(1)函数依赖集的闭包
  • 逻辑蕴含:给定一个关系模式r(R),如果r(R)的每一个满足F的实例也满足f,则R上的函数依赖f被r上的函数依赖集F逻辑蕴含(f逻辑蕴含F)。主观上来理解,就是函数依赖集F可以推出函数依赖f。逻辑蕴含:给定一个关系模式r(R),如果r(R)的每一个满足F的实例也满足f,\\则R上的函数依赖f被r上的函数依赖集F逻辑蕴含(f逻辑蕴含F)。\\主观上来理解,就是{\color{red}函数依赖集F可以推出函数依赖f。}r(R)r(R)FfRfrFfFFf
  • 函数依赖集F的闭包:就是被F逻辑蕴含的所有函数依赖的集合,记作F+。函数依赖集的闭包可以使用Amstrong公理以及另外三条规则来求:(a)自反律:β⊂α⇒α→β(b)增补律:α→β且γ为一属性集⇒γα→γβ(c)传递律:α→β且β→γ⇒α→γ(d)合并律:α→β且α→γ⇒α→βγ(e)分解律:α→βγ⇒α→β且α→γ(f)伪传递律:α→β且γβ→δ⇒αγ→δ函数依赖集F的闭包:就是被F逻辑蕴含的所有函数依赖的集合,记作F^+。\\ 函数依赖集的闭包可以使用Amstrong公理以及另外三条规则来求:\\ (a)自反律:\beta\subset\alpha\Rightarrow\alpha\rightarrow\beta\\ (b)增补律:\alpha\rightarrow\beta且\gamma为一属性集\Rightarrow\gamma\alpha\rightarrow\gamma\beta\\ (c)传递律:\alpha\rightarrow\beta且\beta\rightarrow\gamma\Rightarrow\alpha\rightarrow\gamma\\ (d)合并律:\alpha\rightarrow\beta且\alpha\rightarrow\gamma\Rightarrow\alpha\rightarrow\beta\gamma\\ (e)分解律:\alpha\rightarrow\beta\gamma\Rightarrow\alpha\rightarrow\beta且\alpha\rightarrow\gamma\\ (f)伪传递律:\alpha\rightarrow\beta且\gamma\beta\rightarrow\delta\Rightarrow\alpha\gamma\rightarrow\deltaFFF+使Amstrongaβααβbαβγγαγβcαββγαγdαβαγαβγeαβγαβαγfαβγβδαγδ
(2)属性集的闭包
  • 函数确定:如果α→B,那么属性B被α函数确定。函数确定:如果\alpha\rightarrow B,那么属性B被\alpha函数确定。αBBα
  • F下α的闭包:函数依赖集F下被α函数确定的所有属性的集合,即为α+。求解F下α的闭包可以先将α加入到α+中,然后循环遍历所有函数依赖Fi(记作αi→βi),如果αi⊂α+,那么就将βi加入到α+中。当α+不再加入新属性,算法终止。F下\alpha的闭包:函数依赖集F下被\alpha函数确定的所有属性的集合,即为\alpha^+。\\ 求解F下\alpha的闭包可以先将\alpha加入到\alpha^+中, 然后循环遍历所有函数依赖F_i(记作\alpha_i\rightarrow\beta_i),\\ 如果\alpha_i\subset\alpha^+,那么就将\beta_i加入到\alpha^+中。 当\alpha^+不再加入新属性,算法终止。FαFαα+Fααα+Fiαiβiαiα+βiα+α+
(3)正则覆盖
  • 目的:删除无关变量,得到最小的覆盖。目的:删除无关变量,得到最小的覆盖。
  • 定义:F的正则覆盖Fc是一个函数依赖集,使得F逻辑蕴含Fc中的所有依赖,而且Fc逻辑蕴含F中的所有依赖。定义:F的正则覆盖F_c是一个函数依赖集,使得F逻辑蕴含F_c中的所有依赖,\\而且F_c逻辑蕴含F中的所有依赖。FFc使FFcFcF
  • 检验A是否为无关变量的方法:(a)如果删掉箭头后面的A,检验新F′能否推出α→A(b)如果删掉箭头前面的A,检验原F能否推出α−{A}→β检验A是否为无关变量的方法:\\ (a)如果删掉箭头后面的A,检验新F'能否推出\alpha\rightarrow A\\ (b)如果删掉箭头前面的A,检验原F能否推出\alpha-\{A\}\rightarrow\betaAaAFαAbAFα{A}β

(二)两种范式

(1)Boyce-Codd范式(BCNF)
  • 定义:对F+中所有形如α→β的函数依赖,下面至少有一项成立:(a)α→β是平凡的函数依赖(即β⊂α)。(b)α是模式R的一个超码。定义:对F^+中所有形如\alpha\rightarrow\beta的函数依赖,下面至少有一项成立:\\ (a)\alpha\rightarrow\beta是平凡的函数依赖(即\beta\subset\alpha)。\\ (b)\alpha是模式R的一个超码。F+αβaαββαbαR
  • BCNF分解BCNF分解BCNF
    步骤:找出非平凡的函数依赖α→β(其中α不是R的超码),用以下两个模式取代R:(a)(α∪β)        (b)(R−(β−α))重复以上过程直至所有的模式都满足BCNF。更一般而言,如果α+同时违反了以下两个条件,且存在函数依赖α→β,则证明R违反了BCNF:(a)α+不包含R−α的任何属性        (b)α+包含R的所有属性步骤:找出非平凡的函数依赖\alpha\rightarrow\beta(其中\alpha不是R的超码),用以下两个模式取代R:\\ (a)(\alpha\cup\beta)\;\;\;\;(b)(R-(\beta-\alpha))\\ 重复以上过程直至所有的模式都满足BCNF。\\ 更一般而言,如果\alpha^+同时违反了以下两个条件,且存在函数依赖\alpha\rightarrow\beta,则证明R违反了BCNF:\\ (a)\alpha^+不包含R-\alpha的任何属性\;\;\;\; (b)\alpha^+包含R的所有属性αβαRRa(αβ)b(R(βα))BCNFα+αβRBCNFaα+Rαbα+R
    BCNF分解一定是无损分解(R1∩R2一定是R1或R2的超码),但并不一定能保持依赖(F上的每一个函数依赖都在其分解后的某一个关系上成立),所以需要引入比BCNF弱的第三范式。BCNF分解一定是无损分解(R_1\cap R_2一定是R_1或R_2的超码),\\但并不一定能保持依赖(F上的每一个函数依赖都在其分解后的某一个关系上成立),\\所以需要引入比BCNF弱的第三范式。BCNFR1R2R1R2FBCNF
(2)第三范式(3NF)
  • 定义:在BCNF的基础上增加一个可选项:(c)β−α中的每个属性A都包含于R的一个候选码中(不要求包含于同一个候选码)。定义:在BCNF的基础上增加一个可选项:\\ (c)\beta-\alpha中的每个属性A都包含于R的一个候选码中(不要求包含于同一个候选码)。BCNFcβαAR
  • 3NF分解3NF分解3NF
    步骤:利用BCNF分解或者正则覆盖将R分解为R1,R2,...,Ri后,如果R1,R2,...,Ri都不包含R的候选码,那么新增一个模式Ri+1,Ri+1由R的候选码组成。步骤:利用BCNF分解或者正则覆盖将R分解为R_1,R_2,...,R_i后,如果R_1,R_2,...,R_i都不包含R的候选码,\\ 那么新增一个模式R_{i+1},R_{i+1}由R的候选码组成。BCNFRR1,R2,...,RiR1,R2,...,RiRRi+1Ri+1R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值