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

MSSQL
MS-sql 2005拒绝了对对象 ''xxx'' (数据库 ''xxx'',架构 ''dbo'')的 SELECT 权限的解决方法
MSSQL 2005 LOG备份webshell的方法
快速将珊瑚虫IP数据库转MS SQL2005的图文教程
sql2005 远程连接问题解决方法
SQLServer 2005 列所有存储过程的语句
SQL Server 2005 模板参数使用说明
Sql Server 2005 默认端口修改方法
SQL Sever 2005 Express 安装失败解决办法
sql2005 根据指定字段排序编号
监视SQLServer数据库镜像[图文]
sqlserver2008 拆分字符串
字符串聚合函数(去除重复值)
SQL Server 2005 同步复制技术
SqlServer2005 链接服务器用法
SQL2008中 阻止保存要求重新创建表的更改 的解决方法
sql rollup用法 小计汇总
SQLServer 2008 Merge语句的OUTPUT功能
SQLServer 2008 新增T-SQL 简写语法
SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解决方法
SQL2005 学习笔记 公用表表达式(CTE)

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


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