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. android使用POI读写word doc文件

    目录 1     读word doc文件 1.1     通过WordExtractor读文件 1.2     通过HWPFDocument读文件 2     写word doc文件 Apache p ...

  2. 【甘道夫】HBase基本数据操作详解【完整版,绝对精品】

    引言 之前详细写了一篇HBase过滤器的文章,今天把基础的表和数据相关操作补上. 本文档参考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 所有代码均基于“ ...

  3. 【教程】ubuntu下安装NFS服务器

    安装 NFS server mystery@lcw:~$ sudo apt-get install nfs-kernel-server  编辑/etc/exports,添加目标系统的根文件系统映射目录 ...

  4. 在进行vue的学习,项目中需要引入bootstrap、jquery的步骤。

    在进行vue的学习,项目中需要引入bootstrap.jquery的步骤. 一.引入jQuery 在当前项目的目录下(就是package.json),运行命令 cnpm install jquery ...

  5. shell数组应用

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  6. Redis面试题及分布式集群

    Reference: http://blog.csdn.net/yajlv/article/details/73467865 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似 ...

  7. Pyperclip – A cross-platform clipboard module for Python

    Usage is simple: import pyperclip pyperclip.copy('The text to be copied to the clipboard.') spam = p ...

  8. Cpu表现出正弦曲线

    #include <windows.h> #include <math.h> int main(void) { SetThreadAffinityMask(GetCurrent ...

  9. Android内存机制分析2——分析APP内存使用情况

    上面一篇文章说了Android应用运行在dalvik里面分配的堆和栈内存区别,以及程序中什么代码会在哪里运行.今天主要是讲解一下Android里面如何分析我们程序内存使用情况.以便后续可以分析我们程序 ...

  10. Thinkphp在Tpl中调用common.php中的公共函数

    Common/common.php //产生随机验证码 function random($length, $chars = '0123456789') { //随机生成的逻辑 return $hash ...