APP下载

关于将类图映射成关系表的策略研究

2024-04-14李娟明德廷王兴宇

现代信息科技 2024年1期
关键词:关系数据库

李娟 明德廷 王兴宇

DOI:10.19850/j.cnki.2096-4706.2024.01.023

收稿日期:2023-05-11

摘  要:文章研究了类图映射成关系数据库中的表的策略,首先使用Rational Rose 7.0建立类图数据模型,通过给类设置不同的可见性,并在类图中使用类与类之间的各种关系,然后再探讨了类图映射成关系表的规律。实践的结果表明,将类图映射成关系数据库中的表取决于两个因素,即类的可见性和类与类之间的关系,并发现Rational Rose 7.0软件没有考虑到当属性可见性不同时映射成表中对应的属性也应该是不同的。

关键词:可视化建模;类图;关系数据库

中图分类号:TP39  文献标识码:A  文章编号:2096-4706(2024)01-0113-04

Research on Strategy for Mapping Class Diagram to Relational Table

LI Juan, MING Deting, WANG Xingyu

(College of Computer and Information Engineering, Jiangxi Agricultural University, Nanchang  330045, China)

Abstract: In this paper, the strategy of mapping class diagram to table in relational database is studied. Firstly, the data model of class diagram is established by using Rational Rose 7.0. By setting different visibility for classes and using various relationships between classes in class diagram, then the rule of mapping class diagram to relational table is discussed. The result of practice shows that the mapping of class diagram into tables in relational database depends on two factors, namely, the visibility of classes and the relationship between classes. And it is found that Rational Rose 7.0 software does not take into account that when the visibility of the attribute is different, the corresponding attribute in the mapping table should also be different.

Keywords: Visual Modeling; class diagram; relational database

0  引  言

在面向對象的分析与设计过程中,通常用类图描述软件系统的数据模型,它是建立数据库的基础。在研究类图映射成关系数据库中的表的策略过程中,文章使用Rational Rose 7.0这款软件;它是由IBM公司推出的一款可视化建模工具,提供了Data Modeler数据建模功能,可以将类图映射成关系数据库中的表。

用Rational Rose软件生成的是.mdl文件,一个文件对应一个软件系统,从一个角度观察到的系统称为一个视图(View)。一个视图由多个图(Diagrams)构成,它是在某一个抽象层次上对系统的抽象表示。Rational Rose从四个不同的角度来描述一个系统,它就有四个视图,分别是Use Case View(用例视图)、Logical View(逻辑视图)、Component View(组件视图又称构件视图)、Deployment View(配置视图)[1]。视图从软件成分角度看就是一个文件夹,它的作用是把描述系统的各个元素分别放在不同的视图中。

Use case View描述系统的外部特性、系统功能等,通过用例图表示。Logical View描述系统的设计特征,包括结构模型视图和行为模型视图,用类图、对象图、交互图、状态图和活动图表示。Component View描述系统的实现特征,用组件图(又称构件图)表示。Deployment View描述系统的物理配置特征,用配置图表示[2]。

1  类图的知识

在类图中,类用矩形框表示,用横线将矩形框分割成三栏,从上到下依次表示类名、类的属性、类的操作。类与类之间的关系有四种:关联(Association)、泛化(Generalization)、实现(Realize)、依赖(Dependency)[1]。

关联描述了类的结构之间的关系,一个类可以访问另一个类的属性和方法;关联可以是双向的,也可以是单向的,双向关联是指两个类相互之间可以访问对方的属性和方法[3],如老师与学生,用一根没有箭头的实线表示;单向关联从一个类(对象)可以访问到另一个,反过来却不行,如学生与课程,被关联的对象不知道谁与自己关联,但关联对象知道自己与谁有关联。单向关联用带箭头的实线表示,箭头指向被关联者。

聚合和组合都属于整体和部分的关系,是一种特殊的关联关系,在组合关系中个体唯一属于一个整体,部分和整体具有相同的生命周期。在聚合关系中个体可以属于多个整体[2]。组合关系用一端有实心菱形的实线表示,其中实心菱形靠近表示整体的类。聚合关系用一端有空心菱形的实线表示,其中空心菱形靠近表示整体的类。

泛化关系又称继承关系,表示一般与特殊的关系,存在于子类与父类之间。用一端有三角箭头的实线表示,其中箭头指向父类。例如,喜鹊是鸟类的一种,既有喜鹊的特性也有鸟的共性。

