zoukankan      html  css  js  c++  java
  • 关系模型和关系运算

    3.1 关系模型的基本概念

    关系模型:用称为关系的二维表来表示数据,其数据模型就称为关系模型。二维表的行称为元组,列以属性开头,对于每个属性,都有元组的一个分量与之对应。(例如P39图3.1)

    3.1.1 属性:属性就是关系的标题栏中各列的名字,描述了该列各数据项的含义。

    3.1.2 模式:关系的名称和关系的属性集称为关系的模式。

    例:student(StudentNo,StudentName,Age,Dept)

    3.1.3 元组:除了关系的标题栏外,其他各行统称为“元组”。

    元组和对象的联系和区别:可以认为一个元组就表示一个对象,而元组所属的关系就表示对象所属的类。对象具有同一性,而元组没有。

    3.1.4 域:

    关系模型要求每个元组的每个分量都是原子的,即必须属于某种基本类型,假设与关系的每个属性相关的特定基本类型称为“域”,那么关系的任何元组的每个分量都必须在对应列的域中取值。

    3.1.5 关系的等价表示法

    我们可以重新排和列,而关系并不改变。

    3.1.6 关系的实例

    给定关系中元组的集合称为该关系的“实例”。

     

    3.2 从ODL设计到关系设计

    先用ODL或者E/R图来进行数据库设计,再将该设计转换成关系模型。为什么非要把一步能完成的事情转换成两步?(P41)

    3.2.1 从ODL属性到关系属性

    若类的所有特性都是属性,而不是联系或者方法,并且属性都是原子类型。在这种情况下,对类建立对应的关系,类的第个属性对应于该关系的一个属性。而要把类中的对转换成元组,只需把该对象在类的四个属性上的取值作为元组的分量即可。

    3.2.2 类中的非原子属性

    1)  如果某属性是多个值的集合,则针对每个值建立一个元组。(例P42图3.4)

    2)  如果某属性的类型是定长的数组,则在关系中用带有数组和下标的属性来表示类中的数组类型的属性。(例P43图3.5)

    3.2.3 单值联系的表示

    方法:只需要建立相关类中构成键码的属性集就可以表示相关类的对象。(例P44图3.6)

    3.2.4 多值联系的表示

    方法:首先,和单值联系一样,要找出表示每个相关对象的键码;其次,和表示集合类型的属性一样,为相关对象集合的每个元素建立一个元组。(例P44图3.7)

    缺点:数据冗余大。

    3.2.5 联系与反向联系的表示

    同一样联系,无须两者都表示出来,只要在其中一个地方表示就可以了。

    3.2.6 ODL子类的表示

    原则:1)每个子类都对应于一个关系;

    2)  这个关系用相应子类的所有特性(包括从超类继承下来的全部特性)来表示。

     

    3.3 从E/R图到关系设计

    E/R与ODL主要有以下区别:

    1)  在E/RL图中,联系作为独立的概念存在,而不是像ODL那样作为特性嵌套在类定义中,这有助于避免数据冗余。

    2)  在ODL中,属性可能是任意的聚集类型,比如集合;而在E/R图中,虽然并没有严格规定允许使用的数据类型,但通常都认为允许使用结构化的数据,而不允许使用集合或者其他聚集类型的数据。

    3)  在E/R图中,联系可以具有属性,而ODL中没有相应的概念。

    3.3.1 实体集到关系的转换

    直接把E/R图中的属性对应成相应的属性。(例P46图3.8、图3.9)

    3.3.2 E/R联系到关系的转换

    对于一个联系R,它所对应的关系应该具有如下属性:一是联系R所涉及到的每个实体集的键码属性(集),二是R本身的属性。

    从E/R图转换到关系模式比从ODL转换到关系模式的优点:在ODL中,双向ODL联系会带来大量数据冗余;而从E/R图出发,用单个的关系就可以表示双向的联系。

    3.3.3 “属于”联系到关系的转换

    新建立的关系的属性包括被属于的实体集的键码及相应实体集的属性。

    3.4 关系代数(p47—p54)

     关系代数:是以代数的形式对关系模式进行查询的一种语方,其中要运算并、交、差、选择、投影、笛卡儿积、自然连接、θ连接和改名。综合使用这些运算可以表达各种各样的查询要求。

    3.4.1 关系的集合运算:并、交、差

    关系R和S必须满足条件:1)两者的模式具有相同的属性集;

    2)  对两者进行集合运算之前,要对两者的属性列进行排序,保证两个关系的属性顺序相同。

    运算定义如下:

    1)  R∪S,是R中的元素和S中的元素共同组成的集合。

    2)  R∩S,是既出现在R中又出现在S中的元素组成的集合。

    3)  R—S,是只在R中出现,不在S中出现的元素组成的集合。

    3.4.2投影

    该运算作用于关系R将产生一个新关系S,S只具有R的某几个属性列。

    3.4.3 选择

    该运算作用于关系R也将产生一个新关系S,S的元组集合是R的一个满足某条件C的子集。

    3.4.4 笛卡儿积

       R X S,其关系模式是R和S的模式的并集,是R和S的元组以所有可能的方式组合起来。当R和S有同名的属性,至少要为其中一个属性重新命名。

    3.4.5 自然连接

    其关系模式是R和S模式的并集。假设A1、A2、……An是R和S的模式中的公共属性,那么如果R的元组r和S的元组s在这些属性上取值都相同,r和s组合而成的元组就归入该自然连接中。

    3.4.6 θ连接

        先将R和S笛卡儿积,然后从R X S的元组中选择满足条件C的元组集合。

    3.4.7 改名

    1)      只改关系名

    2)      不仅该关系名,且改属性名

    3.4.8 复合运算

    3.4.9 基本运算和导出运算

    除了交、θ连接、自然连接这三种运算可由其他运算导出外,另外六种运算——并、选择、投影、笛卡儿积和改名都是基本运算,每一种都不能由另外五种运算导出。

    3.5关系演算

    关系演算:把数理逻辑中的谓词演算应用到关系中,就是所谓的关系演算。在关系演算中,以元组为变量称为元组关系演算,而以域为变量,则称为域关系演算。关系代数中的8种运算都可用元组关系演算表达式来表达,用关系演算表达查询时,还常用到存在量词不达意和全称量词。

    3.5.1  元组关系演算

    什么是原子公式?公式是定义?运算符的优先级?

    1、  

    2、  

    3、  

    4、  选择

    5、  投影

    6、  笛卡儿积

    7、  自然连接

    8、  θ连接

    9、  复杂的关系代数表达式

    3.5.2 域关系演算

    元组关系演算的表达式中用的是元组变量,而域关系演算表达式中用的是元组分量的变量,简称为域变量。

    3.6 关系逻辑

    关系逻辑:是以逻辑的形式对关系模型进行查询的一种语言,具体用的查询语言称为数据逻辑。在数据逻辑中,用规则来表达查询。规则主要由称为部关系原子和含有一个或多个原子的体组成。体中的原子称为子目标,既可以是关系原子,也可以是算术原子。关系代数中的8种运算也都能用数据逻辑规则来表达。总之,关系代数、关系演算和关系逻辑完全等价。

    3.6.1 谓词和原子

    3.6.2 规则和查询

    3.6.3 从关系代数到数据逻辑

    1、交

    2、并

    3、差

    4、选择

    5、投影

    6、笛卡儿积

    7、自然连接

    8、θ连接

    10、  复杂的关系代数表达式

  • 相关阅读:
    程序员父亲的遗产——编程十诫 转载
    如何跟程序员谈一场没有Bug的恋爱
    java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
    CentOS7.0下载各版本说明 新增Everything版
    Virtualbox虚拟机安装CentOS 6.5图文详细教程
    s:iterator数据累加示例代码
    关于程序员的59条搞笑但却真实无比的编程语录
    jQuery EasyUI API 中文文档
    Java发送带html标签内容的邮件
    javascript比较两个时间大小
  • 原文地址:https://www.cnblogs.com/byfei/p/2965934.html
Copyright © 2011-2022 走看看