文章目录

  • 4.7&4.8 统一建模语言 UML
    • UML 和 E/R 图的对应关系
    • UML 类 及其 键
    • 关联
    • 自关联
    • 关联类
    • 子类
    • 聚集和组合
    • UML 图到关系的转化
      • 类 -> 关系
      • 关联 -> 关系
      • UML 子类 -> 关系
      • 聚集 / 组合 -> 关系
      • 弱类和支持组合 -> 关系
  • 4.9&4.10 对象定义语言 ODL
    • ODL 简介
      • 类声明
      • 属性
      • 联系
        • 反向联系
        • 联系的多重性
      • ODL 中的数据类型
    • ODL 中的子类
    • ODL 中键的声明
    • ODL -> 关系
      • ODL 类 -> 关系
      • ODL 联系 -> 关系

4.7&4.8 统一建模语言 UML

Unified Modeling Language

UML 和 E/R 图的对应关系

UML E/R 模型
实体集
关联 二元联系
关联类 联系的属性
子类 isa层次
聚集 多对一联系
组合 具有引用完整性的多对一

UML 类 及其 键

  • UML 类和 E/R 模型中的实体集类似。

  • 一个类框分为三部分:

    1. 顶部:类名
    2. 中间:属性
    3. 底部:方法
  • 指定主键:在每个键属性之后加上关键字 PK

  • 例:


关联

  • 定义:

    类之间的二元联系称为关联。

    (UML 中没有多路联系,一个多路联系用多个二元联系表示)

  • 关联的表示

    在两个 UML 类之间划一条线,线的下方标注关联的名字。

  • 对象数目的约束

    关联类中连接对象的数量有一定的约束,该约束通过在连接线的末端用一个 m..n 标签表示,表示至少 m 个、至多 n 个对象与另外一端的对象连接。

    • m..* 表示无上限
    • 0..* 表示对象的数目没有任何约束
    • 如果没有任何标签,则相当于 1..1 ,表示有且只有一个。
  • 例:


  • 引用完整性的表示

    见书P102


自关联

  • 定义:

    一个关联的两端可以连接同一个类,这样的关联称为自关联(self-association)。


  • 为区分一个类在自关联中表现的不同角色,分别给关联的两端一个名字。

  • 示例:


关联类

  • 关联类对应 E/R 模型中,联系的属性

  • 关联类的表示

    放在关联的中间,有自己的名字,其属性是它依附的关联的属性。

  • 例:


子类

  • 子类的键来自于根层次。

  • 子类中,只记录父类中没有的【额外的属性】。


  • UML 允许一个类有 4 中不同的子类:

    • 完整对局部

      每个类C的对象是否是该子类的一个成员?

      是,子类是完整的;

      否则不完整。

    • 分离对重叠

      一个对象能够出现在两个子类中,子类是重叠的;

      一个对象不能在两个子类中,子类是分离的。


  • 面向对象系统和 E/R 模型中子类的种类限制

    特性 面向对象系统 E/R 模型
    完整或局部? 都允许 都允许
    分离或重叠? 分离 允许重叠

  • 子类的表示

    用一个空三角箭头指向父类。

    • 例:


聚集和组合

  • 聚集

    • 定义:表示类与菱形端类的多对一联系;

    • 表示:

      两个类之间的一条线,末端为一个空的菱形,表示标注为 0..1


  • 组合

    • 定义:表示具有引用完整性的多对一联系;

    • 表示:两个类之间的连线,末端为一个实心的黑色菱形,表示标注为 1..1 >


  • 示例:


UML 图到关系的转化

类 -> 关系

为每个类创建一个关系,关系名为类名,关系的属性为类的属性。


关联 -> 关系

  • 总结:两个连接类的键属性 + 关联类(如果有的话) 的属性

  • 为每个关联创建一个名字为关联名的关系,关系的属性是两个连接类的键属性;
  • 如果有关联类附在联系上,则关系的属性中应包括关联类的属性。

  • 例:

    Movies (title, year, length, genre)

    Stars (name, address)

    Stars-in (movieTitle, movieYear, starName, salary, residuals)


UML 子类 -> 关系

  • 三种方法:

    • E/R模式方法(每个子类的关系仅有键属性和该子类属性)

    • 面向对象方法(每个实体在一个子类的关系中)

    • 空值法(所有子类用一个关系表示)


  • 三种方法的选择:

    • 如果每一层都是分离的,用面向对象

      且不需要考虑每个可能的子树,因为每个对象仅仅属于一个类和它的祖先。

    • 如果每一层既是完整又是分离的。则用面向对象只需为叶子节点构建关系;

    • 如果层次很大并且在某些或者所有的层上是重叠的,则使用 E/R 方法


