当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server:SQLServer中最小函数依赖集

MSSQL
SQLServer中求两个字符串的交集
SQL Server 触发器 表的特定字段更新时,触发Update触发器
SQL 查询分析中使用net命令问题
SQLServer 批量导入目录文件
sql语言中delete删除命令语句详解
Linq to SQL 插入数据时的一个问题
一个简单的SQL 行列转换语句
SQLServer 常用语句(按功能分)
SQLServer 管理常用SQL语句
SQL Server 2000中的触发器使用
SQL小技巧 又快又简单的得到你的数据库每个表的记录数
Sql Server 2000删除数据库备份文件
批量更新数据库所有表中字段的内容,中木马后的急救处理
sqlserver 通用分页存储过程
远程连接局域网内的sql server 无法连接 错误与解决方法
目前用到的两个分页存储过程代码
sqlserver 多表关联时在where语句中慎用trim()方法
Sql2005注射辅助脚本[粗糙版]
sql 2005不允许进行远程连接可能会导致此失败的解决方法
MSSQL2005数据库备份导入MSSQL2000

MSSQL 中的 SQL Server:SQLServer中最小函数依赖集


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 232 ::
收藏到网摘: n/a

今天小编要和大家分享的是SQLServer中的最小函数依赖集,假设S 1S 2是两个函数依赖集,如果所有为S 1所蕴涵的函数依赖都为S 2所蕴涵,—即S 1+S 2+的子集,则S 2S 1的覆盖,D B M S只要实现了S 2中的函数依赖,就自动实现S 1中的函数依赖。

如果S 2S 1的覆盖,同时S 1S 2的覆盖—则S 1S 2等价,即S 1+=S 2+。很显然,如果S 1S 2等价,则D B M S只要实现S 1中的函数依赖,就自动实现S 2中的函数依赖,反之亦然。

当且仅当函数依赖集满足以下条件时,该函数依赖集为最小函数依赖集:

1) 每个函数依赖的右边(应变量)只含有一个属性(即它是单元素集合)。

2) 每个函数依赖的左边(自变量)是不可约的—删除自变量的任何一个属性都将改变

闭包S+(即会使S转变为一个不等价于原来的S的集合)。这种函数依赖被称为左部不可约的函数依赖。

3) 删除S中任何一个函数依赖都将改变它的闭包S+,即使S转变为一个不等价于原来的S的集合。

关于第2点和第3点,在这里要指出的是,为了知道如果删除某些元素是否会改变闭包,

不必要清楚地知道闭包的内容。例如:观察大家熟悉的零件关系变量P,有下列函数依赖:

P #P N A M E

P #C O L O R

P #W E I G H T

P #C I T Y

显而易见,该函数依赖集是最小依赖集:每个函数依赖中右边只含有一个属性,同样,左边也是不可约的,且任何一个函数依赖都不能被删除而不改变闭包(即不丢失信息)。相反,

下面的函数依赖集不是最小依赖集。

1 ) P #{ P N A M ECOLOR} :第一个函数依赖的右边不是单属性集

P #W E I G H T

P #C I T Y

2 ) { P #P N A M E }COLOR :第一个函数依赖左边的P N A M E可以删

P #PNAME 不改变闭包(即左边是可约的)

P #W E I G H T

P #C I T Y

3 ) P #P# 一个函数可以删除而不改变闭包

P #P N A M E

P #C O L O R

P #W E I G H T

P #C I T Y

任何一个函数依赖集至少存在一个最小函数依赖集。假设函数依赖集为S,根据分解规则,

可以假定每个函数依赖的右边是单属性的而不会失去它的一般性(如果右边不是单属性的,则可以利用分解规则把它分解成单属性),接着考察每个函数依赖f左边的每一个属性A,如果把Af的左边删除而并不改变闭包,则把Af的左边删除,然后考察S中剩余的每一个函数依赖f,如果把f删除而不改变闭包,则把fS中删除,最后所得的集合S是和原来的函数依赖集S等价的最小函数依赖集。

例:假设给定关系变量RABCDR的属性集,R满足函数依赖:

AB C

BC

AB

A BC

A CD

现在计算该函数依赖的最小函数依赖集。

1) 把所有的函数依赖写成右边是单属性的函数依赖:

AB

AC

BC

AB

A BC

A CD

很显然,函数依赖AB出现了两次,可以删除其中的一次。

2) 可以把C从函数依赖A CD的左边删除,因为AC,根据增广律可以得出AA C,给定A CD,根据传递律可以得出AD。所以C在函数依赖A CD的左边是冗余的。

3) 接着发现可以删除函数依赖A BC,因为AC,根据增广律可得A BC B,又根据分

解规则可以导出A BC

4) 函数依赖AC由函数依赖ABBC蕴涵,所以它可以删除。最后剩下下列函数依

赖:

AB

BC

AD

该集合是不可约。

一个函数依赖集I是不可约的,且等价于某个函数依赖集S,则说IS的最小等价依赖集。

这样,如果要实现一个函数依赖集S,系统只要实现它的一个最小依赖集就足够了(重复一次:要计算最小依赖集I不必计算闭包S+)。应该清楚的是给定函数依赖集的最小依赖集并不一定是唯一的。