咱们常常用PowerDesigner来进行数据库表结构的设计,而且设计出来的表比较直观的看出之间的相互关系,方便理解;但其自动生成的脚本并不必定符合咱们实际需求,因此须要通过必定配置后才能真正达到要求,下面用一个简单的案例来学习如何配置PD。sql
需求:数据库
这里假设数据库代码版本维护是经过sql脚本文件来管理的,构造可重复执行的建立表、添加字段、索引等ide
用PowerDesigner生成符合本身实际需求的脚本,要求以下学习
1.建表语句可重复执行测试
2.表名要有中文注释spa
3.在PD里外键关联不体如今生成脚本里设计
4.主键、外键等能够自定义命名code
测试表:orm
学生表(Student)和班级表(Classes)blog
PD设计以下:
自动生成脚本:
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('School_Student') and o.name = 'FK_SCHOOL_S_REFERENCE_SCHOOL_C') alter table School_Student drop constraint FK_SCHOOL_S_REFERENCE_SCHOOL_C go if exists (select 1 from sysobjects where id = object_id('School_Classes') and type = 'U') drop table School_Classes go if exists (select 1 from sysobjects where id = object_id('School_Student') and type = 'U') drop table School_Student go /*==============================================================*/ /* Table: School_Classes */ /*==============================================================*/ create table School_Classes ( ID int not null, Name nvarchar(20) null, CreateTime datetime null default getdate(), constraint PK_SCHOOL_CLASSES primary key (ID) ) go /*==============================================================*/ /* Table: School_Student */ /*==============================================================*/ create table School_Student ( ID int not null, Name nvarchar(20) null, ClassID int null default 0, Age tinyint null default 0, StuNo nvarchar(10) null, Remark nvarchar(500) null, constraint PK_SCHOOL_STUDENT primary key (ID) ) go alter table School_Student add constraint FK_SCHOOL_S_REFERENCE_SCHOOL_C foreign key (ClassID) references School_Classes (ID) go
从上面脚本能够看出
第一每次表存在都会先drop而后在create,在自动升级脚本里容易造删除真实表;
第二图上班级编号是外键,但这里假设只是为了方便查看关系,真实状况下可能咱们并不须要生成外键关系;
第三若是当表名很长的时候,主键也会被截断显示或不是咱们指望的格式
因此虽然表设计好了,但要签入数据库脚本的话,本身仍是须要进行必定的修改,下面咱们一步步来实现自定义配置以达到要求
自定义配置PD
1.去掉脚本中的外键关联
1)双击表结构,以下图所示去掉create foreign key和drop foreign key,而后点应用,你会发现Preview中外键相关脚本已经没有了
2.去掉自动生成的表注释,换成自定义的
1)依次点击数据库->Generate Database->Format去掉Title前面的勾,这时候自定生成的注释已经没了,下一步添加自定义注释;
2)依次点击数据库->Edit Current DBMS->Script->Objects->Table->Create,加上以下图所示脚本,这时候Preview已经有这段注释了
3.让建表语句能够重复执行,如if not exists create这样
1)去掉自带drop table操做,经过1.1中Show Generation Options中,去掉drop table勾就能够了;
2)加上自定义重复脚本判断语句,仍是刚才2.2图所在Table->Create地方,修改Value值以下图
4.自定义主、外键名称
1)位置以下,其中PK_%.U27:TABLE%就是主键的规则名称,U27就是长度最多只能是27位,TABLE就是表名,修改这里便可改变主键的生成规则
经过上面配置后,最终生成的SQL脚本就是按咱们设想的来了,以下
/* 表名:班级表 */ if not exists (select 1 from sysobjects where id = object_id('School_Classes') and type = 'U') begin create table School_Classes ( ID int not null, Name nvarchar(20) null, CreateTime datetime null default getdate(), constraint PK_SCHOOL_CLASSES primary key (ID) ) end go /* 表名:学生表 */ if not exists (select 1 from sysobjects where id = object_id('School_Student') and type = 'U') begin create table School_Student ( ID int not null, Name nvarchar(20) null, ClassID int null default 0, Age tinyint null default 0, StuNo nvarchar(10) null, Remark nvarchar(500) null, constraint PK_SCHOOL_STUDENT primary key (ID) ) end go
其实对于自定义脚本,你们应该发现大部分都是经过数据库->Edit Current DBMS->Script->Objects来定义的,如Table来定义表,Column来定义列,不少功能只要去尝试修改下就能知道了。