CDM是概念模型,在概念模型上没有具体数据库产品的概念,反映的是实体和联系。PDM是物理模型,是依赖具体数据库产品的模型,比如可以指定具体的数据类型和约束等等。在PowerDesigner中两个模型之间可以相互转化。

步骤一般当然是先cdm后pdm,建好cdm后,根据实际情况,选择不同的数据库,然后把cdm转成相应的pdm,有了cdm会更加灵活,不必在需求分析一开始就定死用什么数据库,便于更改,转pdm很容易。

 物理数据模型(PDM): 你可以把这个看中是实际数据库中的表结构,例如 你的CDM中有 多对多的关系的话,那么就会在 PDM中,实际生成中间表

 

1:运行  PowerDesigner15_Evaluation.exe

默认

 

2: 安装完毕后,不要执行,下面我们进行 破解

把 PowerDesigner15汉化+注册补丁  下的所有文件,覆盖 PD的安装目录下的文件

然后我们打开 PD,点击 帮助 –> About  看到下面窗口中红色方框,就表示已经破解 + 汉化成功

 

================     PDM  挖坑开始   这里有个坑,建议直接跳过,从下面的  CDM 设计开始看=========

下面我们来简单的创建几个表,涉及  1对多,多对多(自己写中间表),多对多(PD帮我们生成中间表)

我们创建几个表

Userinfo  用户表 

Order 订单表

Department 部门表

Play 活动表

 

设置主键,自动增长  (双击列,打开列设置窗口,勾选右下角的 Identity 自动增长)

分析用户表 和 订单表的 关系   是一对多

 

 

下面,我们来看  用户表 和  部门表  他们是一个多对多的关系,我们通过手动创建的中间表来 设计这个 中间表

(一个员工,可以在多个部门,一个部门,也可以有 多个员工)

注意,下面的这个中间表,是我们自己手动创建的

上面一个用户和一个部门之间,是多对多的关系,但是上面是我们自己创建一个中间表,下面我们自己来创建一个 真正的 多对多的 表(实际还是会自动创建一个中间表)

到这里,我突然发现我用错了, 应该是先设计 CDM ,在 CDM 里面才可以设计  多对多表,而 如果是在 PDM 里面,是不能生成 多对多表的

因为PDM是物理模型,那么PDM中反应的表,就应该是 CDM

======================   PDM  挖坑结束  ======================

 

=========================  重新用  CDM   开始  =============================

在 CDM  模型里面,拉一对多关系,是从 一  拉 到 多,就形成了下面的这个图.  并且这里有点和 PDM不同的是,在CDM里面拉的关系线,是看不到外键的,外键要等一会 转成了 PDM  模型之后,才会看到外键

 

下面我们把  用户表,部门表,以及手动创建的中间表(用户部门关系表)  这3个表,来拉一下关系

首先  用户表  和  用户部门   是 一对多的关系,一个用户,可以属于多个部门

部门表  和  用户部门关系表   也是一对多的关系,一个部门里面,可以用多个用户

实际上,2个一对多,就是一个多对多,我们原本可以省掉 用户部门关系表而直接在 用户表 和 部门表 直接拉一个 多对多的关系,但是假如想在中间表里面加入其他额外的字段,例如 这里是  JoinTime 加入部门时间,就是我们自己想额外创建的字段,那么这个时候,就应该自己手动来创建中间表了

下面我们来创建,活动表和部门表是多对多的关系 (一个活动,可以属于多个部门,一个部门也有多个活动)

在CDM里面画 多对多的线的时候,要注意,PD里面,默认是没有  多对多 的线的,得先把2张表之间 拉出 一对多, 然后双击 两个表中间的关系线, 再修改成 多对多

好了,我们的CDM 模型,就画好了

我们双击 部门表 和 活动表 中间的 关系的名称,我们把这个名称  Relationshop_4 给修改成   R_Department_Play ,这个名称,就是等会我们生成的 数据库里面的中间表的名称 ,如果你不修改,那么等会数据库就会生成一个 Relationshop_4 ,这个名称 太傻了

 

