最近用PowerDesigner15做数据库设计的时候发现如果先做好了CDM图,然后生成PDM,再生成SQL 2005或SQL 2008脚本,发现始终无法生成外键约束。
我估计很多人都遇到了类似的问题。 经过查找和摸索终于解决了这个问题,现在将过程叙述如下,希望对大家有帮助。
实验过程如下:
1、生成在CDM中建立两个实体Entity_1和Entity_2,并建立关系Relationship。
2、自动生成MS SQL Server 2008的PDM。
3、选择DBMS类型为SQL 2008然后生成Database脚本
/*==============================================================*/
/* DBMS name: Microsoft SQL Server 2008 */
/* Created on: 2010/4/5 19:36:09 */
/*==============================================================*/
if exists (select 1
from sysobjects
where id = object_id('Entity_1')
and type = 'U')
drop table Entity_1
go
if exists (select 1
from sysindexes
where id = object_id('Entity_2')
and name = 'Relationship_1_FK'
and indid > 0
and indid < 255)
drop index Entity_2.Relationship_1_FK
go
if exists (select 1
from sysobjects
where id = object_id('Entity_2')
and type = 'U')
drop table Entity_2
go
/*==============================================================*/
/* Table: Entity_1 */
/*==============================================================*/
create table Entity_1 (
Attribute_1 int not null,
Attribute_2 int null,
constraint PK_ENTITY_1 primary key nonclustered (Attribute_1)
)
go
/*==============================================================*/
/* Table: Entity_2 */
/*==============================================================*/
create table Entity_2 (
Attribute_3 int not null,
Attribute_1 int null,
Attribute_4 int null,
constraint PK_ENTITY_2 primary key nonclustered (Attribute_3)
)
go
/*==============================================================*/
/* Index: Relationship_1_FK */
/*==============================================================*/
create index Relationship_1_FK on Entity_2 (
Attribute_1 ASC
)
go
从上面脚本可以看出没有生成需要的外键约束,只是生成了相关索引。
解决方法如下:
- 打开生成的PDM
- 将DBMS类型换为MS SQL 2000
- 在Model菜单中选择References命令,可以看到最后的Implementation被设置为Trigger
- 将Implementation被设置为Declarative(如果没有第二步就不能完成本步)
- 将DBMS类型换为MS SQL 2008
-
生成MS SQL 2008数据库生成脚本,能够正常生成需要的外键
/*==============================================================*/
/* DBMS name: Microsoft SQL Server 2008 */
/* Created on: 2010/4/5 19:49:25 */
/*==============================================================*/
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Entity_2') and o.name = 'FK_ENTITY_2_RELATIONS_ENTITY_1')
alter table Entity_2
drop constraint FK_ENTITY_2_RELATIONS_ENTITY_1
go
if exists (select 1
from sysobjects
where id = object_id('Entity_1')
and type = 'U')
drop table Entity_1
go
if exists (select 1
from sysindexes
where id = object_id('Entity_2')
and name = 'Relationship_1_FK'
and indid > 0
and indid < 255)
drop index Entity_2.Relationship_1_FK
go
if exists (select 1
from sysobjects
where id = object_id('Entity_2')
and type = 'U')
drop table Entity_2
go
/*==============================================================*/
/* Table: Entity_1 */
/*==============================================================*/
create table Entity_1 (
Attribute_1 int not null,
Attribute_2 int null,
constraint PK_ENTITY_1 primary key nonclustered (Attribute_1)
)
go
/*==============================================================*/
/* Table: Entity_2 */
/*==============================================================*/
create table Entity_2 (
Attribute_3 int not null,
Attribute_1 int null,
Attribute_4 int null,
constraint PK_ENTITY_2 primary key nonclustered (Attribute_3)
)
go
/*==============================================================*/
/* Index: Relationship_1_FK */
/*==============================================================*/
create index Relationship_1_FK on Entity_2 (
Attribute_1 ASC
)
go
alter table Entity_2
add constraint FK_ENTITY_2_RELATIONS_ENTITY_1 foreign key (Attribute_1)
references Entity_1 (Attribute_1)
go
(完)
分享到:
相关推荐
### PowerDesigner(CDM—PDM—SQL脚本的转换流程) #### 1. 概念数据模型(CDM) 概念数据模型(Conceptual Data Model, CDM)是一种高级别的数据建模方式,它从用户的角度出发,对现实世界的实体及其之间的联系进行...
在本篇中,我们将探讨如何使用PowerDesigner批量生成SQL脚本来将name属性转换为数据库中字段的comment。 首先,我们需要了解PowerDesigner中的PDM(Physical Data Model),这是一个物理数据模型,它包含了数据库的...
然而,逆向工程的缺点在于,生成的模型可能缺乏中文注释,外键关系也可能不完整,特别是当数据库中未明确定义外键约束时。因此,生成的模型可能需要手动调整和完善。 另一种方法是通过SQL脚本逆向工程生成PDM,这...
### PowerDesigner逆向工程生成PDM(物理数据模型)及中文列名表名转换为注释 #### 一、PowerDesigner及其逆向工程概述 PowerDesigner是一款强大的CASE工具,广泛应用于数据库设计、业务流程建模等领域。通过...
### PowerDesigner逆向工程从现有数据库生成PDM详解 #### 一、背景介绍 在数据建模领域,PowerDesigner是一款非常强大的工具,它能够帮助数据架构师和开发人员设计、构建以及维护高质量的数据模型。传统的数据建模...
PowerDesigner 生成 PDM 模型 PowerDesigner 是一款功能强大的数据建模和设计工具,能够生成高质量的数据模型,特别是在企业信息系统中扮演着重要角色。在本文中,我们将详细讲解如何使用 PowerDesigner 生成 PDM ...
标题中的"powerdesigner生成含注释的sql"指的是使用PowerDesigner这款强大的数据库设计工具来创建包含注释的SQL脚本。PowerDesigner是一款流行的数据建模工具,它可以帮助IT专业人员进行概念数据模型(CDM)、物理...
PowerDesigner是一款强大的数据建模工具,它能够帮助用户进行数据建模,包括概念数据模型(CDM)、物理数据模型(PDM)等,并能自动生成SQL脚本来创建数据库。以下步骤详细介绍了如何在PowerDesigner中生成SQL脚本。 **...
### PowerDesigner将PDM导出生成WORD文档的方法详解 #### 一、PowerDesigner简介与应用场景 PowerDesigner是一款功能强大的数据库设计工具,它可以帮助用户轻松地进行数据建模、概念设计和物理设计等任务。...
PowerDesigner是一款强大的数据库设计工具,它能够帮助数据库管理员和开发者进行数据建模、数据库设计以及生成SQL脚本等工作。在数据库开发过程中,PowerDesigner扮演着重要角色,它提供了概念数据模型(CDM)、物理...
PowerDesigner根据SQL语句自动生成ER图
在IT行业中,数据库设计是至关重要的一步,PowerDesigner是一款强大的数据库设计工具,它可以帮助开发者进行概念数据模型(CDM)、物理数据模型(PDM)的设计,并能生成相应的SQL脚本,便于在各种数据库系统中创建...
综上所述,PowerDesigner 15是一个功能强大的数据库建模工具,通过注册码激活后,用户可以充分利用其进行物理数据模型的设计、数据库脚本生成、逆向工程以及业务流程建模等一系列任务。在实际使用中,结合readme文件...
在使用PowerDesigner创建物理数据模型并生成至SQL Server 2005的过程中,可能遇到的常见问题包括但不限于: - 数据类型不匹配:需检查PowerDesigner中的数据类型是否与SQL Server 2005兼容。 - 外键约束冲突:确认...
PowerDesigner是一款强大的数据库设计工具,它提供了从概念数据模型(CDM)、逻辑数据模型(LDM)到物理数据模型(PDM)的转换,并能够正向工程生成SQL脚本,帮助开发者快速创建数据库结构。在数据库开发过程中,...
1. **PowerDesigner的PDM文件**:PDM文件是PowerDesigner保存物理数据模型的文件格式,其中包含了表、字段、键、索引、约束和数据库特定的信息。这些信息以XML的形式存储,对于人类阅读来说不够直观。 2. **自动...
在PowerDesigner里执行脚本命令,从Excel里读取表结构生成pdm文件。
powerdesigner的使用 sql语句 sql语句的使用
然而,在使用PowerDesigner生成SQL脚本的过程中,有时会遇到生成的SQL语句中包含不必要的引号问题,这可能会导致在某些数据库系统中执行SQL时出现错误或警告。本文将深入探讨如何在PowerDesigner中去除生成SQL中的...