【数据库系统原理】第四章 高级数据库模型:统一建模语言UML、对象定义语言ODL
文章目录
- 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 模型中的实体集类似。
一个类框分为三部分:
- 顶部:类名
- 中间:属性
- 底部:方法
指定主键:在每个键属性之后加上关键字 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}是不同的列表。
- 集合(set):
数组(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相关推荐
- 数据库系统原理——第四章 SQL与数据库的基本操作(1)知识点总结(自考本)
当你想挣一百块的时候你就要把目标定成一千块,这样才挣得更多. 第四章 SQL与数据库的基本操作 SQL概述 什么是SQL? SQL的特点 SQL的四大功能 数据定义语言 数据操纵语言 数据控制语言 嵌 ...
- 微型计算机原理答案第四章,微机原理第四章习题答案.doc
微机原理第四章习题答案 1.8086语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 答:数据操作数的寻址方式有七种,分别为:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对 ...
- AcWing提高算法课Level-3 第四章 高级数据结构
AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...
- 编译原理第四章练习题
目录 编译原理第四章作业 课本习题 补充习题 编译原理第四章作业 自己写的不包对,有错请指正 BY hllinyu 2023年3月31日 课本习题 编译原理 第三版 王生原- 清华大学出版社 的那本 ...
- 数据库系统原理--第2章作业1--习题答案
说明:数据库系统原理相关的习题答案都在"数据库系统原理"专栏 1.已知三个域:男人={李基,张鹏},女人={王方,刘玉 },子女={李键,张睿,张峰}.这一组域(男人,女人,子女) ...
- 计算机操作系统原理第四章习题
计算机操作系统原理第四章习题 1.什么是静态链接.装入时动态链接和运行时的动态链接? 2.简述分页系统和分段系统的异同点 3.什么情况下需要重定位?为什么要引入重定位? 4.在具有快表的段页式存储管理 ...
- 数据库系统原理(第一章概述)
一.数据库基本概念 什么是数据:数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的. 可以鉴别的信息. 数据是信息存在的一种形式,只有通过解释或处理的数据才能成为有用的信息. 什么是数据 ...
- 数据库系统概论 第四章课后习题(部分)
本文是<数据库系统概论>的第四章的部分课后习题,题目来源:[2019-2020春学期]数据库作业12:第四章:数据库安全性 习题
- java高级类型_Java第四章高级类属性一
四.高级类属性一: 一.== 1. 基本数据类型,根据基本数据类型的值判断是否相等,相等返回true,反之返回false 注:两端数据类型可以不同,在不同的情况下,也可以返回true 2.引用数据类型 ...
- 计算机原理第四章答案,计算机组成原理习题答案第四章
<计算机组成原理习题答案第四章>由会员分享,可在线阅读,更多相关<计算机组成原理习题答案第四章(6页珍藏版)>请在人人文库网上搜索. 1.计算机组成原理习题答案第四章1.指令长 ...
最新文章
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
- 【数据结构学习】顺序栈 C语言
- GitHub:我开源我自己;CEO:不存在的
- C++ Primer 5th笔记(chap 16 模板和泛型编程)类型无关和模板编译
- hibernate缓存机制
- IOS下,javascript字符串转日期类型错误
- 保存到redis的字符串类型出现斜杆_深入浅出Redis:这次从Redis底层数据结构开始...
- Oracle In Memory最佳实践(附PPT和视频回放)
- SAP License:SAP学习心得
- arm linux驱动 知乎_Linux初级驱动-字符设备驱动-点亮LED
- 剑指offer面试题48. 最长不含重复字符的子字符串(滑动窗口)
- Springboot整合JasperReport报表以及报表打印功能
- 圈圈教你玩usb第一版硬件实物图
- 学习笔记(26):玩转Python-Python3基础入门-案例-快递价格计算器(1)
- IAR 非调试模式直接下载程序
- coffe-script
- 玩转树莓派之ZigBee网关
- LabVIEW控制Arduino实现RGB调色灯(基础篇—6)
- python画厢式图_用matplotlib画箱体图(boxplot)
- Linux攻关之基础模块十二 进程相关