数据库知识点(关系数据理论)

依赖:

例如 姓名->年龄(如果没有重名),即知道姓名即可知道年龄

术语:
对于X->Y,称X为决定因素。若Y为X的子集,则称为平凡函数依赖,否则非平凡
若X->Y,Y->X则可记为X<–>Y

如果对于X的任意真子集Z,都有Y不依赖于Z,则称Y对X为完全函数依赖(F)反之为部分函数依赖(P)

闭包:

公理系统:
1.自反率:Y若为X的子集,那么X->Y
2.增广率:X->Y, 那么 XZ->YZ
3.传递率:X->Y ,Y->Z, 那么X->Z

常见的使用方法:X->Y由增广率,两边同乘X,有XX=X->XY,由此得到X->XY

求对应元素的闭包(以AB为例):
1.首先先将其闭包初始值设置为AB
2.利用公理系统求出A,B,AB(即其所有组合)的函数依赖,将依赖他们的元素加入闭包
3.重复2过程,直到没有新的元素加入闭包
作用:求码,此过程实质上展现了对应元素对于所有元素的表现能力,若该元素的闭包为整体元素,说明其能作为一个码。若该码的任意真子集都不能成为码,则其为候选码

分解

标准:
1.具有无损连接性
2.保持函数依赖
由上形成了三种标准:满足1,满足2,12均满足

无损连接性的判断算法:

对于R(U,F)以及其分解R1,R2…
1.建表,每一行的标题为Ri的对应元素,每一列的标题为U中元素
2.初始化,将行标题中包含的元素在对应列中标识为aj,其他空位标识为bij
3.扫描,根据F中每一个依赖,先找到依赖左边的元素对应列,找出其中符号相同的行,在每一个对应行将依赖右边的元素对应的列进行标识,标识方法为若该行出现aj,则全标识为aj,否则标识为bmj,m为其中i的最小值
4.当出现某一行全部都为aj,说明为无损连接
5.如果扫描前后表格无变化,则终止

实质:利用依赖进行推导,看看是否能推导出所有元素,即能否通过自然连接对原关系进行还原
图表展示过程

保持函数依赖的判断算法:

对于R(U,F)以及其分解R1,R2…
对于每一个关系Fi,设为X->Y
1.如果Fi中包含的元素(XY),存在一个分解Ri,使得XY属于Ri,那么关系Fi保持
2.如果不存在这样的分解,则使用XYGP算法求出W,看Y是否属于W,是则保持
如果所有F均保持则为保持函数依赖
XYGP算法:
对于X->Y
首先初始化W=X
然后W=W∪((W∩Ri)+∩Ri) ,+号表示闭包
依次循环,直到对于每一个Ri都不再发生变化

范式

高级范式为低级范式的子集,BCNF介于3,4范式之间

1NF

所有关系模型一定是1NF

2NF

满足非主属性完全依赖于任何一个候选码的关系数据库
不满足2NF会产生以下问题:
1.插入异常
2.删除异常
3.修改复杂

3NF

2NF + 非主属性对码无传递函数依赖(不存在足够的非主属性的话也满足)

BCNF

每一个决定属性集都包含候选码,则R∈BCNF

最小函数依赖

步骤:
1.用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性,例如X->YZ,变成X->Y,X->Z;
2.去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
3.去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A 属于 (X)+,则Y是多余属性,可以去掉。

模式分解

对于R(U,F)

分解成3NF,只保证函数依赖
1.求出最小函数依赖F1
2.将F1中每一个函数依赖组成新的集合
3.将未出现在F中的U中元素单独组成一个集合
4.将所有集合整合在一起,若某个集合为另一个集合的子集,那么可以将其消去

分解成3NF,保证函数依赖和无损连接
在上述方法的最后加入一个候选码的集合并进行子集合并

分解成BCNF的无损连接
1.先按照上页步骤分解为3NF
2. 若某个表Ui不属于BCNF,原因是存在关系 X->A,则, XA分解为一个表,Ui-A 剩余属性一个表。
如: U={A,B,C,D,E },F = {AB->C,B->D,D->E,C->B }, 分解为3NF 为 R1(A,B,C) R2(B,D) R3(D,E)
R1 不属于BCNF, 分解为 (C,B),(A,C)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
增广拉格朗日(augmented Lagrangian)是将拉格朗日乘子法与求解约束优化问题的惩罚函数法相结合而形成的一种方法。具体来说,增广拉格朗日方法通过添加一个额外的惩罚项到原问题的拉格朗日函数中,来使得原问题的限制条件满足。这个惩罚项的系数也称为“惩罚因子”,它控制了约束条件的满足程度。 在matlab中,可以使用fmincon函数来实现增广拉格朗日方法。例如,假设我们要求解下面的约束优化问题: minimize f(x) subject to g(x) <= 0 where f(x)和g(x)是实数值函数,x是一个n维向量。 使用增广拉格朗日方法重写该问题的惩罚函数如下: Lf(x,λ) = f(x) + λg(x) + (ρ/2)*g(x)^2 其中,λ是一个与限制条件相关的拉格朗日乘子,ρ是惩罚因子。增广拉格朗日方法的关键是要选择合适的λ和ρ,以使得惩罚项的影响最小化,达到最优解。 在matlab中,可以定义一个匿名函数,将原问题重写为增广拉格朗日形式,然后使用fmincon函数来求解该问题的最优解。例如,下面是一个使用增广拉格朗日方法求解约束优化问题的matlab代码示例: % 定义原问题中的函数f(x)和限制条件g(x) f = @(x) x(1)^2 + x(2)^2; g = @(x) x(1) + x(2) - 2; % 定义增广拉格朗日函数Lf(x,λ) lambda = 0; % 初始值 rho = 10; % 初始值 Lf = @(x,lambda,rho) f(x) + lambda*g(x) + (rho/2)*g(x)^2; % 定义约束条件函数,用于传递给fmincon函数 constraints = @(x) deal([],g(x),[]); % 使用fmincon函数求解增广拉格朗日问题的最优解 x0 = [0;0]; % 初始解 options = optimoptions('fmincon','Algorithm','interior-point'); % 设置算法 [x,fval,exitflag,output,lambda] = fmincon(@(x) Lf(x,lambda,rho),... x0,[],[],[],[],[],[],constraints,options); 在上面的代码中,我们使用了fmincon函数,其中lf定义了增广拉格朗日函数,options指定了求解算法。通过调整lambda和rho的值,可以不断调整惩罚因子,直到达到最优解为止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值