博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关系模型详解
阅读量:4039 次
发布时间:2019-05-24

本文共 1352 字,大约阅读时间需要 4 分钟。

总述:最近几年遇到很多关系模型上的问题,时不时出错,痛下决心,获取资料整理为专题。

 

 

1.关系模型应该怎么去理解

答:关系模型R(X,Y,Z)可以被理解为多维空间,假如属性X,Y,Z之间没有函数依赖,那么我们会马上得到一个结论,这是三维的立体空间。如果属性之间存在函数依赖关系,那么关系形成的空间就有可能发生变化。

对应到实际的业务层面,一个实体E由X,Y,Z三方面的特征进行描述,R(X,Y,Z)是描述这些特征的空间。当三方面的特征没有依赖关系的时候,R是表示标准的三维空间,当其中有属性存在依赖关系的时候,需要去判断这种依赖关系是完全依赖还是部分依赖,这种依赖在理论上全部用函数依赖关系来表示。

 

2.关系模式中关系的基本运算怎么去理解

答:常规的基本运算有:差交并笛卡尔积;特殊的运算有:投影,选择,联接和自然联接,除

差运算:存在两个关系R(X,Y,Z)、关系S(X,Y,Z),R-S表示属于R但不属于S的元组,元组在实际工程中由关系数据库表的记录表示。

交运算:存在两个关系R(X,Y,Z)、关系S(X,Y,Z),R∩S表示既属于R又属于S的元组,实际表示表R与表S中相同的记录。

并运算:存在两个关系R(X,Y,Z)、关系S(X,Y,Z),R∪S表示属于R和属于S的元组的集合,但是R∩S的部分只保留一份。

笛卡尔积运算:存在两个关系R(X,Y,Z)、关系S(D,Z),RXS表示R中的元组和S中的元组做全连接,总终生成的关系是两个关系的属性合并但不去重,元组数是R中元组的数目与S中元组的数目相乘。

投影运算:存在两个关系R(X,Y,Z)、关系S(Z,X),投影是整体向局部的投影, ∏3,1(R)表示关系R抽取第三个属性和第一个属性组成新的关系,R向这个新的关系上进行投影,最终会生成一个包含第三列、第一列元组值的去重元组。

选择运算:存在关系R(X,Y,Z),对R中的元组添加选择条件,最终获得符合条件的记录

连接和自然连接运算:左连接、右连接、内连接、笛卡尔积

除运算:存在两个关系R(X,Y,Z)、关系S(X,Y),R÷S是关系R向S进行投影,得到关系RR,如果关系RR中元组和关系S中元组有相同的,那么获取产生这种投影的关系R中的元组,这些元组向关系A(Z)上进行投影,产生的投影结果就是R÷S的结果

这些运算中以投影、除比较少见,其他比较频繁。

 

3.关系模式中两种关系的变换

答:关系变换在理论上就是两个空间的变换,如果空间这块数学还可以的话。函数依赖是空间的基底之间存在着数学关系,如果这种数学关系最终化简之后是一种常量关系,那么空间就不是全维度的空间。这种情况经常在关系数据库中出现。

存在两个关系R(X,Y,Z)、关系S(A,B,C),如果关系R中的属性都可以通过关系S中属性的组合来表示,那么关系R和关系S表示的空间是一致的,同时也表示R向S进行的分解都是无损的,反之,如果关系R中存在某个属性不可以用关系S中任意的属性组合表示,则意味着R向S进行的分解是有损的,用数学表示,就是n维空间向m维空间进行转换,但是n>m,导致某些维度上的信息有损失。

一些复杂的问题当中,可能既有关系的转换,还有关系的运算存在,这些情况的总体思路是先解决空间转换的问题,再解决关系运算的问题。

 

 

 

转载地址:http://khpdi.baihongyu.com/

你可能感兴趣的文章
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
关于AIS编码解码的两个小问题
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
昨夜今晨最大八卦终于坐实——人类首次直接探测到了引力波
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.147 - LeetCode1108
查看>>