什么是模式分解?

设有关系模式R(U),,...,都是R的子集(此处把关系模式看成是属性的集合),R=UU…U,关系模式的集合用表示,={, , … , }。用代替R过程称为关系模式的分解。这里称为R的一个分解,也称为数据库模式。

一般把上述R称为泛关系模式,R对应的当前值称为泛关系。数据库模式对应的当前值称为数据库实例,它是由数据库模式中的每一个关系的当前值组成,用=<,... ,>表示。

R分解成的目的是为消除关系模式中不合理的数据冗余和操作异常问题。由于在计算机中数据并不是存储在泛关系r中,而是存储在数据库中。那么,接下来的问题是和r是否表示同一个数据库,如果两者表示不同的内容,那么这个分解就没有意义了。这这需要从以下两个角度来考虑。

(1)和r是否等价,即是否表示同样的数据。这个分解总是用“无损连接”特性表示。
(2)在模式R上有一个函数依赖集F,在的每个模式上有一个函数依赖集,那{, … , }与F是否等价。这个问题用“保持依赖”特性表示。

可见,系模式的分解,不仅仅是属性集合的分解,它同时体现了对关系模式上的函数依赖集和关系模式的当前值(关系实例)的分解。衡量关系模式的一个分解是否可取,主要有两个标准:即分解是否具有无损连接,分解是否保持了函数依赖。

无损连接分解的测试算法

在把关系模式R分解成以后,如何测试分解是否是无损分解呢?下面给出相应的算法。

输入:关系模式R(A1, A2, ... , An),F是R上成立的函数依赖集,R的一个分解,={, , … , }。
输出:判断相对于F是否为无损连接分解。

步骤如下。

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

(2)把表格看成模式R的一个关系,根据F中的每个函数依赖,修改表中元素的符号,其方法如下。

  • 对F中的某个函数依赖X→Y,在表中寻找X分量上相等的行,把这些行的Y分量也都改成一致。具体做法是分别对分量上的每一列做修改。
  • 如果列中有一个是,那么这一列上(X相同的行)的元素都改成
  • 如果列中没有,那么这一列上(X相同的行)的元素都改成(下标ij取i最小的那个);
  • 对F中所有的函数依赖,反复地执行上述的修改操作,一直到表格不能再修改为止(这个过程称为“追踪”(Chase)过程)。

(3)若修改到最后,表中有一行全为a,即...,那么称相对于F是无损连接分解。

举几个例子说明。

【例1】设有关系模式R(A, B, C, D),R分解成={AB, BC, CD},如果在R成立的函数依赖集F={B→A, C→D},那么p相对于F是否是无损连接分解?

解题思路:

(1)由于关系模式R具有4个属性,中分解的模式共有3个,所以要构造一个3行4的表格,并根据算法向表格中填入相应的符号,如图所示。

初始表格
  A B C D
AB
BC
CD

(2)根据F中的第1个函数依赖B→A,由于属性B列上的第1行和第2行中都为,所以,这两行的对应属性A列上的符号都应改为,即将第2行中对应属性A列的改为

根据F中的第2个函数依赖C→D,由于属性C列上的第2行和第3行中都为,所以,这两行的对应属性D列上的符号都应改为,即将第2行中对应属性D列的改为,修改后的表格如图所示。

修改后的表格
  A B C D
AB
BC
CD

(3)由于修改后的表格中的第二行已全是a,即,因此,p相对于F是无损连接分解。

【例2】设有关系模式R(SNo, CNo, Score, TNo, TS),其中属性SNo,CNo, Score,TN及TS分别表示学生的学号课程号成绩、教师号和教师专长。基于R的函数依赖集F={(SNo, CNo)→Score, CNo→TNo, TNo→TS}。判断={SCS(SNo, CNo, Score), CTN(CNo, TNo), TNTS(TNo, Ts))相对于F是否为无损连接分解?

解题思路:

(1)由于关系模式R具有5个属性,中分解的模式共有3个,所以要构造一个3行5列的表格,并根据算法向表格中填入相应的符号,如图所示。

初始的表格
  SNo CNo Score TNo Ts
SCS
CTN
TNTS

(2)根据F中的第1个函数依赖(SNo, CNo)→ Score,由于表格中没有在(SNo, CNo)相等的行,因此,不作修改;

根据F中的第2个函数依赖CNo→TNo,由于表格中第1、2行CNo的值同为,因此,把这两行的TNo的值改为,也就是将第一行的TNo的值由改为,修改结果如图所示。

根据函数依赖CNo→TNo的修改结果
  SNo Cno Score TNo TS
SCS
CTN
TNTS

根据F中的第3个函数依赖TNo→TS,由于表格中的第1,2,3行TNo的值同为a4,因此,把这三行的TS的值改为,也就是将第一行、第二行的TS的值分别由都改为,修改结果如图所示。

根据函数依赖TNo→TS的修改结果
  SNo CNo Score TNo TS
SCS
STN
TNTS

(3)由于修改后的表格中的第一行已全是a,即即,因此,相对于F是无损连接分解。

另外,当中只包含两个关系模式时,存在一个较简单的测试定理。

={}是关系模式R的一个分解,F是R上成立的函数依赖集,那么分解相对于F是无损分解的充分必要条件是()→(-)或()→(-)。

