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

MSSQL
深入介绍:SQL Server变更管理工具
SQL Server日志文件总结及充满处理方式
sql查询like操作数剖析
Windows 2003不太喜欢SQL Server2000
教您 SQL SERVER 2005 同步复制技术
深入浅出SQL教程之子查询语句
简单谈基于SQL SERVER 分页存储过程的演进
深入浅出SQL教程之SELECT语句中的表连接
安装SQL Server 2000的错误及解决
为增强安全性 SQL Server加密备份
在SQL Server中为安全依从性记录日志
深入浅出SQL系列教程之基本SELECT命令
SQL Sever中有关DATALENGTH的用法
SQL Server数据库性能优化技术
SQL Server基本函数详细介绍
SQL Server中数据仓库的构建与分析
sql2005的xml字段类型在.net中的应用
SQL注入奇致胜 Union查询轻松看电影
SQL Server 2005与DB2 8.2对比分析
SQL Server 连接中四种最常见错误

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 205 ::
收藏到网摘: 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+)。应该清楚的是给定函数依赖集的最小依赖集并不一定是唯一的。