RationalRose-详细介绍和例子详细操作 下载本文

使用Rational Rose 进行UML可视化建模

本课程以某所大学的《在线选修课程管理系统》为例来介绍怎样使用Rational Rose 进行UML可视化建模。

最终递交三个文件:regist.mdl, regist.sql, VB的代码或Java的代码。 内容:

一、 系统描述 ................................................................................................................... 2 二、 用例图(Use Case View) ............................................................................................ 2 三、 活动图(Activity Diagram)(建立选修课程目录表) .................................................. 5 四、 相关的包和类以及简单类图 ................................................................................. 11 五、 用例实现图(Use Case Realization Diagram) ......................................................... 13 六、 顺序图(Sequence Diagram)与合作图(Collaboration Diagram) ............................. 15 七、 类图中的关系(Relationships) ................................................................................. 18 八、 类图中的操作与属性 ............................................................................................. 20 九、 类图中的泛化 ......................................................................................................... 22 十、 状态图(Statechart Diagram) .................................................................................... 26 十一、 构件图(Component Diagram) .......................................................................... 31 十二、 部署图(Deployment Diagram) ......................................................................... 34 十三、 生成程序代码 .................................................................................................. 35 十四、 创建数据库设计 .............................................................................................. 40 十五、 附件1:转换后的Visual Basic程序 ............................................................. 44 十六、 附件2:转换后的Java程序 .......................................................................... 45 十七、 附件3:生成的SQL语句 .............................................................................. 46

1

一、 系统描述

1.大学教师选择本学期要教授的课程,每位教师最多只能上报4门课程。

2.教师选课结束后,教务管理人员进行协调和确认教师的课程,并创建本学期的课程目录表,向学生公布。

2.学生填写课程选修表,每个学生最多选修4门课程;每门选修课程的学生数最多为10人,最少为3人。人数达到10人时,停止学生登记注册此门课程; 3.学生选课结束后,系统自动取消人数少于三人的课程。

4.学生按最终的课程表到财务处办理收费手续(billing system)。 5.教师可查询所教课程的学生花名册(roster)。 6.教务管理人员维护学生、教师和课程的信息。

二、 用例图(Use Case View)

1.《在线选修课程管理系统》中的执行者(Actors)

? 注册选修课程的学生; ? 教授选修课程的教师;

? 教务管理人员必须汇总选修课程情况,制作课程表;

? 教务管理人员必须维护关于课程、教师和学生的所有信息; ? 财务管理系统从本系统中取出收费信息。 2.使用Rational Rose 创建执行者(Actors)

图1

2

1) 右击browser框中的Use Case View包,弹出快捷菜单; 2) 选择New——Actor项;

3) 输入执行者的名字;(如出错,可用Rename命令更改)

4) 如果文档窗口不可见,选择屏幕上方的View——Documentation菜单; 5) 在browser框中选中所需执行者;

6) 将光标置于文档框中,输入相应文档。 3.《在线选修课程管理系统》中的用例(Use Case)

? 注册选修课程(学生);

? 选择教授的选修课程(教师); ? 索取课程花名册(Roster)(教师); ? 维护课程信息(教务管理人员); ? 维护教师信息(教务管理人员); ? 维护学生信息(教务管理人员); ? 创建课程目录(教务管理人员); 4.使用Rational Rose 创建用例(Use Case)

图2

1) 2) 3) 4) 5) 6)

右击browser框中的Use Case View包,弹出快捷菜单; 选择New——Use Case项;

输入用例的名字;(如出错,可用Rename命令更改)

如果文档窗口不可见,选择屏幕上方的View—— Documentation菜单; 在browser框中选中所需用例;

将光标置于文档框中,输入相应文档。

5.使用Rational Rose 创建主用例图(Main Use Case Diagram)

1) 双击browser框中的Use Case View包中的Main条目,打开主用例图; 2) 单击选中browser框中的执行者,并将其拖到主用例图中; 3) 重复第2)步,直到完成所需的工作为止;

3

4) 5) 6) 7)

单击选中browser框中的用例,并将其拖到主用例图中; 重复第4)步,直到完成所需的工作为止;

在工具条中选择单向关联(Unidirectional Association)图标;

单击一个执行者,并拖到相应的用例上;或单击一个用例,并拖到相应的执行者上。

