如何使用PowerDesigner软件进行数据库设计(多对多关系)

2023-11-05

如何使用PowerDesigner软件进行数据库设计(多对多关系)

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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用PowerDesigner软件进行数据库设计(多对多关系) 的相关文章

  • MySQL中查找id最大的行

    看一下下面名为 Articles 的 MySQL 表 id articleId version title content 1 1 0 0 ArticleNo 1 title v0 0 ArticleNo 1 content v0 0 2
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • 在 MySQL 中进行全文搜索的最有效方法

    我有 3 个表 我想查询搜索词文本框 我的查询目前看起来像这样 SELECT Artist FROM Artist Band Instrument WHERE MATCH Artist name AGAINST mysearchterm O
  • mysql GROUP_CONCAT 重复项

    我从 farmTOanimal 表中进行连接 如下所示 有一个类似的farmTotool表 id FarmID animal 1 1 cat 2 1 dog 当我在视图中加入表时 我得到的结果如下所示 FarmID animal tool
  • 无法从我的 java 应用程序访问 mysql 数据库(在 AWS 实例上运行)

    我有一个在 AWS EC2 Ubuntu 实例上运行的 xampp 服务器 并且那里有一个名为 androiddb 的数据库 我可以通过在导航器中写入来访问数据库http public ip phpmyadmin http public i
  • MySQL查询,删除所有空格

    我有一个不寻常的查询 这让我现在陷入困境 表字段有 id bigint 20 name varchar 255 desc text 有许多记录具有相同的名称和 desc 但 desc 的单词之间有一些额外的空格 like 1 t1 hell
  • 删除、截断或删除以清理 MySQL 中的表

    我正在尝试清理表格 但没有摆脱表格的实际结构 我有一个id自动递增的列 我不需要保留ID号 但我确实需要它来保持其自动递增的特性 我发现了删除和截断 但我担心其中之一会完全删除整个表 从而使未来的插入命令变得无用 如何从表中删除所有记录以便
  • 'numpy.float64'对象没有属性'translate'在Python中将值插入Mysql

    import dataset db dataset connect table db 当我尝试向 Mysql 表中插入一些值时 发生了此错误 我插入表中的示例值 print Buy ticker price date OType OSize
  • 触发器与非规范化存储过程的优缺点

    当涉及到对事务数据库中的数据进行非规范化以提高性能时 至少 有三种不同的方法 通过存储过程推送更新 更新规范化交易数据和非规范化报告 分析数据 在事务表上实现更新辅助表的触发器 这几乎总是维护历史时所采取的路线 将处理推迟到夜间批处理 可能
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • 数据加密

    存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分 不过 我想要的是卡号的最终安全性 我们可以设置一种加密和解密机制 但我们自己无法解密任何给定的号码 我所追求的是一种即使在数据库级别也能保护这些信息的方法 这样任何人都无法进
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • Innodb页面大小设置

    在innodb中 页面大小默认为16kb 如何将页面大小设置为 8kb 是否有在源编译步骤中设置的选项 您不需要在源编译步骤中指定页面大小 MySQL 5 6 及更高版本支持不同的页面大小 无需重新编译 但是 您必须在初始化 InnoDB
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我
  • mod_rewrite, .htaccess 连接mysql数据库

    我希望 htaccess 文件中的 mod rewrite 链接到 mysql 数据库以向我提供映射信息 具体来说 我使用单个代码库来托管多个站点 因此 如果用户请求图像 例如 http www example com images car

