9. PD逆向工程--由数据库转为模型(ER图)

步骤:

1、 在控制面板-->管理工具(如果没找到管理工具,查看方式改为大图标)-->数据源(ODBC)-->用户DSN -->用户数据源下添加一个数据源(这里根据情况添加数据源)

图中orcle就是添加的数据源,这里因为我的数据库所在数据源是orcle的.

2、  打开PowerDesigner新建PDM模型如图:

3、  选择Database下的Connect,DataSource选择ODBCmachine data source,下面选择我们第一部建立的数据源sql2008,

然后在login输入登录数据库的用户名和密码:

4、修改模型数据导入语句,选择General->Microsoft SQL Server 2005->Script->Objects->Table->SqlListQuery

其实就是编辑导入数据模型和数据库对表对应关系,原来的是设置不能导入表描述所以做了如下修改:

系统默认代码:

{OWNER,TABLE, TABLE_TYPE, COMMENT}

select
u.name,
o.name,
case (o.type) when ‘S‘ then ‘SYSTEM TABLE‘else ‘TABLE‘ end,
(select convert(varchar(8000), value) from::fn_listextendedproperty(NULL, ‘user‘, u.name, ‘table‘, o.name, null, null)where name = ‘MS_Description‘) as coln
from
[%CATALOG%.]sys.sysobjects o
join [%CATALOG%.]sys.schemas u on (u.schema_id = o.uid)
where
o.type in (‘U‘, ‘S‘)
[and u.name = %.q:OWNER%]
order by 1, 2

修改后的代码:

{OWNER,TABLE, TABLE_TYPE, COMMENT,TNAME}