(如果2张表,是多对多的关系,那么什么时候,用我们自己创建的中间表,什么时候,用系统的多对多表呢?   其实很简单,如果 你需要在中间表里面放一些额外的数据,例如上面的  加入时间(JoinTime) 这个就是个额外的字段,那么我们就用自己创建的中间表.   如果什么额外的字段都没有,就可以直接用 系统的多对多 (但是实际到了PDM物理模型,和到数据库的时候,还是会生成一个中间表的)

现在我们要生成数据库的话,还要先 转成 PDM 模型  ,我们可以点击 工具=> Generate PDM  生成PDM模型,也可以使用快捷键  Ctrl + G

 

点击确定后,我们会跳转到 PDM 界面,这个  物理模型界面,就是实际上,我们通过  CDM  最后会生成的哪些表

这个时候,我们 选择 数据库 => Generate Database 来生成数据库, 快捷键依然是 Ctrl + G

然后我们把生成的sql文件,拖到sql2008的管理器里面,我们自己先创建一个数据库  例如 WebPd

我们发现,表结构,定义,都可以了

但是我们发现还是有个小问题,我们观察在PDM中的时候,  R_Deparment_Play 这张中间表的  DepId 和 PlayId 不仅仅是有PK主键,同时他们还是外键,但是到了sql2008里面之后,外键信息丢失了,如下图,解决方法是我们要回到 PD 里面,对PD这个软件进行设置

 

解决方法,

步骤1: 在刚才的PDM 界面下(注意,是PDM),点击 菜单栏的 数据库=> Change Current DBMS 设置为 sql2000

步骤2: 在菜单栏里面 找到 模型=>References

在打开的窗口中,我们找到 Implementation 这列,  默认这里的数据是 Trigger  ,我们修改成   Declarative

 

步骤3 : 将当前PDM的 DBMS  重新设置为 sql2008

 

步骤4:  在PDM 界面下,  按  Ctrl + G 快捷键,生成sql脚本 ,然后放到 sql2008 数据库管理器中运行后,如下

 

 

CDM和PDM的区别?(转)http://hi.baidu.com/t_sky/item/adaded4f5a6b11ea1e19bcd6

PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本) , CDM 和 PDM 的区别;PD15.1 生成sql2008 无FK外键约束的解决方法的更多相关文章

  1. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

  2. SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份

    SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...

  3. JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

    JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...

  4. Hibernate框架学习(六)——一对多&多对一关系

    一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 一对多:(在Customer.hbm.xml中添加) 多对一:(在LinkMan.hbm.xml中添加) 最后别忘了在hibe ...

  5. SQLAlchemy_定义(一对一/一对多/多对多)关系

    目录 Basic Relationship Patterns One To Many One To One Many To Many Basic Relationship Patterns 基本关系模 ...

  6. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...

  7. hibernate中一对多多对一关系设计的理解

    1.单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时如果只需要获取对应部门信息(user.getdept ...

  8. 关于在安装MySQL时报错"本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止"的解决方法

    首先将你下载的MySQL安装或者解压(对应安装版和解压版),下载地址http://dev.mysql.com/downloads/mysql/ 然后复制你安装目录中的my-default.ini,更改 ...

  9. PD生成SQL脚本附带注释命令

    '------------------------------------------------------------''脚本功能:' PowerDesigner中批量根据对象的name生成com ...

随机推荐

  1. 【MySQL】MySQL层级数据的递归遍历

    层级的业务数据在系统中很常见,如组织机构.商品品类等. 如果要获取层级数据的全路径,除了缓存起来,就是递归访问的方式了: 将层级数据缓存在redis中,用redis递归获取层级结构.此方法效率高. 在 ...

  2. XCode 7 运行 cocos2dx 2.2.6问题小节

    终于磕磕绊绊的在模拟器上,成功运行了已有项目. 公司提供的Mac系统,版本炒鸡低.向同事拷贝了OS,和XCode. 安装完成后,将已有的可以在Windows上成功运行Android版本的项目,拷贝到了 ...

  3. 10款jQuery图片左右滚动插件

    在现代的网页设计中,图片和内容滑块是一种极为常见和重要的元素.你可以从头开始编写自己的滑动效果,但是这将浪费很多时间,因为网络上已经有众多的优秀的 jQuery 滑块插件.当然,如果要从大量的 jQu ...

  4. LeetCode: N-Queens II 解题报告

    N-Queens II (LEVEL 4 难度级别,最高级5) Follow up for N-Queens problem.

  5. 【转载】关于Java String, StringBuilder, StringBuffer, Hashtable, HashMap的面试题

    REF: http://blog.csdn.net/fightforyourdream/article/details/15333405 题目是一道简单的小程序,像下面这样:[java] view p ...

  6. ZooKeeper管理分布式环境中的数据

    Reference: http://www.cnblogs.com/wuxl360/p/5817549.html 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  7. 01-老马jQuery教程-jQuery入口函数及选择器

    前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟.视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html ...

  8. 使用 Trace 将日志输入到文件中

    工具没有好坏,只有适不适用.由于项目中用 Log4Net 过重,所以使用 Trace 代替了 Log4Net 输入一些简单的日志信息: 自定义监听文件 using System; using Syst ...

  9. WebAPI Action的几种返回值类型

    void 返回204状态码 HttpResponseMessage Convert directly to an HTTP response message. IHttpActionResult Ca ...

  10. spark streaming从指定offset处消费Kafka数据

    spark streaming从指定offset处消费Kafka数据 -- : 770人阅读 评论() 收藏 举报 分类: spark() 原文地址:http://blog.csdn.net/high ...