随机推荐

  • 通知 服务器维护,服务器维护通知

    服务器维护通知 内容精选 换一换 本章节介绍如何创建告警规则 用户可自定义监控目标与通知策略 及时了解云手机服务器 云手机 磁盘以及GPU卡的状况 从而起到预警作用 登录管理控制台 在管理控制台左上角 选择待创建告警规则的区域 在服务列表页
  • 【转载】解读USB-IF电池充电规范

    最近学电源管理驱动这一步分 对于电池充电规范不太理解 转载下来自己看 http www eechina com thread 4943 1 1 html 电池充电规范 原有USB2 0规范并没有考虑到使用USB接口为便携式设备的电池进行充电
  • 最基本的根据文本信息生成二维码的源代码

    public class TwoDimensionCode 生成二维码 QRCode 图片 param content 存储内容 param imgPath 图片路径 public void encoderQRCode String con
  • 多元高斯分布(二)——更多关于多元高斯分布

    注意 本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目 https github com Kivy CN Stanford CS 229 CN 中部分的内容进行翻译学习 更多关于多元高斯分布 介绍 到目前为止的课堂上 多元高斯分布已
  • JAVAFX_Effect效果介绍

    JAVAFX Effect介绍 学习记录 慢慢完善 Bloom 发光效果 InnerShadow 内阴影 Lighting 光照 BoxBlur 方框模糊 DisplacementMap 位移置换 DropShadow 阴影 Perspec
  • 一个动态添加panel 和 删除panel的例子

    unit Unit1 interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls ExtCtrls t
  • python中.item()的讲解

    在pytorch训练时 一般用到 item 比如loss item 我们可以做个简单测试代码看看它的区别 import torch x torch randn 2 2 print x print x 1 1 print x 1 1 item
  • python倒序遍历字符串

    Hello大家好 今天我想和大家分享一个小tips 就是快速倒序遍历字符串 比如现在有一个小需求 是让我们找到一个长字符串里面的最后一个单词 并且返回这个单词的长度 每个单词用空格隔开 那么我们会如何去做这道题呢 我觉得使用倒序遍历 当如果
  • VS2017学习C++问题二(没有与这些操作数匹配的 “<<“ 运算符)

    添加要在此处预编译的标头 ifndef GZDEMO H define GZDEMO H pragma once include
  • 【javascript】2048小游戏

    目录 什么是2048 游戏状态机 游戏界面绘制 3 1 界面 3 2 数字的背景颜色 分数逻辑 4 1 加分 4 2 更新最高分 方向控制逻辑 5 1 数组 5 2 随机数 5 3 初始化 5 4 判断数组是否全部填满 5 5 判断方格是否
  • vue img video src动态设置

    图片存放位置 前端 img data中 url created中 created this select method中 async select var data res await this axios get select this
  • 手写Spring框架(二)

    目录 IOC相关类 BeanDefinitionReader BeanDefinition ApplicationContext BeanWrapper 简化后的DispatcherServlet 本章源码 https github com
  • nodejs require() of ES Module xxxxx not supported.

    某些 npm 库在 typescript 中使用时会存在这种情况 说一个解决方法 就是在 npm 官网中查看对应库的 version 看看是否有 cjs 版本 或者回退到上一个大版本
  • Java面试面经大合集(含答案),大厂越来越简单进了,

    Java面试笔记 尝到甜头的他开始得寸进尺 说5K的工资在北京根本生活不下去 没办法 我这人就是心软 在他一顿苦苦哀求后就答应再帮他想想办法 开会的时候灵光一闪想到了在阿里内部给他找两份大佬写的面试笔记 于是就有了最开始的一幕 被大佬逮到的
  • 前缀和实例4(和可被k整除的子数组)

    题目 给定一个整数数组 nums 和一个整数 k 返回其中元素之和可被 k 整除的 连续 非空 子数组 的数目 子数组 是数组的 连续 部分 示例 1 输入 nums 4 5 0 2 3 1 k 5 输出 7 解释 有 7 个子数组满足其元
  • 三个方法解决php并发问题

    福利 网络安全重磅福利 入门 进阶全套282G学习资源包免费分享 解决php并发问题的方法有很多 具体可以使用MySQL的行级锁 乐观锁和Redis的分布式锁等技术来解决 此外 还可以使用消息队列 多进程 多线程等技术来解决php并发问题
  • 人机交互-2-交互设计的原则与方法

    交互设计的原则与方法 交互设计中的问题 尽量减少用户需要记忆的部分 缺乏反馈 1 目标Goal vs 意图Intention 单个目标可对应多个意图 举例 删除文档中的部分内容的目标 意图1 通过编辑菜单删除 意图2 通过删除按钮删除 每个
  • CTF_Web_[GXYCTF2019]Ping Ping Ping

    一 题目 Ping Ping Ping 二 靶机信息链接 靶机信息 剩余时间 10072s http 70284b15 7c4e 4548 8b04 aadbc6e669f5 node4 buuoj cn 81 三 靶机链接页面 四 分析
  • Hector-SLAM初使用

    Hector SLAM初使用 首先把二维雷达的包拷贝到笔记本上 编译一次通过 连接也没有问题 rviz中可以看到原始激光 想演示一下二维激光雷达的SLAM建图 Hector SLAM相对比较容易 主要参考了下面的几篇博客 SLAM hect
  • 如何使用PowerDesigner软件进行数据库设计(多对多关系)

    如何使用PowerDesigner软件进行数据库设计 多对多关系 1 多对多关系示例 2 创建CDM 3 建立实体之间的联系 4 检查CDM 5 将CDM转换成PDM 6 由PDM生成sql文件 1 多对多关系示例 1 表名和字段 学生表