实现关系将两种模型元素连接起来,其中一个模型元素只具有行为的定义,而行为的具体实现则是由另一个模型元素给出。如类和接口之间就是实现关系。接口可以看成是一种特殊的类,描述了一系列的方法,为一个类或组件规定了其必须提供的服务。接口没有属性,只有声明的操作方法(对于方法没有实现部分),而由实现类具体定义实现部分[2]。实现关系用一端有三角箭头的虚线表示,箭头指向接口。

依赖关系描述两个类之间的使用关系,一个类的实现需要另一个类的协助,其中一个类是独立的,另一个类是非独立的,它依赖于独立的类。依赖关系用带箭头的虚线表示,箭头指向被依赖的类[4]。

2  将类图转换成关系数据库中的表

创建类图并将类图映射成关系数据库中的表操作步骤如下:

第一步:在Logical View逻辑视图中创建一个包(右击Logical View,选择New→package),本例中将包取名为class,包其实就是文件夹。在class包中创建六

个类,分别是User(用户类)、Course(課程类)、Student(学生类)、StudentList(学生名册类)、Teacher(教师类)、CourseTask(教学任务类),这些类必须在一个包中,否则不能映射成表。右键单击Logical View,在弹出的快捷菜单中选择New Class Diagram,利用工具栏在工作窗口中创建的类图如图1所示。

图1  选课系统的类图

在图1所示的类图中,User类有两个子类Student和Teacher,这两个子类(Student和Teacher)与CourseTask类之间有关联关系,在Student与CourseTask之间的关联关系中StudentList是关联类,CourseTask类与Course类之间是聚合关系。

第二步:设置每个类的持久性。打开类的specification(规格说明),在Detail页选中persisent(持久性)。

第三步:设置对象的标识。比如选择一个Course类,按鼠标右键单击其属性CourseID,在菜单项Data Modeler下勾选Part of Object Identity,当Course类映射成表时,就会把属性CourseID作为其关键属性。设置对象的标识相当于设置了类的关键属性。

User类有两个属性UserID和password,如果不设置User类的对象标识,那么当User类的子类Student映射成表的时候,把User_ID(类名_ID)作为Student表的属性,这是从其父类User类继承来的属性。如果对User类的属性UserID设置了对象标识,那么从父类User类继承来的就是UserID这个属性,所以应该对类的关键属性设置对象标识。

第四步:选择类包class,单击右键在弹出的菜单中选择Data Modeler→Transform to Data Model…,在弹出的对话框中,填写要转换的模式名为School,其他信息可不填,按确定键后在Logical View中自动生成schemas包,School子包就放在schemas包里,展开School包可看到每个类映射成一张关系表。右击School包里的表,打开specification中的columns页,可看到每个类映射成的表中所有的属性。

3  类中属性的映射策略

若要将图1所示的类图映射成关系数据库中的表,就需要分析每个表都有哪些属性,为了方便分析,每个类只取了几个主要属性[5]。

属性的映射策略取决于两个因素:类的可见性以及类与类之间的关系。可见性表示一个操作或属性是否能被另一个操作所访问。类的可见性有四种:public(公共的)、private(私有的)、protected(受保护的)、implementation(实现)[6]。公共的属性和方法对其他模型元素都是可访问的。受保护的属性和方法只对类本身、它的子类或友元是可看见的,受保护的属性和方法不被外部类使用。保护可见性是默认的可见性。私有的属性和方法只对类本身和类的友元是可见的。实现的属性和方法只在类本身的内部是可看见的。实现可见性最有限制性。

类与类之间的关系有关联、泛化、实现、依赖。这四种关系的映射策略如下。

3.1  关联关系的映射

两个类如果存在双向关联,一个类把另一个类的标识属性映射成自己的一个新属性,聚合和组合关系映射时与一般的关联关系的处理方式相同[7]。比如Student类和CourseTask类之间有双向关联关系,于是CourseTask类的标识属性TaskID映射成为Student类的属性,与此同时,Student类的标识属性StudentID映射成为CourseTask类的属性,如图2和图3所示。

两个类如果存在单向关联,从一个类可以访问到另一个,反过来却不行。单向关联中能被访问的类的标识属性映射成为可以访问它的那个类的一个属性[8]。例如A类与B类存在单向关联,A类有属性i,B类有属性j;A类可以访问B类的属性j,B类却不可以访问A类的属性。A类映射得到的表中有两个属性,一个是自身属性i,另一个属性是通过关联关系得到B类的属性j;然而B类却不能访问A类的属性,所以B类映射得到的表中只有自身的属性j。

