数据库概论之无损分解
概念
无损分解指的是对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来。反之,则称为有损分解。
设R是一个关系模式,F是R上的一个依赖集,R分解为关系模式的集合p={R1(U1),R2(U2),....,Rn(Un)}。如果对于R中满足F的每一个关系r,都有r=πR1(r)⋈πR2(r)⋈..πRn(r)则称分解相对于F是无损连接分解,否则有有损连接。
怎么测试是否为无损连接
- 构造一个k行n列的表格,每列对应一个属性Aj(j=1,2,..n),每行对应一个模式Ri(Ui)=(i=1,2...k)的属性集合。如果Aj在Ui中,那么表格的第i行j列处添上记号aj,否则添上记号bij.
- 复查F的每一个函数依赖,并且修改表格中的元素,直到表格不能修改为止。
- 取F中函数依赖X->Y,如果表格中总有两行在X分量上相等,在Y分量上不相等,则修改Y分量的值,使这两行在Y分量上相等,有以下两种情况:
- 如果Y分量中有一个是aj,则另一个也变成aj
- 如果Y分量中没有aj,就用下标较小的bij替换另一个符号。
3.修改结束后一行全是a,则p相对于F是无损分解。
例题
设有关系模式R(U,F),其中U={A,B,C,D,E},F={A->C,B->C,C->D,{D,E}->C,{C,E}->A}。R(U,F)的一个模式分解={R1(A,D),R2(A,B),R3(B,E),R4(C,D,E),R5(A,E)}。下面用列表格法来判断是否为无损分解。
第一步,构造一个k行n列的表格,每列对应一个属性Aj(j=1,2,..n),每行对应一个模式Ri(Ui)=(i=1,2...k)的属性集合。如果Aj在Ui中,那么表格的第i行j列处添上记号aj,否则添上记号bij.
A | B | C | D | E | |
{A,D} | a1 | b12 | b13 | a4 | b15 |
{A,B} | a1 | a2 | b23 | b24 | b25 |
{B,E} | b31 | a2 | b33 | b34 | a5 |
{C,D,E} | b41 | b42 | a3 | a4 | a5 |
{A,E} | a1 | b52 | b53 | b54 | a5 |
第二步根据F中A->C,由于第一行,第二行,第五行在A列中的值为a1相同,在C列中的值不相同,所以根据 如果Y分量中没有aj,就用下标较小的bij替换另一个符号,把C列中的值都变为最小的bij,即b13,表格如下:
A | B | C | D | E | |
{A,D} | a1 | b12 | b13 | a4 | b15 |
{A,B} | a1 | a2 | b13 | b24 | b25 |
{B,E} | b31 | a2 | b33 | b34 | a5 |
{C,D,E} | b41 | b42 | a3 | a4 | a5 |
{A,E} | a1 | b52 | b13 | b54 | a5 |
第三步根据F中B->C,由于第二行,第三行,第五行在B列中的值为a2相同,在C列中的值不相同,所以根据 如果Y分量中没有aj,就用下标较小的bij替换另一个符号,把C列中的值都变为最小的bij,即b13,表格如下:
A | B | C | D | E | |
{A,D} | a1 | b12 | b13 | a4 | b15 |
{A,B} | a1 | a2 | b13 | b24 | b25 |
{B,E} | b31 | a2 | b13 | b34 | a5 |
{C,D,E} | b41 | b42 | a3 | a4 | a5 |
{A,E} | a1 | b52 | b13 | b54 | a5 |
第四步根据F中C->D,由于第一行,第二行,第三行,第五行在B列中的值为b13相等,在D列中的值不相同,所以根据 如果Y分量中有一个是aj,则另一个也变成aj,第一行中在D列的值为a4,所以第二行,第三行,第五行也要变成a4,表格如下:
A | B | C | D | E | |
{A,D} | a1 | b12 | b13 | a4 | b15 |
{A,B} | a1 | a2 | b13 | a4 | b25 |
{B,E} | b31 | a2 | b13 | a4 | a5 |
{C,D,E} | b41 | b42 | a3 | a4 | a5 |
{A,E} | a1 | b52 | b13 | a4 | a5 |
第五步根据F中{D,E}->C,由于第三行,第四行,第五行在D列和E列中的值分别为a4和a5相等,在C列中的值不相同,所以根据 如果Y分量中有一个是aj,则另一个也变成aj,第四行中在C列的值为a3,所以第三行,第五行也要变成a3,表格如下:
A | B | C | D | E | |
{A,D} | a1 | b12 | b13 | a4 | b15 |
{A,B} | a1 | a2 | b13 | a4 | b25 |
{B,E} | b31 | a2 | a3 | a4 | a5 |
{C,D,E} | b41 | b42 | a3 | a4 | a5 |
{A,E} | a1 | b52 | a3 | a4 | a5 |
第六步根据F中{C,E}->A,由于第三行,第四行,第五行在C列和E列中的值分别为a3和a5相等,在C列中的值不相同,所以根据 如果Y分量中有一个是aj,则另一个也变成aj,第六行中在A列的值为a1,所以第三行,第四行也要变成a1,表格如下:
A | B | C | D | E | |
{A,D} | a1 | b12 | b13 | a4 | b15 |
{A,B} | a1 | a2 | b13 | a4 | b25 |
{B,E} | a1 | a2 | a3 | a4 | a5 |
{C,D,E} | a1 | b42 | a3 | a4 | a5 |
{A,E} | a1 | b52 | a3 | a4 | a5 |
到以上几步我们第三行就全部为a,所以这个模式分解是无损的。
数据库概论之无损分解相关推荐
- MySQL设计学生选课系统(关系型数据库概论)
/* 关系型数据库概论 1.-- DQL.DDL.DML.DCL DQL数据查询语言: 用来查询表信息,select.from.where DDL数据定义语言:用来创建数据库中的各种对象--表.视图, ...
- 数据库概论基础名词解释
数据库概论基础名词解释 前言 这里是 数据库系统原理 系列文章,主要介绍数据库系统理论以及数据库实用技术. 数据库技术是计算机学科中的一个重要分支,它的应用非常广泛,几乎涉及所有的应用领域. 注:本篇 ...
- 《数据库概论》实验(2):交互式SQL--创建表《数据库概论》 实验(3)-交互式SQL--简单查询 《数据库概论》实验(4):交互式SQL--复杂查询
<数据库概论>实验(2):交互式SQL--创建表 一. 创建数据库 create database test; /创建test数据库 二.创建表 create table student ...
- 《数据库概论》实验(6):交互式SQL--视图与授权
1)创建test6数据库 CREATE database test6; (2)在test6数据库中创建 work_info表,表结构在<MySQL入门教程>的第8章P146表8.1 use ...
- 数据库系统教程——数据库概论(一)
数据库系统教程基础(一) 1.1 引言 一.概念 二.数据库类型 数据库的描述 E-R表举例: 1:1 1:N M:N 多组对应 弱实体与强实体 子类实体与超类实体 练习 1.1 引言 一.概念 1. ...
- 数据库概论之MySQL表的增删改查1
MySQL表的增删改查 1.MySQL表的CRUD 2.插入数据 2.1 语法 2.2 注意事项 3.查找语句 3.1 全列查找 3.2 指定列查询 3.3 指定查询字段为表达式 3.4 查询字段指定 ...
- 数据库概论-MySQL的数据表的基本操作
数据表的操作 数据表的操作 2.1 MySQL管理数据的方式 2.2 MySQL当中的数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 2.3 创建表 2.4 查看表 2.5 查看表结 ...
- 数据库概论知识点总结
必知的知识点 第一部分--基础知识 数据库:长期储存在计算机中.有组织的.可共享的大量数据的集合. 数据库系统特点: (1)数据结构化 (2)数据的共享性高,冗余度低,易扩充 (3)数据独立性高 (4 ...
- 数据库概论(王珊 萨师煊著)第5版 预习笔记
更新中 本专栏是博主在大学浪了近两年啥也没学后重学计算机专业时写的,方便个人学习和复习,本人菜鸟一枚,如有错误或能优化的地方欢迎指正,也特别欢迎交流学习. motto共勉:心之所向,素履以往:做喜欢的 ...
- 数据库概论(实验五)数据库完整性
实验五 数据库完整性 [实验目的] 1.掌握实体完整性约束.参照完整性约束 2.灵活应用自定义完整性约束 3.了解触发器在自定义完整性中的应用 [实验内容] 一.定义一个教师表Teacher(Tno ...
最新文章
- java finally块_Java中的finally块是什么?
- js解决EasyUI页面渲染速度慢问题(Mask遮罩)
- 怎样学好Oracle子查询,Oracle学习(六):子查询
- 现代软件工程 10 绩效管理
- HDU-2024c语言合法标识符
- form中的fieldset标签应用
- Python API 撰写的 TensorFlow 示例代码
- 收藏 | 如何撰写好一篇论文?密歇根教授《撰写高影响力论文指南》
- python标准数据类型复习
- linux ps命令查看当前线程正在执行的程序
- 【驱动详解】如何理解驱动程序
- 新致新知 | ChatGPT+企业知识图谱
- Jav安全框架Shiro学习总结(1)
- 再补充三种内网穿透的方法:ngrok 、ngrok.cc、IOEE
- 2021-09-09【linux】丨shell使用for循环遍历文件/数组
- promise是什么及其用法
- 提醒一下自己mpc加载字幕的设置
- 亮考帮优秀作业计算机操作原理,对分课堂教学模式的“亮考帮”怎样在教案设计中分析体现...
- Google每日发布达芬奇密码
- django中queryset的两大特性