Select courses to teachStudentProfessorRegister for coursesRequest course rosterBilling SystemMaintain student informationMaintain course informationMaintain professor informationRegistrarCreate course catalogue

图3

4

三、 活动图(Activity Diagram)(建立选修课程目录表)

图4

1.使用Rational Rose 创建活动图(Activity Diagram)

1) 右击browser框中的Use Case View包,弹出快捷菜单; 2) 选择New——Activity Diagram项;

3) 输入活动图的名字;(如出错,可用Rename命令更改) 4) 双击browser框中的Activity Diagram名称,打开该图。 2.使用Rational Rose 创建活动(Activity)

1) 在工具条中选择Activity图标;

2) 在活动图(Activity Diagram)中单击要放置活动(Activity)的位置; 3) 输入活动名字;(如出错,可用Rename命令更改) 4) 在工具条中选择State Transition图标;

5) 单击一个活动,并将其拖到相应的活动上。

5

图5

3.使用Rational Rose 创建决策点(Decision Points)

1) 在工具条中选择Decision图标;

2) 在活动图(Activity Diagram)中单击要放置决策点的位置; 3) 输入决策的名字;(如出错,可用Rename命令更改) 4) 在工具条中选择State Transition图标;

5) 单击一个活动,并将其拖到相应的决策点上; 6) 在工具条中选择State Transition图标;

7) 单击一个决策点,拖至拐角处单击左键,再将其拖到相应的活动上; 8) 双击此条转换线,打开规格设定框; 9) 选择Detail 标签页;

10) 在Guard Condition框中输入条件No; 11) 点按OK按扭,关闭规格设定框;

12) 在此条转换线上单击左键,选中此条转换线;

13) 点按屏幕上方的Format:Line Style:Rectilinear菜单; 14) 调整这条线,使其美观。

6

图6

4.使用Rational Rose 创建同步条(Synchronization Bar)

1) 在工具条中选择Horizontal Synchronization图标;

2) 在活动图(Activity Diagram)中单击要放置同步条的位置; 3) 在工具条中选择State Transition图标; 4) 完成下图。

7

图7

5.使用Rational Rose 创建泳道( Swim lanes)

1) 在工具条中选择Swim lanes图标;

2) 在活动图(Activity Diagram)中单击要放置泳道的位置; 3) 双击泳道,打开规格说明框; 4) 在Name框中输入泳道的名字; 5) 点按OK按扭,关闭规格设定框; 6) 对泳道的大小位置进行调整;

7) 将所需的活动和变换线拖至新泳道中。

8

图8

6.使用Rational Rose 创建起始活动和终止活动

1) 在工具条中选择起始活动或终止活动图标;

2) 在活动图(Activity Diagram)中单击要放置起始活动或终止活动的位置; 3) 在工具条中选择State Transition图标;

4) 单击起始活动,拖到相应的活动上,或者单击一个活动,拖至终止活动上。

9

图9

10

四、 相关的包和类以及简单类图

1.在Rational Rose的Browser框中创建类(Class)

图10

1) 右击browser框中的Logica View,弹出快捷菜单;

2) 选择New——Class项;

3) 输入类的名字;(如出错,可用Rename命令更改) 4) 在所建类上单击右键,弹出快捷菜单;

5) 选择Open Specification项,选择General标签页; 6) 在Stereotype框中选择entity类; 7) 单击OK按扭关闭规格说明框。 边界类〈Boundary Classes〉:

? 可用来塑造操作者与系统之间的交互; ? 可用来理清用户在系统边界上的需求; ? 可设计抽象的用户界面对象。 控制类〈Control Classes〉: ? 可协调对象之间的交易;

? 可将使用案例的细节部分封装起来; ? 可将复杂的计算或商务逻辑封装起来。 实体类〈Entity Classes〉: ? 代表永久保存的信息;

? 代表E-R模型之中人、事、时、地、物或概念的信息及行为。

2.在Rational Rose的Browser框中创建包(Packages)

1) 右击browser框中的Logica View,弹出快捷菜单; 2) 选择New—— Package项;

3) 输入包的名字;(PeopleInfo包用来存放与人员有关的内容;Interfaces包用来

存放与界面有关的内容;UniversityArtifacts用来存放与学校工件有关的内容。)

4) 新建图中的相关类,并设置其相应的类别; 5) 单击Browser框中的类,将其拖至相应的包中。

11

图11