聚集 / 组合 -> 关系

  • 聚集和组合表示的是多对一关联,不为他们构建任何关系

  • 处理:

    菱形端处的类的键属性 加入到 非菱形端的类 中。

    对于聚集,这些属性可以为空

    对于组合,这些属性不能为空


  • 例:

    转化为如下的关系模式:

    Studios (name, address)
    Movies (title, year, length, genre, studioName)
    MoviesExecs (cert#, name, address, networth)
    Presidents (cert#, studioName)


弱类和支持组合 -> 关系

  • 支持组合的标注:

    使用一个带有字母“PK”的弱类框作为一个支持组合的锚,其含义是在组合另外一端的支持类的键属性是弱类键的一部分。

    • 例:


  • 将上例转化为关系模式:

    Studios (name, address)

    Crews (number, crewChief, studioName)


4.9&4.10 对象定义语言 ODL

Object Defination Language

ODL 简介

类声明

  • 关键词 class、类名、类的特性列表。

    class <name> {<list of properties>
    };

属性

  • 声明:attribute 属性类型 属性名;
  • 属性可以是基本数据类型或复杂类型。

联系

  • 声明:relationship 类型 联系名;

  • 联系类型:

    • 多对一:类名

      relationship Studio ownedBy;
      
    • 一对多、多对多:集合类型

      relationship Set<Start> stars;
      

反向联系
  • 反向关系必须成对出现

  • 定义(在相应联系的后边):

    inverse 类名::属性名;
    
  • 例:


联系的多重性

ODL 中,一对互为反向的联系可分为多对一、一对一和多对多。

  • 不同类型对应的两个联系声明中分别使用“Set<>”(多)和“类型名”(一)的不同组合;
  • “多”可以是“零”,表示“任一个子集(包括空集)均可”

设有两个类 C, D,

C, D之间的联系 C 中相应联系的类型 D中
多对多 Set<D> Set<C>
C 到 D 是多对一 D Set<C>
D 到 C 是多对一 Set<D> C
一对一 D C

ODL 中的数据类型

  • 基本类型

    • 原子类型:整型、浮点型、字符型、字符串型、布尔型和枚举型。

    • 类名:实际是一个包含类的所有属性和联系的结构。

  • 结构化模型

    • 集合类型

      • 集合(set):Set<T>,无序、元素不能重复出现
      • 包(bag):Bag<T>,无序、元素可重复出现 {1,2,1}和{2,1,1}是相同的包
      • 列表(list):List<T>,长度可为0、有序。string即list<char>。{1,2,1}和{2,1,1}是不同的列表。
    • 数组(array):Array<T, i>, T为原子类型、整数i表示长度。

      例:Array<char,10>

    • 字典(dictionary):Dictionary<T, S>,表示T,S元素对的有限集合。
      一个 T 对应一个 S,T 是唯一的。

    • 结构(structure)类型
      若T1, …, Tn是类型,F1, …, Fn分别是其域名,

      Struct N{T1 F1, …, Tn Fn} 表示一个名为N的结构类型,包含n 个域,其第 i 个类型为 TiT_iTi​,域名为FiF_iFi​。


  • 联系类型

    • 可以是一个类,或者应用于类的集合、包或列表类型构建器;

    • 注意:

      联系类型不能包含有结构类型、原子类型。且不能嵌套。

      以下三种为对应的错误示例

      Struct N {Movie field1, Star field2}
      Set<Integer>
      Set<Array<Star,10>>
      

  • 属性类型

    • 可以是原子类型或其他复杂类型;
    • 也可以多次使用类型构建器来构建;

ODL 中的子类

  • 子类的属性组成:

    继承父类的所有属性,和自己的属性。

  • 声明:

    class C extends D
    

    多继承,用冒号将类别分开

    class C extends D : E
    
  • 例:

    class CartoonMurderMystery extends Cartoon : MurderMystery {...};
    

ODL 中键的声明

  • 声明:使用 key 或者 keys(等价)。

    • 单个建:

      class C(keys(attr1, attr2)) {...}

    • 多个键:

      class C (keys key1, key2, ...)

  • 联系键

    多对一联系声明为键时,表示该联系中的**“1”端可以是“多”端的键**。

    • 见书P113 例4.54


ODL -> 关系

总体方法:

  • ODL中属性为非原子类型时的处理:

    • 非原子 -> 原子。

      非原子类型要按照特定的处理方式转化为原子类型。

    • 如果转化后产生了不规范的关系,则要按照关系模式分解的方法进行优化处理

ODL 类 -> 关系

  • 类中的原子属性:

    如果类中的所有特性都是属性、属性的类型都是原子类型,则直接转化。

    可以创建一个属性来表达对象标识并且让它作为相应关系的键(如 id 值)。

    例:

    MovieExecs (cert#, name, address, networth)

  • 类中的非原子属性:

    • 结构类型

      为结构的每个字段定义一个关系的属性即可,如果命名冲突则重命名。

      例:

    • 集合类型

      对于属性 A 的值集合,为集合中的每个值都构造一个元组,该元组中包括属性A和类中的所有其他属性的相应值。

      但可能会产生不规范的关系(一般违反BCNF),此时用分解方法消除异常。

    • 其他类型

      • 包:增加count属性记录包中每个元组出现的次数。

      • 列表:增加position属性指示对应的地址在列表中的位置。

      • 定长数组

      • 字典:表示成一个由键域和值域组成的二元组的集合。


ODL 联系 -> 关系

  • 在ODL中,关系互为相反地成对出现;

    对于每对联系,只需建立一个关系即可。

  • 注意:

    • 对“多对一”联系,将该联系与联系中“多”的那一方的类建立一个关系(即两个拥有共同键的关系进行关系组合),不会破坏BCNF条件。
    • 多对一联系不能组合“一”方, 会违反BCNF条件。
    • 多对多联系不可组合

【数据库系统原理】第四章 高级数据库模型:统一建模语言UML、对象定义语言ODL相关推荐

  1. 数据库系统原理——第四章 SQL与数据库的基本操作(1)知识点总结(自考本)

    当你想挣一百块的时候你就要把目标定成一千块,这样才挣得更多. 第四章 SQL与数据库的基本操作 SQL概述 什么是SQL? SQL的特点 SQL的四大功能 数据定义语言 数据操纵语言 数据控制语言 嵌 ...

  2. 微型计算机原理答案第四章,微机原理第四章习题答案.doc

    微机原理第四章习题答案 1.8086语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 答:数据操作数的寻址方式有七种,分别为:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对 ...

  3. AcWing提高算法课Level-3 第四章 高级数据结构

    AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...

  4. 编译原理第四章练习题

    目录 编译原理第四章作业 课本习题 补充习题 编译原理第四章作业 自己写的不包对,有错请指正 BY hllinyu 2023年3月31日 课本习题 编译原理 第三版 王生原- 清华大学出版社 的那本 ...

  5. 数据库系统原理--第2章作业1--习题答案

    说明:数据库系统原理相关的习题答案都在"数据库系统原理"专栏 1.已知三个域:男人={李基,张鹏},女人={王方,刘玉 },子女={李键,张睿,张峰}.这一组域(男人,女人,子女) ...

  6. 计算机操作系统原理第四章习题

    计算机操作系统原理第四章习题 1.什么是静态链接.装入时动态链接和运行时的动态链接? 2.简述分页系统和分段系统的异同点 3.什么情况下需要重定位?为什么要引入重定位? 4.在具有快表的段页式存储管理 ...

  7. 数据库系统原理(第一章概述)

    一.数据库基本概念 什么是数据:数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的. 可以鉴别的信息. 数据是信息存在的一种形式,只有通过解释或处理的数据才能成为有用的信息. 什么是数据 ...

  8. 数据库系统概论 第四章课后习题(部分)

    本文是<数据库系统概论>的第四章的部分课后习题,题目来源:[2019-2020春学期]数据库作业12:第四章:数据库安全性 习题

  9. java高级类型_Java第四章高级类属性一

    四.高级类属性一: 一.== 1. 基本数据类型,根据基本数据类型的值判断是否相等,相等返回true,反之返回false 注:两端数据类型可以不同,在不同的情况下,也可以返回true 2.引用数据类型 ...

  10. 计算机原理第四章答案,计算机组成原理习题答案第四章

    <计算机组成原理习题答案第四章>由会员分享,可在线阅读,更多相关<计算机组成原理习题答案第四章(6页珍藏版)>请在人人文库网上搜索. 1.计算机组成原理习题答案第四章1.指令长 ...

最新文章

  1. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
  2. 【数据结构学习】顺序栈 C语言
  3. GitHub:我开源我自己;CEO:不存在的
  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)类型无关和模板编译
  5. hibernate缓存机制
  6. IOS下,javascript字符串转日期类型错误
  7. 保存到redis的字符串类型出现斜杆_深入浅出Redis:这次从Redis底层数据结构开始...
  8. Oracle In Memory最佳实践(附PPT和视频回放)
  9. SAP License:SAP学习心得
  10. arm linux驱动 知乎_Linux初级驱动-字符设备驱动-点亮LED
  11. 剑指offer面试题48. 最长不含重复字符的子字符串(滑动窗口)
  12. Springboot整合JasperReport报表以及报表打印功能
  13. 圈圈教你玩usb第一版硬件实物图
  14. 学习笔记(26):玩转Python-Python3基础入门-案例-快递价格计算器(1)
  15. IAR 非调试模式直接下载程序
  16. coffe-script
  17. 玩转树莓派之ZigBee网关
  18. LabVIEW控制Arduino实现RGB调色灯(基础篇—6)
  19. python画厢式图_用matplotlib画箱体图(boxplot)
  20. Linux攻关之基础模块十二 进程相关

热门文章

  1. office word doc中无法输入英文双引号
  2. 有些事现在不做,一辈子都不会做了
  3. Ibeacon一维小项目
  4. 开头th_是什么文件_以th开头的英文单词th开头的所有英文单词
  5. 关于游戏,能戒就戒吧
  6. 如何在一周内快速摸清一个行业?
  7. 产品设计方法论:用户体验五要素
  8. 泰国将于5月1日全面开放,来曼谷骑行探索老城区
  9. C#中新建用户控件示例
  10. [软件测试] - No.1 Fault Error Failure 区别