数据库中的模式分解与无损连接性

无损连接分解的普通判别方法——表格法

  设关系模式R=A1,…,An,R上成立的FD集F,R的一个分解p={R1,…,Rk}。无损连接分解的判断步骤如下:

  (1)构造一张k行n列的表格,每列对应一个属性Aj(1≤j≤n),每行对应一个模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列处填上符号aj,否则填上符号bij。

  (2)把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中的元素。修改方法如下:对于F中一个FD:X→Y,如果表格中有两行在X分量上相等,在Y分量上不相等,那么把这两行在Y分量上改成相等。如果Y的分量中有一个是aj,那么另一个也改成aj;如果没有aj,那么用其中的一个bij替换另一个(尽量把ij改成较小的数,亦即取i值较小的那个)。

  若在修改的过程中,发现表格中有一行全是a,即a1,a2,…,an,那么可立即断定p相对于F是无损连接分解,此时不必再继续修改。若经过多次修改直到表格不能修改之后,发现表格中不存在有一行全是a的情况,那么分解就是有损的。特别要注意,这里有个循环反复修改的过程,因为一次修改可能导致表格能继续修改。

  修改过程中要特别注意,若某个bij被改动,那么它所在列的所有bij都需要做相应的改动。为了明确这一点,举例说明。例如,我们根据FD“H→I”、“ K→L”来修改表格之前时的表格如表1所示(已经过多次修改,非初始表,空的单元表示省略):

  表1

        

   H 

      I    

   J    

    K   

   L     

R1

 

b12

 

 

b35

R2

a1

a2

 

a4

b25

R3

a1

b12

 

a4

b35

R4

 

b12

 

 

b35

  R2、R3所在行的H分量都为a1,根据FD“H→I”,需要修改这两行对应的I分量,而R2所在行的I分量为a2,因此,要将R3所在行的I分量b12修改为a2,注意到,R1、R4所在行的H分量也为b12,因此,这两行对应的I分量也必须修改为a2。R2、R3所在行的K分量都为a4,根据FD“K→L”,需要修改这两行对应的L分量,于是将R3所在行的L分量b35修改为较小的b25,同时注意到,R1、R4所在行的L分量也为b35,因此,这两行对应的L分量也必须修改为b25。修改后的表格如表2所示:

  表2

       

  H 

  I 

  J 

  K 

   L    

R1

 

a2

 

 

b25

R2

a1

a2

 

a4

b25

R3

a1

a2

 

a4

b25

R4

 

a2

 

 

b25

  【例题】(软件设计师2002年上午试题38)

  设关系模式 R为 R(H,I,J,K,L),R上的一个函数依赖集为 F={H→J,J→K,I→J,JL→H},分解 (38) 是无损连接的。

  供选择的答案:

  (38) A. p={HK,HI,IJ,JKL,HL} B. p={HIL,IKL,IJL}

  C. p={HJ,IK,HL} D. p={HI,JK,HL}

  试题分析:

  根据上述判断方法,我们列出选项B(分解成三个关系模式R1(HIL)、R2(IKL)、R3(IJL) )的初始表如表3所示:

  表3选项B的初始表

         

   H 

   I  

    J  

    K  

   L 

HIL

a1

a2

b13

b14

a5

IKL

b21

a2

b23

a4

a5

IJL

b31

a2

a3

b34

a5

  对于函数依赖集中的H→J、J→K对表3进行处理,由于属性列H和属性列J上无相同的元素,所以无法修改。但对于I→J在属性列I上对应的1、2、3行上全为a2元素,所以,将属性列J的第一行b13和第二行b23改为a3。修改后如表4所示:

 

表4选项B的中间表

          

     H  

   I 

   J 

    K 

    L 

HIL

a1

a2

a3

b14

a5

IKL

b21

a2

a3

a4

a5

IJL

b31

a2

a3

b34

a5

  对于函数依赖集中的JL→H在属性列J和L上对应的1、2、3行上为a3、a5元素,所以,将属性列H的第二行b21和第三行b31改为a1。修改后如表5所示:

  表5选项B的结果表

          

   H  

    I  

    J  

    K  

   L  

HIL

a1

a2

a3

b14

a5

IKL

a1

a2

a3

a4

a5

IJL

a1

a2

a3

b34

