热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

规范化理论:模式分解

什么是模式分解?关系模式R的一个分解是指:{,…, },其中…,并且,1i,jn,是在上的投影。相应地将R储存在二维表r中的数据分散到二维表,,…,中去,

什么是模式分解?

关系模式R的一个分解是指:《规范化理论:模式分解》={ 《规范化理论:模式分解》《规范化理论:模式分解》<《规范化理论:模式分解》《规范化理论:模式分解》>, &#8230; , 《规范化理论:模式分解》<《规范化理论:模式分解》《规范化理论:模式分解》>},其中《规范化理论:模式分解》=《规范化理论:模式分解》《规范化理论:模式分解》《规范化理论:模式分解》《规范化理论:模式分解》&#8230;《规范化理论:模式分解》,并且《规范化理论:模式分解》《规范化理论:模式分解》《规范化理论:模式分解》,1《规范化理论:模式分解》i,j《规范化理论:模式分解》n,《规范化理论:模式分解》《规范化理论:模式分解》《规范化理论:模式分解》上的投影。相应地将R储存在二维表r中的数据分散到二维表《规范化理论:模式分解》《规范化理论:模式分解》,&#8230; ,《规范化理论:模式分解》中去,其中《规范化理论:模式分解》是属性r在属性集《规范化理论:模式分解》上的投影。

把低一级的关系模式分解为若干个高一级的关系模式,分解方法并不是唯一的,在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。在这里,对于“等价”有以下3种不同的定义:

  • 分解具有无损连接性
  • 分解要保持函数依赖
  • 分解既要保持函数依赖,又要具有无损连结性

这三个定义是实行模式分解的三条准则。

 

下面通过一个例子讲解什么是模型分解。

对于一个有关学生的关系模式S-L(SNo, Sdept, Sloc),关系S-L如图所示:

《规范化理论:模式分解》 关系S-L

 

其中SNo属性代表学生证号,Sdept属性代表所属院系,Sloc属性代表院系地址,S-L中有以下函数依赖:

              SNo→Sdept

              SNo→Sloc

              Sdept《规范化理论:模式分解》Sloc

 

已知S-L《规范化理论:模式分解》2NF,该关系模式存在着非主属性对码的传递函数依赖,存在插入异常、删除异常、数据冗余度大和修改复杂的问题,需要分解该关系模式,使之成为更高范式的关系模式。

 

第一种分解情况

将S-L分解为下面三个关系模式:

              SN(Sno)

              SD(Sdept)

              SO(Sloc)

 

分解后的关系为:

《规范化理论:模式分解》

 

SN、SD和SO都是规范化程度很高的关系模式,但对比分解之前的关系S-L,发现分解后的关系模式会丢失许多信息,如图:

《规范化理论:模式分解》

 

分解后的关系,无法查询95001学生所在的系或所属院系的地址了,这种分解方法是不可取的,丢失了数据之间联系的信息。

 

第二种分解情况

将S-L分解为以下两个关系模式:

              NL(Sno, Sloc)

              DL(Sdept, Sloc)

 

分解后的关系为:

《规范化理论:模式分解》

 

对NL和DL关系进行自然连接的结果为:

《规范化理论:模式分解》

 

对比分解之前的关系:

《规范化理论:模式分解》      《规范化理论:模式分解》

 

发现NL《规范化理论:模式分解》DL比原来的S-L关系多了三个元组,因此我们也无法知道原来的S-L关系种究竟有哪些元组了,从这个意义上说,此分解仍然丢失了信息。

 

第三种分解情况

将S-L分解为以下两个关系:

              ND(Sno, Sdept)

              NL(Sno, Sloc)

 

分解后的关系模式为:

《规范化理论:模式分解》

 

对ND和NL关系进行自然连接的结果为:

《规范化理论:模式分解》

 

第三种分解情况没有丢失信息,称这种分解具有”无损连结性”,但是它仍然存在一定的问题,例如95001学生由CS系转到IS系,ND关系的(95001, CS)元组和NL关系的(95001, A)元组必须同时进行修改,否则会破坏数据库的一致性,如图:

《规范化理论:模式分解》

 

产生该问题的原因是,S-L中的函数依赖Sdept→Sloc既没有投影到关系模式ND上,也没有投影到关系模式NL上。这种分解没有保持原关系模式中的函数依赖。

 

第四种分解情况

将S-L分解为以下两个关系:

              ND(Sno, Sdept),Sno→Sdept

              NL(Sdept, Sloc),Sdept→Sloc

这种分解保持了函数依赖,称为具有“保持函数依赖性”。

 

再看第四种分解的情况:

《规范化理论:模式分解》

 

对ND和DL关系进行自然连接,结果为:

《规范化理论:模式分解》

 

这种分解不仅具有“保持函数依赖性”,还具有“无损连接性”。

 

在给出的例子中:

第一种情况,既不具有无损连结性,也未保持函数依赖;

第二种情况,既不具有无损连结性,也未保持函数依赖;

第三种情况,具有无损连结性,但未保持函数依赖;

第四种情况,既具有无损连结性,又保持了函数依赖。

 

分解的无损连结性和保持函数依赖

具有无损连接的模式分解《规范化理论:模式分解》={ 《规范化理论:模式分解》《规范化理论:模式分解》<《规范化理论:模式分解》《规范化理论:模式分解》>, &#8230; , 《规范化理论:模式分解》<《规范化理论:模式分解》《规范化理论:模式分解》>}是R的一个分解,若对R的任何一个关系r均有r=r在《规范化理论:模式分解》中各关系模式上投影的自然连接成立,则称分解《规范化理论:模式分解》具有无损连接性。简称《规范化理论:模式分解》的无损分解。

只有具有无损连接性的分解才能保证不丢失信息,但是无损连结性不一定解决插入异常、删除异常、修改复杂、数据冗余等问题。

 

保持函数依赖的模式分解《规范化理论:模式分解》={ 《规范化理论:模式分解》《规范化理论:模式分解》<《规范化理论:模式分解》《规范化理论:模式分解》>, &#8230; , 《规范化理论:模式分解》<《规范化理论:模式分解》《规范化理论:模式分解》>}是R的一个分解,若F所逻辑蕴含的函数依赖一定也为分解后所有的关系模式中的函数依赖《规范化理论:模式分解》所蕴含,即《规范化理论:模式分解》,则称关系模式R的这个分解是保持函数依赖的。

 

如果一个分解具有无损连接性,则它能够保证不丢失信息。如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。

【分解具有无损连接性】和【分解保持函数依赖】是两个相互独立的标准。具有无损连结性的分解不一定能够保持函数依赖,保持函数依赖的分解也不一定具有无损连接性。

 

模式分解的相关算法

无损连接的测试算法:https://blog.csdn.net/Shishishi888/article/details/90271943

其他算法待更新

 

 

 

参考自:《数据库系统概论》,王珊,萨师煊编著

 

 


推荐阅读
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
author-avatar
几杯茶轶事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有