3.2  泛化关系的映射

类之间的继承关系存在于父类与子类之间,根据可见性来实现子类对父类的属性继承。子类可以继承和访问父类的公共属性和受保护的属性,但是不能继承和访问父类的私有属性和实现属性[9]。

3.3  实现关系的映射

有实现关系的类在映射成表时不产生任何新属性。

3.4  依赖关系的映射

有依赖关系的类在映射成表时不产生任何新属性。

为了研究可见性的映射问题,先把六个类的所有属性都设为private私有的,来分析映射成表的策略。以Student类为例,发现它映射成Student表时有五个属性,如图2所示。按照UML中可见性的规则,子类Student无法继承父类User的私有属性和方法[10],可是Student表却包含有其父类的私有属性UserID。后来再把这六个类的部分属性改为protected,映射得到的表与先前设为私有属性映射得到的表进行比较,发现并无区别。由此可见Rational Rose 7.0软件没有考虑到属性可见性的映射问题。

在图1所示的类图中,Student类与CourseTask类有关联关系,于是CourseTask类的标识属性TaskID映射成为Student表的一个属性。Student类的UserID属性是从父类User继承来的,再加上它自身的3个属性StudentID、StudentName、ClassName,于是Student表中一共拥有五个属性,如图2所示。

再看CourseTack类,它与Student类、Teacher类都存在关联关系,于是StudentID和TeacherID作为CourseTack表的属性;CourseTack类与Course类之间有聚合关系,于是Course类的标识属性CourseID映射成为CourseTack表的一个属性,CourseTack表中的UserID属性是从父类User继承来的,再加上它自身的属性TaskID,于是CourseTack表中一共拥有五个属性,如图3所示。

StudentList是关联类,映射时只是把它自身的4个属性映射成StudentList表的属性,如图4所示。

综合考虑可见性和类的关系的映射规则,将UserID、StudentID、TeacherID、TaskID、CourseID这些属性设成Protected,这样更符合可见性的映射规则,如图5所示。

4  结  论

通过分析类图转换成数据库中表的策略,发现它取决于两个因素:类的可见性以及类与类之间的关系。与此同时还发现Rational Rose 7.0軟件在映射过程中当属性可见性不同时没有区别对待。

参考文献:

[1] 杨弘平.UML2基础、建模与设计教程 [M].北京:清华大学出版社,2015.

[2] 刁成嘉.UML系统建模与分析设计 [M].北京:机械工业出版社,2007.

[3] 张晞.UML类图与关系数据库之间的映射策略 [J].广东自动化与信息工程,2001(1):32-35.

[4] 刘超,张莉.可视化面向对象建模技术:标准建模语言UML教程 [M].北京:北京航空航天大学出版社,1999.

[5] 张念春,杨寿保.UML模型向关系数据库的映射方法初探 [J].计算机工程与应用,2002(19):212-214.

[6] 顾莹莹,高建华.从UML类图到关系数据库表的代码生成方法 [J].计算机工程,2005(10):91-93.

[7] 刘晓建,李战怀.基于关系模型的UML类图一致性检验 [J].计算机工程与应用,2006(26):13-16+28.

[8] 寇迎奇.基于形式化UML的关系数据库实现策略 [D].北京:北京化工大学,2007.

[9] 张晞.UML类图在关系数据库中的实现 [J].计算机应用研究,2001(12):131-133.

[10] 张虹,郑会颂.UML中的类模式在关系数据库中的映射及其实现 [J].南京邮电学院学报,2005(3):73-78.

作者简介:李娟(1971—),女,汉族,湖北鄂州人,副教授,硕士,研究方向:软件工程与建模;通讯作者:明德廷(1972—),男,汉族,湖北嘉鱼人,副教授,硕士,研究方向:计算机软件与应用。

猜你喜欢

关系数据库
关系数据库在高炉数据采集系统中的应用
关系数据库技术在计算机网络设计中的应用
XML与关系数据库之间的转换
关系数据库与非关系数据库
实体的动态属性在数据库设计中的解决方案
计算机网络设计中关系数据库技术的应用
掌游西塘APP设计与实现
探讨关系数据库设计中范式理论的教学方法
基于索引结构的关系数据库关键词检索
一种基于数据图划分的关系数据库关键词检索方法