PD(CDM/PDM/SQL的转换流程)

在开发的过程中会经常遇到 做一个模块功能,首先让你根据需要先画一个 E-R 图出来,很多的朋友对 E-R 图 都不是很熟悉,或者说有的朋友在开发的项目过程中,根本就没有用到 E-R 图 , 因为对于有些对 E-R 图不是很熟悉的朋友感觉画 E-R 图无从下手:

我个人根据一些资料整理了一下关于 E-R 图的 描述 及用法 示例:希望对,对 E-R 图并不是很熟悉的朋友有所帮助吧 ….

概念数据模型也称信息模型,它以实体-联系 (Entity-RelationShip, 简称 E-R) 理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界。换句话说,就是先将现实世界中的客观对象抽象为实体 (Entity) 和联系(Relationship), 它并不依赖于具体的计算机系统或某个 DBMS 系统,这种模型就是我们所说的 CDM; 然后再将CDM 转换为计算机上某个 DBMS 所支持的数据模型,这样的模型就是物理数据模型 , 即 PDM, 详细的关于 E-R 图理论方面的描述,还请了解一些相关资料

 

以下是我个人对 E-R 图 的一个简单的用法整理 ,如有不同意见,请提出 ….

 

(1). 打开 PowerDesigner file — new model 弹出如下窗口

 

 

(2). 添加实体类:如下图   

<1>. 在 CDM 的图形窗口中,单击工具选项版上的 Entity 工具,再单击图形窗口的空白处,在单击的位置就出现一个实体符号。点击 Pointer 工具或右击鼠标 ,释放 Entitiy 工具。如图所示 
   

<2>. 双击刚创建的实体符号,打开下列图标窗口,在此窗口 “General” 标签中可以输入实体的名称、代码、描述等信息。

添加实体属性

1)  在上述窗口的 “Attribute” 选项标签上可以添加属性,如下图所示。

自增型 Serial

字符型 Variable multibyte

创建domain。 domain是什么东西呢,应该翻译成“域”吧,但实际是一种自定义类型。把常用到的数据类型定义成domain,所有的属性指定其domain,而不直接指定数据类型,会给以后的工作带来很大的方便。Data items下创建

2)添加 Entity 如下图 : 

实体属性为 :   

关于实体属于的具体配置信息,请查看关于这方面的入门资料,在这里我就不详细的说明了 ..

建立联系

联系( Relationship )是指实体集这间或实体集内部实例之间的连接。

 

实体之间可以通过联系来相互关联。与实体和实体集对应,联系也可以分为联系和联系集,联系集是实体集之间的联系,联系是实体之间的联系,联系是具有方向性的。联系和联系集在含义明确的情况之下均可称为联系。

 

按照实体类型中实例之间的数量对应关系,通常可将联系分为 4 类,即一对一( ONE TO ONE )联系、一对多(ONE TO MANY )联系、多对一( MANY TO ONE )联系和多对多联系( MANY TO MANY )。

 

在 CDM 工具选项板中除了公共的工具外,还包括如下图所示的其它对象产生工具。 

在图形窗口中创建两个实体后,单击 “ 实体间建立联系 ” 工具,单击一个实体,在按下鼠标左键的同时把光标拖至别一个实体上并释放鼠标左键,这样就在两个实体间创建了联系,右键单击图形窗口,释放 Relationship 工具。如下图所示

建立关系图标 

 

 

 在两个实体间建立了联系后,双击联系线,打开联系特性窗口,如图所示。 

 

  “ 员工 ” 与 “ 联系方式 ” 两个实体之间的联系是一对多联系,换句话说 “ 联系方式 ” 和 “ 员工 ” 之间的联系是多对一联

系。而且一个联系方式必须属于一个员工,并且只能属于一个员工,不能属于零个员工,所以从 “ 联系方式 ” 实体至 “ 员工 ” 实体的基数为 “1,1” ,从联系的另一方向考虑,一个员工可以拥有多个联系方式,也可以没有任何联系方式,即零个联系方式,所以该方向联系的基数就为 “0,n”, 如图所示 

到此 :CMD 已经建成 ;

 

下面说明如何生成 :PDM   点击 : Tools --> Generate Physical Data Model 如下图 : 

或者 : 按 Ctrl+G  键 弹出下图窗口 :

 

生成如下图 PDM 

 

联系方式表 :Fk 外键关系是由于 建立关系以后,自动生成的

 

生成 sql 脚本 :Ctrl +G 键 ,如果是生成MySQL脚本,options->foreign key ->create  foreign key设为inside  