3.Rational Rose中的主类图(Main Class Diagram)

1) 双击browser框Logica View中的Main类图以打开之; 2) 单击Browser框中的包,将其拖到Main类图上; 3) 重复第2)步,完成下图。

图12

4.在Rational Rose中创建包中的主类图(Package Main Class Diagram)

1) 双击Main类图中的University Artifacts包,rose将打开这个包,并创建这个

包的主类图(Package Main Class Diagram);

12

2) 单击Browser框中的类,将其拖到类图上; 3) 重复第2)步,完成下图。

图13

五、 用例实现图(Use Case Realization Diagram)

1.使用Rational Rose 创建逻辑视图中的用例图(Use Case Diagram)

图14

1) 右击browser框中的Logica View,弹出快捷菜单; 2) 选择New——Use Case Diagram项; 3) 输入用例图的名字“Realizations”;(如出错,可用Rename命令更改)

13

4) 右击browser框中的Logica View,弹出快捷菜单; 5) 选择New—— Use Case项;

6) 输入用例的名字;(如出错,可用Rename命令更改) 7) 双击新建的用例,打开用例的规格设定框;

8) 单击Stereotype框,选择use case realization选项; 9) 关闭用例的规格设定框;

10) 重复4——9步,双击“Realizations”,打开实现用例图; 11) 将新建的实现用例拖入图中,如下图。

图15

14

六、 顺序图(Sequence Diagram)与合作图(Collaboration Diagram)

1.使用Rational Rose 创建顺序图(Sequence Diagram)

图16

1) 右击browser框中的Logica View中的“Maintain course information”实现用

例,弹出快捷菜单;

2) 选择New—— Sequence Diagram项; 3) 输入顺序图的名字“Creat a course”; 2.在顺序图中创建对象和信息

1) 双击顺序图名称,打开顺序图;

2) 将browser框Use CaseView包中的执行者“Registrar”拖入图中; 3) 选择工具条中的“Object”图标;

4) 单击图中放置对象的位置,并输入相应的名字; 5) 重复3——4步;

6) 选择工具条中的“Object Message”图标; 7) 从信息发出者拖至信息接收者; 8) 输入信息的名字; 9) 重复6——8步。

15

图17

3.给顺序图中的对象分配类

1) 单击选中Browser框中所需的类; 2) 将此类拖至顺序图相应的对象上。

图18

16

3.将顺序图转换为合作图

图19

1) 双击顺序图名称,打开顺序图;

2) 选择屏幕上方的菜单Browser——Create Collaboration Diagram,或者点按F5

键;

3) 调整图中的对象和信息,使其美观。

17

七、 类图中的关系(Relationships)

1.使用Rational Rose 创建关系(Relationship)

图20

1) 打开University Artifacts包中的Main类图;

2) 选择工具条中的“Association”图标(若此图标不存在,则右击工具条,选择

Customize项将其加入);

3) 点按类图中的一个类,拖至另一个类,输入关系的名称;

4) 选择工具条中的“Aggregation”图标(若此图标不存在,则右击工具条,选择

Customize项将其加入);

5) 点按类图中的一个整体类,拖至另一个部分类,输入关系的名称。

2.使用Rational Rose 创建角色(Role)

18

图21

1) 新建一个People Info包的Main类图;

2) 右击关系线(靠近需要创建角色的类的一端),弹出快捷菜单; 3) 选择Role Name项,输入角色的名字。

3.增加多重度

图22

1) 双击关系线,使其弹出规格设定框;

2) 选择Detail标签页(Role A Detail 或者 Role B Detail); 3) 在Multiplicity框中输入或选择相应的多重度; 4) 点按OK按扭,关闭规格设定框。 4.创建包之间的关系

19

图23

1) 打开Logica View中的Main类图; 2) 选择工具条中的“dependency”图标;

3) 点按类图中的一个客户包,拖至另一个供应包。

八、 类图中的操作与属性

图24

20

1.使用Rational Rose 创建属性和方法

1) 右击browser框Logica View中UniversityArtifacts包中的类,弹出快捷菜单; 2) 选择New——Attribute项,输入相应的名字; 3) 重复1——2步,完成添加属性;

4) 右击browser框Logica View中UniversityArtifacts包中的类,弹出快捷菜单; 5) 选择New——Operation项,输入相应的名字; 6) 重复4——5步,完成添加操作; 2.在类中增加了属性和操作后对类图的影响