a5

  从表5可以看出,第二行为a1、a2、a3、a4、a5,所以分解p是无损的。

  有一种特殊情况要注意:分解后的各个关系模式两两均无公共属性。由于是模式分解,那么任一一个分解后的关系模式覆盖的属性集不可能是分解前的整个全部属性U,因此初始表中不存在全是a的行。又注意到,分解后的各个关系模式两两均无公共属性,表明任两行在任一列上都没有相同的分量,这导致整个表格无法修改,保持初始状态。而初始状态不存在全是a的行,因此这种特殊情况的分解是有损的。

  例如,函数依赖集合FD,将关系模式R(ABCDEF)分解成R1(AB)、R2(CDE)、R3(F),那么这种分解肯定是有损的。考试中可能碰到这种情况,那么一眼就可以判断出结果,从而节省了时间。

  3.无损连接分解的快捷判别方法

  首先要申明,这种快捷方法是有前提的,前提就是分解后的关系模式只有两个。其内容为:

  设ρ={R1,R2}是R的一个分解,F是R上的FD集,那么分解ρ相对于F是无损分解的充分必要条件是:(R1∩R2)→(R1–R2)或(R1∩R2)→(R2–R1)。这个“或”字很重要,这里表示(R1∩R2)→(R1–R2)、(R1∩R2)→(R2–R1)中只要有一个成立就行。这里的求交和相减运算的对象是关系模式的属性。

  【例题】

  关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}。那么下列分解中是无损分解的是。

  供选择的答案:

  A.p={R1(WY),R2(XZ)} B.p={R1(WZ),R2(XY)}

  C.p={R1(WXY),R2(XZ)} D.p={R1(WX),R2(YZ)}

  试题分析:

  A选项,R1∩R2为空,肯定不满足条件。

  B选项,R1∩R2为空,肯定不满足条件。

  C选项,R1∩R2={X},R1-R2={WY},R2-R1={Z},根据函数依赖集,X→Z成立,所以满足条件。

  D选项,R1∩R2为空,肯定不满足条件。

  4.总结

  模式分解无损性判别的源泉仍然是普通的表格法。这种快捷方法只不过是根据这种表格法推断出来的而已,是它的一个特列。但是这种快捷方法却往往非常有用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html之figure元素和figcaption元素为图片声明标题

figure和figcaption元素结合来为图片、视频、表格或者嵌入元素声明标题。以前使用如下方式为图片添加标题&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&g…

数据库设计过程

需求分析->概念结构设计->逻辑结构设计->物理设计 需求分析&#xff1a;数据流图&#xff0c;数据字典&#xff0c;需求说明书 概念结构设计&#xff1a;ER模型 逻辑结构设计&#xff1a;关系模式

tensorflow2.0学习(一)

环境配置我就不再这赘述了 1利用kares搭建分类模型 import tensorflow as tf import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline import numpy as np import sklearn import pandas as pd import os import sys import time from tensorlow impo…

常用数学符号大全、关系代数符号

http://www.dataguru.cn/thread-247437-1-1.html 常用数学符号大全、关系代数符号 1、几何符号   ⊥ ∥ ∠ ⌒ ⊙ ≡ ≌ △   2、代数符号   ∝ ∧ ∨ &#xff5e; ∫ ≠ ≤ ≥ ≈ ∞ ∶   3、运算符号   如加号&#xff08;&a…

现在完成时与过去完成时的区别

http://wenku.baidu.com/link?url-9u_JYMav-j6mhWJkEeQjKUsfKg4_7LCEvreL8fs4AXtdCn6VqAak66PNbSCRF3foilN80FulCHsbCFJB_hQZd7HIw3y8Z4jq0Mnga4O9YG

Segment-based Disparity Refinement with Occlusion Handling for Stereo Matching翻译和理解

摘要 摘要:本文提出了一种视差细化方法&#xff0c;通过对视差统计意义的探讨&#xff0c;直接细化赢者通吃视差图。根据基于分割的立体匹配的主要步骤&#xff0c;将参考图像过度分割为超像素&#xff0c;并通过改进的随机样本对每个超像素进行视差面拟合共识(RANSAC)。我们设…

三大范式和BC范式

https://www.cnblogs.com/awidy/articles/3978724.html 引言 数据库的设计范式是数据库设计所需要满足的规范&#xff0c;满足这些规范的数据库是简洁的、结构明晰的&#xff0c;同时&#xff0c;不会发生插入 &#xff08;insert&#xff09;、删除&#xff08;delete&#x…