select
u.name,
o.name,
case (o.type) when ‘S‘ then ‘SYSTEM TABLE‘else ‘TABLE‘ end,
(convert(varchar(8000),isnull(f.value,o.name)),
convert(varchar(8000),isnull(f.value,o.name))
from
[%CATALOG%.]sys.sysobjects o
join [%CATALOG%.]sys.schemas u on (u.schema_id = o.uid)
left join [%CATALOG%.]sys.extended_propertiesf on
f.major_id=o.id and f.minor_id=0 andf.class=1
where
o.type in (‘U‘, ‘S‘)
[and u.name = %.q:OWNER%]
order by 1, 2

5、修改模型字段导入语句,选择General->ORACLE10g->Script->Objects ->Column->SqlListQuery

其实就是编辑导入数据模型和数据库字段对应关系,原来的是设置不能导入字段描述所以做了如下修改:

系统默认代码:

{OWNER,TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY,DOMAIN, DEFAULT, ExtIdentitySeedInc, COMMENT, ExtCollation,ExtIdtNotForReplication, ExtDeftConstName, ExtRowGuidCol}

select
u.name,
o.name,
c.column_id,
c.name,
case when c.system_type_id in (165, 167,231) and c.max_length = -1 then t.name + ‘(Max)‘ else t.name end,
c.precision,
case (c.max_length) when -1 then 0 elsecase when c.system_type_id in (99, 231, 239) then (c.max_length/2) else(c.max_length) end end as colnA,
c.scale,
case(c.is_computed) when 1 thenconvert(varchar(8000), (select z.definition from[%CATALOG%.]sys.computed_columns z where z.object_id = c.object_id andz.column_id = c.column_id)) else ‘‘ end as colnB,
case(c.is_nullable) when 1 then ‘NULL‘ else‘NOTNULL‘ end,
case(c.is_identity) when 1 then ‘identity‘else ‘‘ end,
case when(c.user_type_id <>c.system_type_id) then (select d.name from [%CATALOG%.]sys.types d whered.user_type_id = c.user_type_id) else ‘‘ end as colnC,
convert(varchar(8000), d.definition),
case (c.is_identity) when 1 thenconvert(varchar, i.seed_value) + ‘, ‘ + convert(varchar, i.increment_value)else ‘‘ end as colnD,
(select convert(varchar(8000), value) from::fn_listextendedproperty(NULL, ‘user‘, u.name, ‘table‘, o.name, ‘column‘,c.name) where name = ‘MS_Description‘) as colnE,
c.collation_name,
case (i.is_not_for_replication) when 1 then‘true‘ else ‘false‘ end,
d.name,
case(c.is_rowguidcol) when 1 then ‘true‘else ‘false‘ end
from
[%CATALOG%.]sys.columns c
join [%CATALOG%.]sys.objects o on(o.object_id = c.object_id)
join [%CATALOG%.]sys.schemas u on(u.schema_id = o.schema_id)
join [%CATALOG%.]sys.types t on (t.user_type_id = c.system_type_id)
left outer join[%CATALOG%.]sys.identity_columns i on (i.object_id = c.object_id andi.column_id = c.column_id)
left outer join[%CATALOG%.]sys.default_constraints d on (d.object_id = c.default_object_id)
where
o.type in (‘U‘, ‘S‘, ‘V‘)
[and u.name = %.q:OWNER%]
[and o.name=%.q:TABLE%]
order by 1, 2, 3

修改后代码:

{OWNER,TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY,DOMAIN, DEFAULT, ExtIdentitySeedInc, COMMENT,COLNNAME, ExtCollation,ExtIdtNotForReplication, ExtDeftConstName, ExtRowGuidCol}

select
u.name,
o.name,
c.column_id,
c.name,
case when c.system_type_id in (165, 167,231) and c.max_length = -1 then t.name + ‘(Max)‘ else t.name end,
c.precision,
case (c.max_length) when -1 then 0 elsecase when c.system_type_id in (99, 231, 239) then (c.max_length/2) else(c.max_length) end end as colnA,
c.scale,
case(c.is_computed) when 1 thenconvert(varchar(8000), (select z.definition from[%CATALOG%.]sys.computed_columns z where z.object_id = c.object_id andz.column_id = c.column_id)) else ‘‘ end as colnB,
case(c.is_nullable) when 1 then ‘NULL‘ else‘NOTNULL‘ end,
case(c.is_identity) when 1 then ‘identity‘else ‘‘ end,
case when(c.user_type_id <>c.system_type_id) then (select d.name from [%CATALOG%.]sys.types d whered.user_type_id = c.user_type_id) else ‘‘ end as colnC,
convert(varchar(8000), d.definition),
case (c.is_identity) when 1 thenconvert(varchar, i.seed_value) + ‘, ‘ + convert(varchar, i.increment_value)else ‘‘ end as colnD,
(select convert(varchar(8000), value) from[%CATALOG%.]sys.extended_properties as ex where ex.major_id = c.object_id andex.minor_id = c.column_id),
(select convert(varchar(8000), value) from[%CATALOG%.]sys.extended_properties as ex where ex.major_id = c.object_id andex.minor_id = c.column_id),
c.collation_name,
case (i.is_not_for_replication) when 1 then‘true‘ else ‘false‘ end,
d.name,
case(c.is_rowguidcol) when 1 then ‘true‘else ‘false‘ end
from
[%CATALOG%.]sys.columns c
join [%CATALOG%.]sys.objects o on(o.object_id = c.object_id)
join [%CATALOG%.]sys.schemas u on(u.schema_id = o.schema_id)
join [%CATALOG%.]sys.types t on (t.user_type_id = c.system_type_id)
left outer join[%CATALOG%.]sys.identity_columns i on (i.object_id = c.object_id andi.column_id = c.column_id)
left outer join[%CATALOG%.]sys.default_constraints d on (d.object_id = c.default_object_id)
where
o.type in (‘U‘, ‘S‘, ‘V‘)
[and u.name = %.q:OWNER%]
[and o.name=%.q:TABLE%]
order by 1, 2, 3

6、前面都是准备工作,现在开始生成模型吧:

a) 选择菜单Database->ReverseEngineer Database(ctrl+r):

b) 弹出的窗口中,选择选项卡Selection(默认就是这个窗口),选择Using a data source

c) 然后点击确定,在弹出窗口选择需要导入数据库以及选择需要导入的表模型(这里可以不完全导入)

d)最后点击确认就生成了

时间: 2024-08-30 10:27:56

9. PD逆向工程--由数据库转为模型(ER图)的相关文章

数据库设计规范、E-R图、模型图

(1)数据库设计的优劣: 糟糕的数据库设计: ①数据冗余冗余.存储空间浪费. ②数据更新和插入异常. ③程序性能差. 良好的数据库设计 ①节省数据的存储空间. ②能够保证数据的完整新. ③方便进行数据应用系统的开发. (2)软件项目开发周期中的数据库设计: 一个完整的项目 开发需要经过: 1.需求分析:分析客户的业务和数据处理需求. 2.概要设计:设计数据库的E-R模型图,确认需求信息的正确和完整. 详细设计:应用三大范式审核数据库结构,将E-R模型图转换为数据库模型图. 代码编写:物理实现数据