总结 :CDM   --> Ctrl+G = PDM   --> Ctrl+G = SQL 脚本

如果要生成 OOM --> 点击工具-->Generage Object-Oriented Model

 

PowerDesigner生成数据库时取消域的生成

在PDM界面,选择菜单“database”—“generate database...”—“options”,在“all objects”中将Column的user data type勾选去掉:

时间: 2024-10-28 19:01:06

PD(CDM/PDM/SQL的转换流程)的相关文章

sql语句转换成hql求大神解决

问题描述 sql语句转换成hql求大神解决 具体sql语句如下,变成hql语句,请高手知道一下.select * from plan_run r where r.id in(select t.plan_run_waishi_user_id from PLAN_RUN_OA_USER t where t.oa_user_id= ?) 解决方案 from 实体类1 p where p.id in ( select i.id from 实体类2 i where i.useId = ? )注意hql里面

mysql的查询sql语句转换成oracle的sql

问题描述 mysql的查询sql语句转换成oracle的sql SELECT CREATE_DATE SUM(ISBIND) AS ISBIND SUM(UNBIND) AS UNBIND SUM(SUBSCRIBE) AS SUBSCRIBE SUM(UNSUBSCRIBE) AS UNSUBSCRIBE FROM ( SELECT N.CREATE_DATE MAX( CASE N.EVENT WHEN 'subscribe' THEN COUNT ELSE 0 END ) SUBSCRIB

关于SQL语句转换成linq语句

问题描述 关于SQL语句转换成linq语句 SELECT * FROM dbo.[USER] u, (SELECT ua.User_Attention_Object_Id FROM dbo.User_Attention ua,dbo.[USER] u WHERE u.User_Id=ua.User_Attention_User_Id AND ua.User_Attention_User_Id=3) uaid WHERE u.User_Id=uaid.User_Attention_Object_I

系统-sql server转换成access数据库

问题描述 sql server转换成access数据库 如果我有一个系统是java语言和sql server数据库,想转换成access数据库,怎么办 解决方案 把sqlserver数据库转成sql,在access里执行是一种办法,也可以参考这个 尝试将sqlserver 中数据导入到access中http://77857.blog.51cto.com/67857/161106/ 解决方案二: 1.换数据库挺麻烦的,先要转数据库结构,然后还要导数据. 2.原先的java连sql server要改

hibernate-原始sql语句转换成jpql语句

问题描述 原始sql语句转换成jpql语句 如题,现在有一个sql语句: SELECT c.* FROM fs_gulib a, fs_star c,(SELECT t2.id,COUNT(*) FROM fs_gulib_member t1 LEFT JOIN fs_gulib t2 ON t1.gulib = t2.id GROUP BY t1.gulib ORDER BY COUNT(*) DESC) n WHERE a.id=c.gulib_id AND a.id=n.id; 如何转成j

把多表联查的sql语句转换成linq语句

问题描述 把多表联查的sql语句转换成linq语句 SELECT * FROM [group_product] where proid in(select proid from [group_browsehistory] where memid in(select memid from [group_browsehistory] where proid=12)) 在线等,这个sql语句怎么转换成linq??? 解决方案 from x in group_product where group_br

sql-求一个SQL行列转换的解决方案

问题描述 求一个SQL行列转换的解决方案 表存储结构如下定义 姓名 ----------科目 ----------分数 ----------预期分数 张三 ----------语文 ------------74 -------------------90 张三 ----------数学 ------------83 -------------------60 张三 ----------物理 ------------93 -------------------78 李四 ----------语文

如何将下面的sql语句转换成Linq形式

问题描述 想把下面的sql语句转换成LINQ形式具体的sql语句如下:select*from(select字段,row_number()over(排序方式)asrownumfrom表名where条件)asbwhereb.rownum>起始值andb.rownum<=结束值orderby排序方式其中所有的汉字均是通过变量进行传值的不知道这个怎么转换成LINQ形式大侠们给帮帮忙写写吧! 解决方案 解决方案二:varq=(fromaindb.table1where...orderby字段descen

一个简单的SQL 行列转换语句_MsSql

一个简单的SQL 行列转换 Author: eaglet 在数据库开发中经常会遇到行列转换的问题,比如下面的问题,部门,员工和员工类型三张表,我们要统计类似这样的列表 部门编号 部门名称 合计 正式员工 临时员工 辞退员工 1 A 30 20 10 1 这种问题咋一看摸不着头绪,不过把思路理顺后再看,本质就是一个行列转换的问题.下面我结合这个简单的例子来实现行列转换. 下面3张表 复制代码 代码如下: if exists ( select * from sysobjects where id =