重装pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.psudo python get-pip.py --force-reinstallsudo apt-get purge python-pkg-resources sudo apt-get -f install sudo rm -Rf /usr/local/bin/pip sudo apt-get install python-pip sudo pip install -U pip

I begin to keep a daily

This is the first day that I write journal because of my English is very poor, so I want to improve my English.I believe that I can keep it. Todays weather is worse than yesterday,it is the big fog and haze&#xff08;霾&#xff09;. Visibility(能见度) les…

Hadoop文章收集汇总 - 如禁止转载,请及时联系本人 收集学习互联网各位前辈分享的文章

工具自动自动集成文章列表与URL 公众号名称标题作者发布时间Hadoop实操如何使用Sentry管理Hive仓库目录外的其他目录的acl同步Fayson2018/9/30 8:27Hadoop实操如何使用Impala合并小文件Fayson2018/9/29 1:14Hadoop实操如何规划设置Kafka Broker的heap sizeFayson2018/9/28 0:27…

html之文档的头部和元数据定义(上)

什么叫元数据&#xff1f; 要理解这个问题&#xff0c;首先要知道“元”是什么。元(meta)&#xff0c;一般被我们翻译成“关于……的……”。 元数据(meta data)——“data about data” 关于数据的数据&#xff0c;一般是结构化数据&#xff08;如存储在数据库里的数据&#x…

线程和std::shared_ptr智能指针使用

//定义线程指针 std::unique_ptr<std::thread> thread_; //指向定义函数 threadCapture_.reset(new std::thread([this]() { func(); } ));#功能函数 void func() {while(1){std::chrono::system_clock::time_point now std::chrono::system_clock::…

Hbase二级索引+CDH+Lily

1.更改表结构&#xff0c;允许复制 已存在的表 disable tableName alter tableName,{NAME >fn, REPLICATION_SCOPE >1} enable tableName 不存在的表 create ‘table‘,{NAME >‘cf‘, REPLICATION_SCOPE >1} #其中1表示开启replication功能&#xff0c;0表示不开…

html之文档的头部和元数据定义(下,未写完)

设置网页定时跳转 当http-quip属性的值为Content-Language时&#xff0c;就可以设置网页所使用的语言&#xff1a;<mata http-equiv"Refresh" content"n; urlhttp://yourlinlk">定时浏览器将在n秒后跳转到链接&#xff0c;如果没有定义url&#xff0…

win10(UEFI)和Ubuntu双系统安装,无法进入ubuntu。

因为win10采用UEFI引导&#xff0c;所以在安装Ubuntu系统的时候着重注意 其中一个分区为efi作为引导分区 要将安装的启动引导器(grub2)设备选择在efi分区上 如下图&#xff1a;

TF-IDF + K-Means 中文聚类例子 - scala

Demo仅供参考 使用spark1.6import java.io.{BufferedReader, InputStreamReader} import java.util.Arraysimport org.ansj.splitWord.analysis.ToAnalysis import org.apache.hadoop.fs.FSDataInputStream import org.apache.spark.{SparkConf, SparkContext} import org.apa…

双目标定与矫正 matlab

matlab版本有2015a 或更新的本 1.预先拍摄好多幅标定板图像 像这样&#xff1a; 分别将左右图像放在left和right文件夹中。 2.相机标定 选择APPS,下拉菜单选择"stereo camera calibration" 进入一下界面&#xff0c;点击“add image”,分别设置camera1 &#xff0…

平衡二叉树模板

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node {int ndata; //记录关键字数值node *l,*r;int nheight; //平衡因子 }; int height(node* p) //返回…

Hbase PageFilter 取出数量不准确问题

PageFilter pf new PageFilter(pageFilterSize); filterList.addFilter(pf); PageFilter&#xff1a;设置获取的数据行数PageFilter作用在region上&#xff0c;只能保证当前region返回相应的数量&#xff0c;也就是说大概可理解为 region数量*pageFilterSize

CV_LOAD_IMAGE_COLOR 和 CV_BGR2RGBA找不到定义

添加下面头文件 #include "opencv2/imgcodecs/legacy/constants_c.h" #include "opencv2/imgproc/types_c.h"