用PowerDesigner生成自定义建表语句
我们经常用PowerDesigner来进行数据库表结构的设计,并且设计出来的表比较直观的看出之间的相互关系,方便理解;但其自动生成的脚本并不一定符合我们实际需求,所以需要经过一定配置后才能真正达到要求,下面用一个简单的案例来学习如何配置PD。
需求:
这里假设数据库代码版本维护是通过sql脚本文件来管理的,构造可重复执行的创建表、添加字段、索引等
用PowerDesigner生成符合自己实际需求的脚本,要求如下
1.建表语句可重复执行
2.表名要有中文注释
3.在PD里外键关联不体现在生成脚本里
4.主键、外键等可以自定义命名
测试表:
学生表(Student)和班级表(Classes)
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来定义列,很多功能只要去尝试修改下就能知道了。
用PowerDesigner生成自定义建表语句的更多相关文章
- Oracle 自动生成hive建表语句
从 oracle 数据库导数到到 hive 大数据平台,需要按照大数据平台的数据规范,重新生成建表的 SQL 语句,方便其间,写了一个自动生成SQL的存储过程. ① 创建一张表,用来存储源表的结构,以 ...
- 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句
1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write ...
- 使用PowerDesigner进行数据库设计并直接把设计好的表导出相应的建表语句
Power Designer:数据库表设计工具 PowerDesigner是Sybase公司的一款软件,使用它可以方便地对系统进行分析设计,他几乎包括了数据库模型设计的全过程.利用PowerDesig ...
- sqlserver 表中记录生成insert,可以加条件,可以生成建表语句
sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...
- postgreSQL生成建表语句
参考博文:https://blog.csdn.net/xiaofengtoo/article/details/84395199 修复了其函数中的bug,支持生成包含:字段(支持数组类型字段).约束.索 ...
- 【SQL】ORACLE在sqlplus中使用spool方式生成建表语句
在实际生产中有时我们需要将一张表的数据导入到另外一张表,如果有PLSQL,我们可以通过PLSQL工具将数据导出为sql脚本,然后再在另外一个数据库中执行这个脚本.但有时在实际生产中我们没有PLSQL这 ...
- 脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明
常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...
- 基于表的数据字典构造MySQL建表语句
表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...
- 根据javabean转换为mysql建表语句与mapper内容
原文地址: https://www.cnblogs.com/Jeffscnblog/p/10072483.html 一般上,我们会使用数据库表转换为javabean.dao.或是mapper,就叫逆 ...
随机推荐
- CF 518D(概率dp)
传送门:Ilya and Escalator 题意:有n个人排队进车厢,每秒只能进一个人,而且第1个人进了后面的人才能进,第一个人每秒进入车厢的概率为p,不进的概率为1-p,求t秒后进入车厢总人数的数 ...
- PHP实现插入排序算法
插入排序(Insertion Sort),是一种较稳定.简单直观的排序算法.插入排序的工作原理,是通过构建有序序列,对于未排序的数据,在有序序列中从后向前扫描,找到合适的位置并将其插入.插入排序,在最 ...
- 解决Android Device Chooser 找不到设备问题
第一种情况: 已经启动了官方的模拟器也进入了Android手机界面,可是在Android Device Chooser 看不到设备,怎么办? 例如以下图所看到的,使用Reset adb 或者在adb所 ...
- 《JavaScript设计模式与开发实践》读书笔记之模板方法模式
1. 模板方法模式 1.1 面向对象方式实现模板方法模式 以泡茶和泡咖啡为例,可以整理为下面四步 把水煮沸 用沸水冲泡饮料 把饮料倒进杯子 加调料 首先创建一个抽象父类来表示泡一杯饮料 var Bev ...
- Java集合类汇总记录-- apache.commons4(TreeList)
通常.Tree是Tree,List是List,两者不太可能混在一起.但apache-commons库却用tree实现了实现了List的接口,也就是TreeList类.与标准的LinkedList相比. ...
- Automatically generate serial number in abap
流水号的产生: 在ABAP开发中,很多地方都需要按照自己的规则生成流水号,把这些流水号保存进透明表,作为唯一标示. 一. 系统中设定流水号 使用T-Code SNRO来创建一个流水号标识对象. 输 ...
- 飘逸的python - 保持命名空间的整洁
API的设计是一个艺术活.往往需要其简单.易懂.整洁.不累赘. 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的. 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎 ...
- jQuery中间each实施例的方法
$.each()和$(selector).each()很阶段似,但它是不一样的. 前者可用于遍历数组或json对象 后者被设计成遍历jQuery对象 第一个是$.each()对,通常这么用 $.eac ...
- C#访问MySQL数据库(winform+EF)
原文:C#访问MySQL数据库(winform+EF) 以前都是C#连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winf ...
- jQuery Ajax: $.post请求示例
jQuery Ajax: $.post请求示例 leyangjun.html页面 <html> <head> <meta http-equiv="Content ...