1) 打开University Artifacts包中的Main类图;

2) 将图中相关类的显示改为label(右击每一个类,选择Options: Stereotype

Display: Label菜单);

3) 类图中相应的属性与操作自动变化为下图。

图25

21

九、 类图中的泛化

1.使用Rational Rose 创建一个有泛化关系的类图

1) 在People Info包中创建一个空类图Generalization; 2) 创建类图中相关的类,并将相关的类拖入图中; 3) 选择工具条中的“Generalization”图标; 4) 点按类图中的一个子类,拖至一个父类; 5) 重复第4步完成下图;

图26

6) 将左边的泛化箭头拖至右边的泛化线上; 7) 调整图形。

22

图27

2.将有泛化关系的类图进行扩展

1) 将Course Offering类拖入图中,并创建对应的关联线、角色、多重度; 2) 为相关的类创建属性。

图28

23

3.将有泛化关系的类图进行优化

1) 在Browser框中将子类中的公共属性拖入父类中; 2) 将子类中多余的属性删去。

图29

4.将有泛化关系的类图进行多层泛化

1) 在People Info包中创建相关的类,并拖入图中; 2) 创建关系线、泛化线和多重度。

24

图30

25

十、 状态图(Statechart Diagram)

1.使用Rational Rose 创建状态图(Statechart Diagrams)

图31

1) 右击browser框中的CourseOffering类,弹出快捷菜单;

2) 选择New——Statechart Diagrams项;

3) 输入状态图的名字“CourseOffering States”。 2.使用Rational Rose 创建状态(States)

图32

1) 在工具条中选择State图标;

2) 在状态图中单击要放置状态的位置;

3) 输入状态的名字。(如出错,可用Rename命令更改)

26

3.使用Rational Rose 创建状态转换(State Transitions)

图33

1) 在工具条中选择State Transitions图标; 2) 单击起始状态,并拖至下一个状态;

3) 输入状态转换的名字。(如出错,可用Rename命令更改) 4.使用Rational Rose 创建起始状态

1) 在工具条中选择Start图标;

2) 在状态图中单击要放置起始状态的位置; 3) 用状态转换线进行连接。

图34

27

5.使用Rational Rose 创建结束状态

图35

1) 在工具条中选择Stop图标;

2) 在状态图中单击要放置结束状态的位置; 3) 用状态转换线进行连接。

6.使用Rational Rose 增加状态转换的细节部分

1) 双击某条转换线,打开规格设定框; 2) 选择Detail 标签页;

3) 在相应的框中输入action(/后的内容)、guard condition([ ]里的内容)以及发出

的send(^后的内容);

4) 点按OK按扭,关闭规格设定框。

28

图36

7.使用Rational Rose 增加状态的Actions部分

1) 双击某个状态,打开规格设定框; 2) 选择Actions标签页;

3) 右击Actions框中的任一位置,弹出快捷菜单; 4) 选择Insert项,将创建一个类型为entry的action; 5) 双击这个action,弹出action的规格设定框;

29

图37

6) 在when框中设定相应的类型;

7) 在type框中设定:action或者send event(用^表示); 8) 输入action的名字,或event的信息; 9) 点按OK按扭,关闭Action规格设定框。 10) 点按OK按扭,关闭状态规格设定框。

30

图38

十一、 构件图(Component Diagram)

1. 使用Rational Rose 创建Main构件图(Component Diagram)

1) 在Browser框中的Component View中创建图中的各个构件包; 2) 双击Browser框中的Component View中的Main构件图; 3) 将Browser框中的Component View中的构件包拖入图中; 4) 创建包之间的依赖线。

31

图39

2.创建University构件包中的构件

1) 双击Main构件图中的University包,打开图形; 2) 在工具条中选择Component图标; 3) 单击图中某一位置,放置构件; 4) 输入构件名称。

图40

3.将类映射到构件上

32

图41

1) 2) 3) 4) 5) 6)

右击Browser框中的CourseOffering构件,弹出快捷菜单; 选择Open Specification项; 选择Realizes标签;

右击所需的类,弹出快捷菜单; 选择Assign项;(分配)

点按OK按扭,关闭规格设定框。

33

十二、 部署图(Deployment Diagram)

1.使用Rational Rose 创建部署图(Deployment Diagram)

1) 双击Browser框中的部署图(Deployment Diagram);

