1 多对多关系示例

1、表名和字段
学生表:Student(s_id,s_name,s_birth,s_gender) -->学生编号,学生姓名,,出生年月,学生性别
课程表:Course(c_id,c_name) -->课程编号,课程名称
教师表:Teacher(t_id,t_name) -->教师编号,教师姓名
成绩表:Score(s_id,c_id,s_score) -->学生编号,课程编号,分数
教师—课程表(teach):Teach(t_id,c_id)

2、表之间的关系
学生与课程之间是多对多(m:n)的关系:一名学生要学习多门课程,一门课程有多名学生学习。
教师与课程之间是多对多(m:n)的关系:一个老师可以上多门课程,一门课程可以由多个老师上
注意:多对多的关系,会生成第三张表,将多对多的关系转换成一对多的关系

2 创建CDM

点击菜单栏“File”,点击“New Model”,打开New Model对话框,在该对话框中:
①选择第二个,Model types;
②选择第二个,Conceptual Data Model;
③默认选中了Conceptual Diagram
④在Model name处为模型起一个名字,在本例中命名为:sct;
⑤点击ok。
请添加图片描述
将Diagram_1改名,改成CDM,然后点击保存按钮,选择合适的路径保存该模型。
请添加图片描述
在最右边的Toolbox,选择Conceptual Diagram,选择第2个图标,在中间的绘图区域绘图,有几个实体,就点几下鼠标(在本例中有三个实体,因此绘制三个),然后将鼠标恢复成箭头状态。
请添加图片描述
①双击第一个实体图标(刚刚创建的蓝色的图像),根据Student表(s_id,s_name,s_gender,s_birthday)进行绘制;
②进入General界面,更改Name,本例中更改为:Student;
③点击Attributes,添加属性,在Name处填写字段名,在Data Types处选择数据类型(两个图标都是修改数据类型的选项),如果该字段为主键,则勾选中间列(Primary Identifier);
④点击Identifiers,在Name处添加主属性,点击下方的“应用”,再点击确定。
请添加图片描述
其余的两个实体图标也按照上面的方法进行设置,设置结果如下所示:
在这里插入图片描述
为了使实体图看起来更美观,为实体图设置字体等。鼠标右击Student实体图,选择选择Format,然后点击Font选项卡,在这里可以修改字体,最后点击“应用”,再点击“确定”即可,Teacher和Course实体图也是同样操作。

3 建立实体之间的联系

①点击Toolbox下的Conceptual Diagram下的第3个小图标(Relationship);
②将鼠标按住从Student框内拉到Course框内,再松开鼠标,然后将鼠标切换回去箭头,Teacher和Course也相同。
请添加图片描述
双击Relationship_1部分,会弹出关系窗口,在General选项卡中将Name改名,学生和课程之间的关系是成绩,因此将Name修改为Course。然后点击Cardinalities选项卡,在Student to Course部分选择1:n,在Course to Student部分选择1:n,点击最下面的应用,再点击确定。
请添加图片描述
双击Relationship_2,在General选项卡中将Name改名,老师和课程之间的关系是上课,因此将Name修改为Teach。然后点击Cardinalities选项卡,在Teacher to Course部分选择1:n,在Course to Teacher部分选择1:n,点击最下面的应用,再点击确定。得到下面的效果:
在这里插入图片描述

4 检查CDM

点击最上方菜单栏的Tools选项,选择Check Model,打开检查模型的界面,根据自己的需求来选择检查的项目,在本例中选择全部检查,点击确定后,会打开Result List窗口,如果该窗口下什么都没有显示,代表模型并没有检查出错误,如果显示了信息,代表检查到了错误。
请添加图片描述

5 将CDM转换成PDM

点击最上方菜单栏的Tools选项,选择Generate Physical Data Model,则会弹出以下窗口,在DBMS一栏中选择自己使用的数据库,本例中使用的数据库是MySQL,因此选择MySQL 5.0,该版本可以兼容MySQL 8.0版本数据库,然后点击应用,点击确定。
在这里插入图片描述
这时会打开以下页面,在这个页面中,<pk>代表了主键<fk>代表了外键。
在这里插入图片描述
这时界面上会显示两个CDM,会产生冲突,所以需要将该页面的CDM改名为PDM。
请添加图片描述
这时需要再次将PDM保存,点击保存的按钮,选择合适的文件夹下进行保存。
在这里插入图片描述
保存之后,需要对Score表进行编辑。双击Score表,打开表格属性的对话框,在Columns选项卡中再增加一列成绩s_score。点击应用,点击确定。
在这里插入图片描述
修改之后,在页面上显示效果如下:
在这里插入图片描述

6 由PDM生成sql文件

切换到PDM页面,选择菜单栏中的Database(注:在CDM页面没有Database选项),点击Generate Database。
在这里插入图片描述
在弹出的对话框中,先修改sql文件存放的路径,然后修改sql文件的名字,点击应用,点击确定。
请添加图片描述
紧接着弹出以下窗口,点击Edit,可以查看生成的sql文件。生成了sql文件之后,就可以从数据库中将这个sql文件导入了。
在这里插入图片描述
生成的sql文件如下:

/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/* Created on:     2022/1/26 18:15:25                           */
/*==============================================================*/


drop table if exists Course;

drop table if exists Score;

drop table if exists Student;

drop table if exists Teach;

drop table if exists Teacher;

/*==============================================================*/
/* Table: Course                                                */
/*==============================================================*/
create table Course
(
   c_id                 varchar(10) not null,
   c_name               varchar(100),
   primary key (c_id)
);

/*==============================================================*/
/* Table: Score                                                 */
/*==============================================================*/
create table Score
(
   s_id                 varchar(20) not null,
   c_id                 varchar(10) not null,
   s_score              decimal(5,2),
   primary key (s_id, c_id)
);

/*==============================================================*/
/* Table: Student                                               */
/*==============================================================*/
create table Student
(
   s_id                 varchar(20) not null,
   s_name               varchar(50),
   s_gender             varchar(2),
   s_birthday           date,
   primary key (s_id)
);

/*==============================================================*/
/* Table: Teach                                                 */
/*==============================================================*/
create table Teach
(
   t_id                 varchar(20) not null,
   c_id                 varchar(10) not null,
   primary key (t_id, c_id)
);

/*==============================================================*/
/* Table: Teacher                                               */
/*==============================================================*/
create table Teacher
(
   t_id                 varchar(20) not null,
   t_name               varchar(50),
   primary key (t_id)
);

alter table Score add constraint FK_Score foreign key (s_id)
      references Student (s_id) on delete restrict on update restrict;

alter table Score add constraint FK_Score2 foreign key (c_id)
      references Course (c_id) on delete restrict on update restrict;

alter table Teach add constraint FK_Teach foreign key (t_id)
      references Teacher (t_id) on delete restrict on update restrict;

alter table Teach add constraint FK_Teach2 foreign key (c_id)
      references Course (c_id) on delete restrict on update restrict;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