其中,表示两个模式的交集,即中的公共属性,--表示两个模式的差集。

即当模式R分解成两个模式时,若两个模式的公共属性(除外)能够函数定)中的其他属性,这样的分解具有无损连接性。

这个定理可以用无损连接分解的测试算法来证明。

【例3】设有关系模式R(X, Y, Z),基于R的函数依赖集F={X→Y}。判断以下有关R的两个分解是否是为无损连接。

             ={(X, Y), (X, Z)}
             ={(X, Y), (Y, Z)}

解题思路:

(1)因为为XY∩XZ=X,-=XY-XZ=Y,已知X→Y,所以,→(-),因此,={(X, Y), (X, Z)}是无损分解。

(2)因为为XY∩YZ=Y,-=XY-YZ=X,已知X→Y,所以→/(-),因此,={(X, Y),(Y,Z)}不是无损分解。

参考资料:[1]陈志泊,王春玲,许福,范春梅.数据库原理及应用教程(第3版)[M].北京:人民邮电出版社,2014:140-144.

规范化理论:无损分解的测试算法相关推荐

  1. 【白话机器学习】算法理论+实战之Xgboost算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

  2. 【白话机器学习】算法理论+实战之PageRank算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  3. 清华大学计算机科学与技术系朱军教授:机器学习里的贝叶斯基本理论、模型和算法...

    雷锋网[AI科技评论]按:3月3日,中国人工智能学会AIDL第二期[人工智能前沿讲习班]在北京中科院自动化所举行,本期讲习班的主题为[机器学习前沿].周志华教授担任学术主任,前来授课的嘉宾均为中国机器 ...

  4. 清华大学计算机科学与技术系朱军教授:机器学习里的贝叶斯基本理论、模型和算法

    [转] http://www.leiphone.com/news/201703/djm3u9LLqylr3C8N.html 雷锋网[AI科技评论]按:3月3日,中国人工智能学会AIDL第二期[人工智能 ...

  5. 机器学习里的贝叶斯基本理论、模型和算法

    本文转自中国人工智能学会通讯第3期,已获授权,特此感谢! 欢迎人工智能领域技术投稿.约稿.给文章纠错,请发送邮件至heyc@csdn.net 3月3日,中国人工智能学会AIDL第二期[人工智能前沿讲习 ...

  6. 数据库规范化理论详解

    关系数据库理论 数据依赖:数据依赖是一个关系内部,属性和属性之间的一种约束关系 常见的数据依赖有函数依赖[1](FD),多值依赖[2](MVD) 对于数据库来说,如果你的关系模型设计的不好,将会存在以 ...

  7. 测试算法(性能)的工具类

    记录几个测试算法性能的工具类,方便以后测试算法. Stopwatch类:可以得到算法的执行时间(单位:s,小数点后3位) 1: public class Stopwatch { 2: private ...

  8. BZOJ 4802: 欧拉函数(大数因数分解算法 Pollard_rho 和素数测试算法 Miller_Rabin)

    Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Output 4 Soluti ...

  9. 【白话机器学习】算法理论+实战之LightGBM算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

  10. 6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)

    文章目录 0.思维导图 1.为什么要学习关系数据库规范化理论? (1)基本概念回顾 (2)关系模式的形式化定义 (3)什么是数据依赖F? (4)数据依赖F对关系模式的影响 1️⃣ 数据冗余(Data ...

最新文章

  1. linux 网络管理器未运行怎么解决,Ubuntu下提示网络管理器未运行解决方法
  2. 微服务【1.1】Swagger的使用
  3. 云效走进百所高校 让上千学生真正认识代码
  4. .net core实践系列之短信服务-架构优化
  5. win7电脑0x000007b蓝屏怎么办
  6. Get!程序员成为高级管理者的三次跃升
  7. [惊!] IE 10.0,你没看错! IE10 Platform Preview 1出来啰~
  8. javascript解析dom
  9. JNDI:对java:comp/env的研究
  10. 深入浅出的mysql第三版和第二版的区别_1.高性能MySQL(第3版) 2. 深入浅出MySQL 合集 完整版 高清...
  11. 1、JavaWbe基本概念
  12. python解决八数码问题_python八数码
  13. java中调用cmd命令被阻塞无法返回和继续执行
  14. 基于Android studio+SSH的单词记忆(背单词)APP设计
  15. 360奇酷手机显示Log
  16. 为什么我总写 Bug ?
  17. [连接 Android ]-使用 adb 命令行通过数据线进入安卓手机系统
  18. FLStudio 四分音符八分音符 四四拍四二拍
  19. 生化奇兵: 无限 设置简体中文和显示对白字幕
  20. 同步电复律英文_同步电复律操作规程

热门文章

  1. HTML的三种页面布局方式
  2. iOS 图片编辑——缩放剪切
  3. 学校邮箱的pop服务器地,澳门大学的邮件服务器(POP)是多少
  4. 第08篇:Mybatis事务处理
  5. 毕业了~(2008-06-04 11:22)
  6. 删除c盘itunes备份_如何查找,备份和删除iTunes备份
  7. PC端用Itunes备份Iphone时修改备份路径的办法
  8. 计算机阵列除法器原理,并行除法器 ,并行除法器结构原理是什么?
  9. 十年经验教你如何学习嵌入式
  10. Latex大括号左对齐