2) 选择工具条中的Processor图标,并单击图中某一位置; 3) 输入结点的名字;

4) 选择工具条中的Connection图标; 5) 点击某一结点,拖至另一结点; 6) 选择工具条中的Text图标; 7) 在相应结点下写上文字。

图42

34

十三、 生成程序代码

1.使用Rational Rose为构件设定程序设计语言

图43

1) 右击Browser框Component View中University包中的CourseOffering构件,

弹出快捷菜单;

2) 选择Open Specification项,打开构件Course Offering的规格设定框; 3) 在Language框中选择相应的语言; 4) 点按OK按扭关闭对话框。

2.建模辅助工具(如需要设定,则可进入,一般情况下可省略)

1) 右击Browser框Logica View中University包中的Course Offering类,弹出快

捷菜单,选择Model Assistant项;

2) 如需要设定,则可更改选项,一般情况下可省略此步操作;

3) 编程语言为Visual Basic时,见图44,前提是系统必须安装了VB;编程语

言为Java时,见图45,前提是系统必须安装了JDK。

35

图44:编程语言为Visual Basic时

36

图45:编程语言为Java时

3.生成代码

1) 右击Browser框Component View中University包中的CourseOffering构件,

弹出快捷菜单;

2) 选择Update Code项;

37

图46

3) 选中相应的check框,点击Next按扭;

图47

38

4) 点击Finish按扭;

图48

5) 如有错误,则显示相应错误; 6) 点按Close按扭,关闭窗口。

39

十四、 创建数据库设计

1.将实体类的persistence属性设为persistent

本系统有四个实体类:Student、Professor、Course、CourseOffering,分别将它们的persistence属性设为persistent。

以Course为例,双击Browser框Logical View中UniversityArtifacts中Course类,弹出class specification对话框,选择detail tab,将persistence属性设为persistent。

图49

40

2.生成数据模型

将UniversityArtifacts包和PeopleInfo包转成数据库的数据模型。

以UniversityArtifacts为例。右击Browser框Logical View中UniversityArtifacts包,弹出快捷菜单,选择Data Modeler/ Transform to Data Model。弹出对话框,在Destination Schema中键入”db”,点击”OK”。在Browser框Logical View中将生成”Schemas”包和“db”子包。子包中生成了T_Course和T_CourseOffering两个table。

对PeopleInfo包进行相同操作,生成T_Student, T_Professor, T_RegistrationUser三个table.

图50

41

3.创建Data Model Diagram

右击Browser框中Logical View/”Schemas”/“db”,弹出快捷菜单,选择Data Modeler/ New/ Data Model Diagram,生成一个Data Model Diagram, 取名为Main。

图51

双击Main,打开进行编辑,将五个table拖进diagram,生成ER图。

图52

42

4.生成SQL语句

右击Browser框中Logical View/”Schemas”/“db”,弹出快捷菜单,选择Data Modeler/ Forward Engineer,跟wizard进行操作,将生成的SQL语句保存在文件中。参见附件3。

你可以选择生成表格create或drop的SQL语句。

图53

43

十五、 附件1:转换后的Visual Basic程序

Option Explicit

'##ModelId=3E2A1E9D0148 Implements Course

'##ModelId=3E2E13980177

Private mCourseObject As New UniversityArtifacts.Course /*由Course 泛化而来*/ '##ModelId=3E2A980002EE

Public Teacher As Professor /*由设置角色而来*/ '##ModelId=3E2A9DAE0261

Public NewProperty2(3 To 10) As Student /*由限定条件而来*/ '##ModelId=3E2A7BEB035D Public NewProperty As Course '##ModelId=3E2A826C0109

Public Sub getOffering()/*由getOffering操作而来*/ End Sub

'##ModelId=3E2A827B0280

Public Sub addProfessor()/*由addProfessor操作而来*/ End Sub

'##ModelId=3E2E139801F4

Private Sub Course_getOfferings()/*由泛化继承而来*/ End Sub

'##ModelId=3E2E13980203

Private Sub Course_setProfessor()/*由泛化继承而来*/ End Sub

'##ModelId=3E2E13980213

Private Property Set Course_(ByVal RHS As CourseOffering) End Property

'##ModelId=3E2E13980261

Private Property Get Course_() As CourseOffering End Property

'##ModelId=3E2E1F55030D Public Sub CourseOffering() End Sub