用PowerDesigner对现有的数据库反向工程建立E-R图

由于早期的一个项目在数据库设计建立时没有输出为E-R图,偶在对此项目进行二次改造升级时则使用了PD对原有的数据库进行反向工程,即根据数据源将数据库的的所有表生成为E-R图结构,我使用的是PD 15,反向工程的命令为于"File"菜单中的"Reverse Engineer"-反向引擎.其它的版本的PD应该在"Database"菜单中.详细步骤如下: 1.启动PD,新建一个Physical Diagram 2.菜单:Database->Cong

数据库范式以及ER图

数据库范式包括第一.第二.第三以及BCNF范式,关于范式的探讨,博主在知乎上看见了一篇很不错的文章,分享文中,这边就不再做阐述.地址:https://www.zhihu.com/question/24696366 在这边列出一些数据库的定义: 1.关系模型:用二维表格结构表示实体集,外键表示实体间联系的数据模型称为关系模型.关系模型是由若干个关系模式组成的集合.2.关系模式:关系模式实际上就是记录类型.它包括:模式名,属性名,值域名以及模式的主键.关系模式仅是对数据特性的描述.3.关系实例:就是

数据库系统(四)---关系型数据库设计及E-R图

1.关系型数据库: 关系型数据库是一类采用关系模型作为逻辑数据模型的数据库系统,遵从数据库设计的基本步骤,包括:需求分析.概念结构设计.逻辑结构设计.物理结构设计.数据库实施.数据库的运行和维护等阶段. 概念结构设计与逻辑结构设计是关系数据库整个设计过程的关键. 2.关系数据库设计过程与各级模式 在关系数据库设计的不同阶段,会形成数据库的各级模式.   1)需求分析阶段,综合各个用户的应用需求:   2)概念结构设计阶段,形成独立于机器特点.独立于各个关系数据库管理系统产品的概念模式:   3)

数据库的设计(E-R图,数据库模型图,三大范式)

一.数据库设计的概念 数据库设计是将数据库中的数据实体及这些数据实体之间的关系,进行规划和结构化的过程. 二.数据库设计的重要性 如果一个数据库没有进行一个良好的设计,那么这个数据库完成之后他的缺点是: 1.效率会很低 2更新和检索数据时会出现很多问题, 反之,一个数据库被尽心策划了一番,具有良好的设计,那他的优点是: 1.效率会很高. 2.便于进一步扩展. 3.使得应用程序的开发变得更容易. 三.设计数据库的步骤 1.需求分析阶段:分析客户的业务和数据处理需求. 2.概要设计阶段:他主要就是绘

Powerdesigner数据库建模--概念模型--ER图

目标: 本文主要介绍PowerDesigner中概念数据模型 CDM的基本概念. 一.概念数据模型概述 数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求: 1)能够比较真实地模拟现实世界 2)容易为人所理解 3)便于计算机实现 概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充.它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计. 通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器

如何得到数据库表的E-R图

使用navicat 原文地址:https://www.cnblogs.com/xiang--liu/p/12227889.html

在EA中用ER图生成数据库

ER图 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 实体就是看的见摸得着或者能被人感知接受认可的客观存在,属性就是用来描述这个实体,联系自然是实体间的联系,只有相互联系才会完成一个系统的功能,直接上图: 此外还可以ER图可以在EA中进行绘制来帮助我们理清关系,并生成sql脚本来建立数据库就省了不少的时间,提高了效率 绘制ER图 在EA中除了能画UML图还有很强大的功能,一般软工中用到的图这

Visio2010建立ER图并直接导出为SQL语句

Visio2010建立ER图并直接导出为SQL语句 2013年08月20日 ⁄ 综合 ⁄ 共 2581字 ⁄ 字号 小 中 大 ⁄ 评论关闭 建立数据库时我们需要考虑数据之间的关系,为了理清数据之间的关系我们需要对数据进行统一的整理.对于较复杂的数据库我们需要建立数据库模型,具体可分为两步:首先对数据库进行结构分析并使用树.表等描述数据,然后分析数据库的操作方法,规定数据库的增删改查操作,这两个步骤就构成了我们通常所说的数据库模型. 数据库模型有多重分类,通常所说的ER图是图模型,除此之外还有层