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. 【delphi】关键字详解

    absolute {它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同.} var Str: ]; StrLen: Byte absolute Str; {这个声明指定了变量StrLe ...

  2. PostgreSQL建表SQL语句写法

    DROP TABLE IF EXISTS bus; CREATE TABLE bus( id SERIAL PRIMARY KEY, mac ) NOT NULL UNIQUE, route int ...

  3. 在XSLT中输出内容带有CDATA的XML节点

    http://www.cnblogs.com/jaxu/archive/2013/03/13/2956904.html **************************************** ...

  4. C#对DataTable里数据筛选排序的方法

    在日常开发过程中,有一个DataTable集合,里面有很多字段,现在要求针对某一列进行排序,如果该列为数字的话,进行ASC即可实现,但是该字段类型为string,此时排序就有点不正确了 protect ...

  5. MATLAB 2016b 切换回英文版

    原因: 中文下不能使用等间距字体.因为等间距字体都是英文字体,报错信息又是中文的,所以这时候报错就全是乱码.如果改成中文字体,又不是等间距的了,看着瞎眼. 方法: Preferences->Ge ...

  6. 在Mac系统下用STS搭建一个Spring MVC项目

    [本文出自天外归云的博客园] 从STS的下载到空项目的搭建 1. 下载STS,下载解压缩后点击sts-bundle文件夹中的STS文件启动ide: 2. 创建Spring MVC项目:File-> ...

  7. 我为什么要学Go语言

    # 我为什么要学Go语言 ### 公司的强烈推荐---之前也了解过Go语言并没有觉得有什么了不起,Go能做的其他语言都能做. ### 网上查找学习Go语言的理由---网上大体有两类人,一类说Go是大公 ...

  8. [转] 怎么减少编程中的 bug?

    [转]http://macshuo.com/?p=1361 怎么减少编程中的 bug? Posted on 2016 年 2 月 17 日 为什么要编程?因为代码没在那里.创造一个世界是如此让人着迷, ...

  9. Moving Swiftly(从OC切换到Swift)

    Moving Swiftlyhtml, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0 ...

  10. ActiveMQ实战篇之ActiveMQ实现request/reply模型(二)

    ActiveMQ实战篇之ActiveMQ实现request/reply模型(二)