'##ModelId=3E2E3247038A

Private Property Set Course_theProfessorCourseManager(ByVal RHS As ProfessorCourseManager) End Property

'##ModelId=3E2E32480000

Private Property Get Course_theProfessorCourseManager() As ProfessorCourseManager End Property

'##ModelId=3E2E3248003E

44

Private Property Set Course_theCourseOffering(ByVal RHS As CourseOffering) End Property

'##ModelId=3E2E3248009C

Private Property Get Course_theCourseOffering() As CourseOffering End Property

十六、 附件2:转换后的Java程序

//Source file: C:\\\\Program Files\\\\Rational\\\\RUPBuilder\\\\University\\\\CourseOffering.java package University;

public class CourseOffering extends Course /*由Course 泛化而来*/ {

private Course mCourseObject;

public Professor Teacher; /*由设置角色而来*/ public Student NewProperty2[]; public Course NewProperty; /** @roseuid 3E2E1F55030D */ public CourseOffering() { } /**

* @roseuid 3E2A826C0109 */

public void getOffering()/*由getOffering操作而来*/ { } /**

* @roseuid 3E2A827B0280 */

public void addProfessor()/*由addProfessor操作而来*/ { } /**

* @roseuid 3E2E139801F4 */

private void Course_getOfferings()/*由泛化继承而来*/ { } /**

* @roseuid 3E2E13980203 */

private void Course_setProfessor()/*由泛化继承而来*/ {

45

} /**

* @param RHS

* @roseuid 3E2E13980213 */

private void Course_(CourseOffering RHS) { } /**

* @return CourseOffering * @roseuid 3E2E13980261 */

private CourseOffering Course_() {

return null; } }

十七、 附件3:生成的SQL语句

CREATE TABLE T_Course ( name SMALLINT NOT NULL, description SMALLINT NOT NULL, creditHours SMALLINT NOT NULL, T_Course_ID INTEGER NOT NULL, CONSTRAINT PK_T_Course7 PRIMARY KEY (T_Course_ID) );

CREATE TABLE T_CourseOffering ( T_CourseOffering_ID INTEGER NOT NULL, T_Course_ID INTEGER, T_RegistrationUser_ID INTEGER NOT NULL, COL_2 INTEGER NOT NULL, CONSTRAINT PK_T_CourseOffering8 PRIMARY KEY (T_CourseOffering_ID) );

CREATE TABLE T_RegistrationUser ( realname VARCHAR ( 255 ) NOT NULL, username VARCHAR ( 255 ) NOT NULL, password VARCHAR ( 255 ) NOT NULL, birthday DATE NOT NULL, gender SMALLINT NOT NULL, T_RegistrationUser_ID INTEGER NOT NULL, department INTEGER NOT NULL, CONSTRAINT PK_T_RegistrationUser11 PRIMARY KEY (T_RegistrationUser_ID)

46

);

CREATE TABLE T_Professor ( T_RegistrationUser_ID INTEGER NOT NULL, CONSTRAINT PK_T_Professor12 PRIMARY KEY (T_RegistrationUser_ID) );

CREATE TABLE T_Student ( T_RegistrationUser_ID INTEGER NOT NULL, CONSTRAINT PK_T_Student13 PRIMARY KEY (T_RegistrationUser_ID) );

CREATE INDEX TC_T_CourseOffering35 ON T_CourseOffering (COL_2);

CREATE INDEX TC_T_CourseOffering28 ON T_CourseOffering (T_Course_ID);

ALTER TABLE T_CourseOffering ADD CONSTRAINT FK_T_CourseOffering13 FOREIGN KEY (COL_2) REFERENCES T_Professor (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE T_CourseOffering ADD CONSTRAINT FK_T_CourseOffering8 FOREIGN KEY (T_Course_ID) REFERENCES T_Course (T_Course_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE T_CourseOffering ADD CONSTRAINT FK_T_CourseOffering10 FOREIGN KEY (T_RegistrationUser_ID) REFERENCES T_Professor (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE T_Professor ADD CONSTRAINT FK_T_Professor11 FOREIGN KEY (T_RegistrationUser_ID) REFERENCES T_RegistrationUser (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE T_Student ADD CONSTRAINT FK_T_Student12 FOREIGN KEY (T_RegistrationUser_ID) REFERENCES T_RegistrationUser (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

47