学习要点6、城关系演算: 学习要点7、关系逻辑 学习要点1、关系模型的基本概念 关系模型是用一种称为“关系”的二维表表示数据。 属性:关系的标题栏中各列的名字。属性描述了该列各数据项的含义。 模式:关系的名称和关系的属性集称为关系的“模式”。 Student(StudentNo,StudentName,Age,Dept)在关系模型中,数据库设计包含一个或多个关系模 式,我们将所设计的关系模式的集合称为“关系数据库模式”,或者简称为“数据库模式”。 元组:除了关系的标题栏以外,其他各行统称为“元组”。通常一个元组就表示一个对象,而元组所 属的关系就表示对象所属的类。 (990011,李明,19,计算机系) 域:与关系的每个属性相关的特定基本类型称为“域”。 需要注意的问题:关系模型要求每个元组的每个分量都是原子的,不能是结构、集合、列表、数组等 类型。 关系的模式和元组都是集合,而不是列表,因此它们的顺序是无关紧要的,我们可以重新排列关系的 行和列,而关系并不改变。 通常都为关系选择一个“标准”的属性顺序。 实例:给定关系中元组的集合称为该关系的“实例”。 举例:关系模型的基本概念 SNo SName Age CNo score 304 江民 16 A01 83 305 王海 17 A02 66 308 李小亮 17 A01 73 关系Student 属性:Sname或Age 模式:Student(Sno,Sname,Age,Cno,score) 元组:(304,江民,16,A01,83) 实例:如下三个元组的集合就是一个实例。 304 江民 16 A01 83 305 王海 17 A02 66 308 李小亮 17 A01 73 学习要点2、从0DL设计到关系设计 将ODL设计转换为关系设计主要要把握三个方面的内容: 1、从ODL属性到关系属性: 2、将ODL中的联系转换为关系: 3、将ODL中的子类结构转换为关系。 11、类中的原子属性:直接为类建立对应的关系。 12、类中的非原子属性:如果ODL中的属性是复杂的数据类型,如结构、集合等,在转化为关系模 11
11 学习要点 6、域关系演算: 学习要点 7、关系逻辑 学习要点 1、关系模型的基本概念 关系模型是用一种称为“关系”的二维表表示数据。 属性:关系的标题栏中各列的名字。属性描述了该列各数据项的含义。 模式:关系的名称和关系的属性集称为关系的“模式”。 Student ( StudentNo, StudentName, Age, Dept )在关系模型中,数据库设计包含一个或多个关系模 式,我们将所设计的关系模式的集合称为“关系数据库模式”,或者简称为“数据库模式”。 元组:除了关系的标题栏以外,其他各行统称为“元组”。通常一个元组就表示一个对象,而元组所 属的关系就表示对象所属的类。 (990011,李明,19,计算机系) 域:与关系的每个属性相关的特定基本类型称为“域”。 需要注意的问题:关系模型要求每个元组的每个分量都是原子的,不能是结构、集合、列表、数组等 类型。 关系的模式和元组都是集合,而不是列表,因此它们的顺序是无关紧要的,我们可以重新排列关系的 行和列,而关系并不改变。 通常都为关系选择一个“标准”的属性顺序。 实例:给定关系中元组的集合称为该关系的“实例”。 举例:关系模型的基本概念 SNo SName Age CNo score 304 江民 16 A01 83 305 王海 17 A02 66 308 李小亮 17 A01 73 关系 Student 属性:Sname 或 Age 模式:Student(Sno, Sname, Age, Cno, score) 元组:(304,江民,16,A01,83) 实例:如下三个元组的集合就是一个实例。 304 江民 16 A01 83 305 王海 17 A02 66 308 李小亮 17 A01 73 学习要点 2、从 ODL 设计到关系设计 将 ODL 设计转换为关系设计主要要把握三个方面的内容: 1、 从 ODL 属性到关系属性; 2、 将 ODL 中的联系转换为关系; 3、 将 ODL 中的子类结构转换为关系。 1.1、类中的原子属性:直接为类建立对应的关系。 1.2、类中的非原子属性:如果 ODL 中的属性是复杂的数据类型,如结构、集合等,在转化为关系模
型时,需要将其转化为原子类型。有几种不同的情况: (1)组成结构的每个域本身都是原子类型的: (2)如果属性是多个值的集合,要针对每个值建立一个元组: (3)如果属性是定长的数组,可以在关系中用带有数组名和下标的属性来表示类中的数组类型的属性。 举例:从0DL设计到关系设计 举例1: interface Student{ Attribute integer StudentNo: Attribute struct NameType string First,string Last)StudentName; Attribute integer Age; Attribute string Dept; } 转化为如下关系模型: StudentNo First Last Age Dept 2002101 王 云 19 计算机系 2002102 张 小华 20 化学系 举例2: 举例1: interface Student{ Attribute integer StudentNo: Attribute String StudentName; Attribute integer Age; Attribute Set <string>Dept; 转化为如下关系模型:注意其中定长数组类型属性的转换。 StudentNo StudentName Age Deptl Dept2 2002101 王云 19 计算机系 经管系 2002102 张小华 20 化学系 学习要点2、从0L设计到关系设计 2.1、单值联系的表示: 类的特性除了属性,一般还包含与其他ODL的联系,通过建立相关类中构成键码的属性集就可以表 示相关类的对象,这个属性集的作用类似于指针。 举例:从0DL设计到关系设计 举例: interface Movie Attribute string Title; Attribute integer Year; Attribute integer Length; Attribute enum color,blackwhite)FilmType; Relationship Set <Actor>actors inverse Actor:movies: Relationship Studio ownedby inverse Studio::owns, interface Studio Attribute string Name; 12
12 型时,需要将其转化为原子类型。有几种不同的情况: (1) 组成结构的每个域本身都是原子类型的; (2) 如果属性是多个值的集合,要针对每个值建立一个元组; (3) 如果属性是定长的数组,可以在关系中用带有数组名和下标的属性来表示类中的数组类型的属性。 举例:从 ODL 设计到关系设计 举例 1: interface Student { Attribute integer StudentNo; Attribute struct NameType { string First, string Last} StudentName; Attribute integer Age; Attribute string Dept; } 转化为如下关系模型: StudentNo First Last Age Dept 2002101 王 云 19 计算机系 2002102 张 小华 20 化学系 举例 2: 举例 1: interface Student { Attribute integer StudentNo; Attribute String StudentName; Attribute integer Age; Attribute Set <string> Dept; } 转化为如下关系模型:注意其中定长数组类型属性的转换。 StudentNo StudentName Age Dept1 Dept2 2002101 王云 19 计算机系 经管系 2002102 张小华 20 化学系 学习要点 2、从 ODL 设计到关系设计 2.1、单值联系的表示: 类的特性除了属性,一般还包含与其他 ODL 的联系,通过建立相关类中构成键码的属性集就可以表 示相关类的对象,这个属性集的作用类似于指针。 举例:从 ODL 设计到关系设计 举例: interface Movie { Attribute string Title; Attribute integer Year; Attribute integer Length; Attribute enum { color, blackwhite} FilmType; Relationship Set <Actor> actors inverse Actor :: movies; Relationship Studio ownedby inverse Studio :: owns; } interface Studio { Attribute string Name;
Attribute string Address; Relationship Set <Movie>owns inverse Movie :ownedby; } 在Movie类与Studio类之间具有单值联系,在Studio类中的键码是Name,可以在关系Movie的模式 中增加一个属性StudioName,关系Movie如下: Title Year Length FilmType StudioName 星球大战 1977 124 Color 福克斯公司 大力士 1991 104 Color 迪斯尼公司 学习要点2、从0L设计到关系设计 2.2、多值联系的表示: 对于多值联系(联系是某个类的聚集类型,表现为带有“St”关键字),首先找出表示每个相关对象 的键码,然后和表示集合类型的属性一样,为相关对象集合的每个元素建立一个元组。 举例:从ODL设计到关系设计 举例:(*与上例相同,可拷贝*) interface Movie Attribute string Title; Attribute integer Year; Attribute integer Length; Attribute enum color,blackwhite)FilmType; Relationship Set <Actor>actors inverse Actor::movies; Relationship Studio ownedby inverse Studio::owns, } interface Actor Attribute string Name; Attribute integer Year; Relationship Set <Movie>movies inverse Movie actors; } 在Movie类与Actor类之间具有多值联系,在Actor类中的键码是Name,可以在关系Movie的模式 中增加一个属性ActorName,关系Movie如下: Title Year Length FilmType StudioName ActorName 星球大战 1977 124 Color 福克斯公司 哈里森福特 星球大战 1977 124 Color 福克斯公司 凯瑞菲歇尔 星球大战 1977 124 Color 福克斯公司 马克哈米尔 大力士 1991 104 Color 迪斯尼公司 埃斯特韦斯 可以发现,产生的数据冗余量很大。 2.3、联系与反向联系:联系与反向联系是从两个不同的角度说明一个事实,因此在转化为关系时,只 需要保留一个即可。 3、子类的表示:将ODL子类转化为关系模式,需要遵循的原则是: 1)每个子类都对应一个关系: 2)每个关系用相应子类的所有特性,包括从超类继承下来的全部特性来表示。 举例:从ODL设计到关系设计 举例: Cartoon类是Movie类的子类,它增加了一个与Actor类的联系voice,.则Cartoon的关系模式是: 13
13 Attribute string Address; Relationship Set <Movie> owns inverse Movie :: ownedby; } 在 Movie 类与 Studio 类之间具有单值联系,在 Studio 类中的键码是 Name,可以在关系 Movie 的模式 中增加一个属性 StudioName,关系 Movie 如下: Title Year Length FilmType StudioName 星球大战 1977 124 Color 福克斯公司 大力士 1991 104 Color 迪斯尼公司 学习要点 2、从 ODL 设计到关系设计 2.2、多值联系的表示: 对于多值联系(联系是某个类的聚集类型,表现为带有“Set”关键字),首先找出表示每个相关对象 的键码,然后和表示集合类型的属性一样,为相关对象集合的每个元素建立一个元组。 举例:从 ODL 设计到关系设计 举例:(/*与上例相同,可拷贝*/) interface Movie { Attribute string Title; Attribute integer Year; Attribute integer Length; Attribute enum { color, blackwhite} FilmType; Relationship Set <Actor> actors inverse Actor :: movies; Relationship Studio ownedby inverse Studio :: owns; } interface Actor { Attribute string Name; Attribute integer Year; Relationship Set <Movie> movies inverse Movie :: actors; } 在 Movie 类与 Actor 类之间具有多值联系,在 Actor 类中的键码是 Name,可以在关系 Movie 的模式 中增加一个属性 ActorName,关系 Movie 如下: Title Year Length FilmType StudioName ActorName 星球大战 1977 124 Color 福克斯公司 哈里森 福特 星球大战 1977 124 Color 福克斯公司 凯瑞 菲歇尔 星球大战 1977 124 Color 福克斯公司 马克 哈米尔 大力士 1991 104 Color 迪斯尼公司 埃斯特韦斯 可以发现,产生的数据冗余量很大。 2.3、联系与反向联系:联系与反向联系是从两个不同的角度说明一个事实,因此在转化为关系时,只 需要保留一个即可。 3、子类的表示:将 ODL 子类转化为关系模式,需要遵循的原则是: 1)每个子类都对应一个关系; 2)每个关系用相应子类的所有特性,包括从超类继承下来的全部特性来表示。 举例:从 ODL 设计到关系设计 举例: Cartoon 类是 Movie 类的子类,它增加了一个与 Actor 类的联系 voice,则 Cartoon 的关系模式是:
Cartoon (Title,Year,Length,FilmType,StudioName,ActorName,voice) 学习要点3、E/R图到关系设计 E/R图与ODL的主要区别: 1)在ER图中,联系作为独立的概念存在(框在菱形框中),而不是像ODL那样作为特性嵌套在类 的定义中,这有助于避免数据冗余: 2)在ODL中,属性可能是任意的聚集类型,比如集合:而在ER图中,虽然并没有严格规定允许使 用的数据类型,但通常都认为允许使用结构化的数据,而不允许使用集合或者其他聚集类型的数据。 3)在ER图中,联系可以具有属性,而ODL中没有相应的概念。 举例:E/R图到关系设计 如图所示E/R图中实体集StudentNo对应的关系如表所示。 CourseNo CourseName Age StudentNo Course StudentCourse Student Teacher Score Dept StudentName StudentNo StudentName Age Dept 304 江民 19 计算机系 305 王海 20 化学系 308 李小亮 19 物理系 表 关系Student ER图中联系到关系的转换: 对于ER图中的一个联系R,它所对应的关系具有如下特性: 1)是联系R所涉及到的每个实体集的键码属性(集): 2)是R本身的属性: 3)如果属性之间有重名现象,必须重新命名关系的属性。 一个联系R涉及几个实体集,在将R转换为关系的时候,只要让R的属性包括与其相关的所有实体 集的键码属性(集)和它本身的属性即可。 举例: g
14 Cartoon(Title, Year, Length, FilmType, StudioName, ActorName ,voice) 学习要点 3、E/R 图到关系设计 E/R 图与 ODL 的主要区别: 1)在 E/R 图中,联系作为独立的概念存在(框在菱形框中),而不是像 ODL 那样作为特性嵌套在类 的定义中,这有助于避免数据冗余; 2)在 ODL 中,属性可能是任意的聚集类型,比如集合;而在 E/R 图中,虽然并没有严格规定允许使 用的数据类型,但通常都认为允许使用结构化的数据,而不允许使用集合或者其他聚集类型的数据。 3)在 E/R 图中,联系可以具有属性,而 ODL 中没有相应的概念。 举例:E/R 图到关系设计 如图所示 E/R 图中实体集 StudentNo 对应的关系如表所示。 StudentNo StudentName Age Dept 304 江民 19 计算机系 305 王海 20 化学系 308 李小亮 19 物理系 表 关系 Student E/R 图中联系到关系的转换: 对于 E/R 图中的一个联系 R,它所对应的关系具有如下特性: 1)是联系 R 所涉及到的每个实体集的键码属性(集); 2)是 R 本身的属性; 3)如果属性之间有重名现象,必须重新命名关系的属性。 一个联系 R 涉及几个实体集,在将 R 转换为关系的时候,只要让 R 的属性包括与其相关的所有实体 集的键码属性(集)和它本身的属性即可。 举例:
CourseNo CourseName Age StudentNo Course StudentCourse Student Teacher Score Dept StudentName 联系StudentCourse的对应关系SC为: StudentNo CourseNo Score 304 A01 67 304 B02 75 305 A01 89 关系SC ER图中“属于”联系到关系的转换: 不为“isa”联系建立相应的关系,与“isa”联系有关的实体集都具有相同的键码。 举例:ER图到关系设计 Title Length Type Name Year Year Movie act Actor isa voice Murder Cartoon Weapon 关系Movie的模式为 Movie(Title,Year,Length,FilmType,StudioName,ActorName) 关系Murder的模式为 Murder(Title,Year,Weapon) 关系Cartoon的模式为 Cartoon(Title,Year) 关系Voice的模式为 15
15 联系 StudentCourse 的对应关系 SC 为: StudentNo CourseNo Score 304 A01 67 304 B02 75 305 A01 89 关系 SC E/R 图中“属于”联系到关系的转换: 不为“isa”联系建立相应的关系,与“isa”联系有关的实体集都具有相同的键码。 举例:E/R 图到关系设计 关系 Movie 的模式为 Movie(Title, Year, Length, FilmType, StudioName, ActorName) 关系 Murder 的模式为 Murder(Title, Year, Weapon) 关系 Cartoon 的模式为 Cartoon(Title, Year) 关系 Voice 的模式为