找到给定函数依赖集的最小覆盖

Posted

技术标签:

【中文标题】找到给定函数依赖集的最小覆盖【英文标题】:finding the minimal cover of a given set of functional dependencies 【发布时间】:2014-07-05 20:06:28 【问题描述】:

我有一组关系模式的函数依赖项,需要找到最小覆盖。我了解消除冗余线路的基本概念,但我正在努力完成它。完成此任务的最有效方法是什么?

这些是函数依赖:

client      --> office

stock       --> exchange, dividend

broker      --> profile

company     --> stock

client      --> risk_profile, analyst 

analyst     --> broker

stock, broker   --> investment, volume

stock       --> company

investment  --> commission, return

stock, broker   --> client

account     --> assets

【问题讨论】:

【参考方案1】:

转换所有 FD,使任何 FD 的 RHS 仅包含单个属性

client      --> office
stock       --> exchange
stock       --> dividend
broker      --> profile
company     --> stock
client      --> risk_profile
client      -->analyst
analyst     --> broker
stock, broker   --> investment
stock, broker   --> volume
stock       --> company
investment  --> return
investment  --> commission
stock, broker   --> client
account     --> assets

下一步是我们需要寻找 LHS 上的冗余属性

选择在 LHS 上具有 2 个或多于 2 个属性的 FD

1.stock, broker   --> investment

从 LHS 中一次删除一个属性并计算剩余属性的 clouser,如果属性的 clouser 包含已删除的属性,那么您实际上可以删除该属性。

删除股票表格 1 并为经纪人计算 clouser

(broker)+ = broker,profile,investment,return ,commission

其中不包含库存,因此您无法删除库存

删除经纪人表格 1 并计算股票的 clouser

(stock)+ = stock,exchange,dividend,investment,return,commission,company

其中不包含代理,因此您无法删除代理

你可以为跟随 FD 玩同样的游戏

2.stock, broker   --> volume
3.stock, broker   --> client

对于 FD 3。您会发现可以删除经纪人,从而导致以下 FD

client      --> office
stock       --> exchange
stock       --> dividend
broker      --> profile
company     --> stock
client      --> risk_profile
client      -->analyst
analyst     --> broker
stock, broker   --> investment
stock, broker   --> volume
stock       --> company
investment  --> return
investment  --> commission
stock       --> client
account     --> assets

最后一步是寻找冗余的 FD。 要检查形式为 X ---> Y 的 FD 是 X 的冗余计算 clouser 并检查它是否包含 Y,如果是这种情况,那么您可以安全地从最小覆盖集中删除 FD。如下图所示。

 client      --> office

计算客户端的clouser

(client)+ =  client , risk_proflie,analyst,broker,profile 

clouser 不包含办公室,因此您无法将其删除。 重复最后一步,你会发现没有FD可以被移除,因此最小覆盖集是

client      --> office
stock       --> exchange
stock       --> dividend
broker      --> profile
company     --> stock
client      --> risk_profile
client      -->analyst
analyst     --> broker
stock, broker   --> investment
stock, broker   --> volume
stock       --> company
investment  --> return
investment  --> commission
stock       --> client
account     --> assets

【讨论】:

以上是关于找到给定函数依赖集的最小覆盖的主要内容,如果未能解决你的问题,请参考以下文章

FxCop,组成依赖程序集的调用者列表

nodejs 闭包函数可以传参数吗

Python嵌套函数和闭包

数据库:求F=A→B,B→A,B→C,A→C,C→A,最小(极小)函数依赖集合

求最小函数依赖集

数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF