用PowerDesigner生成自定义建表语句

原文:用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来定义列,很多功能只要去尝试修改下就能知道了。

时间: 2024-10-11 22:31:00

用PowerDesigner生成自定义建表语句的相关文章

PowerDesigner如何导出建表sql脚本(转)

1 按照数据库类型,切换数据库. Database-> Change Current DBMS... 2 生成sql脚本 Database -> Database Generation 的Preview选项卡 点击保存按钮,保存产生的sql脚本到本地. [注意]: 1 本人使用的powerDesigner是15.2版本. 2 产生出的sql脚本一般会有drop table的语句,这些语句在运行时可以不要,以防报出表不存在的错误. PowerDesigner如何导出建表sql脚本(转),布布扣,

excel的宏与VBA实践——建表语句

不带分区版本:V1.0: Sub createTableDDL() '自动创建建表语句 '定义换行和TAB Ln = Chr(13) + Chr(10) TB = Chr(9) '定义脚本目录 Dim dir AS String dir = "C:\CREATE_TABLE_DDL" Set FSOE = CreateObject("Scripting.FileSystemObject") If FSOE.folderexists(dir) = False Then

表操作--建表语句

表操作--建表语句 1.创建默认字符集库 下面已默认格式的字符集库 mysql> create database Ysolin; Query OK, 1 row affected (0.00 sec) mysql> show create database Ysolin\G *************************** 1. row *************************** Database: Ysolin Create Database: CREATE DATABAS

DB2建表语句

db2 => create table test (name char(8) not null primary key,depid smallint,pay bigint) DB20000I SQL 命令成功完成. db2 => create table test1 (name char(8) not null primary key,depid smallint references department (depid),pay bigint) DB20000I SQL 命令成功完成. db

根据javabean转换为mysql建表语句

一般上,我们会使用数据库表转换为javabean.dao.或是mapper,就叫逆向工程.做项目时一般也是先设计数据库,再进行系统开发,所以一般使用逆向工程. 但我这边由于工作临时的需要,需要将javabean转换为建表语句,于是上网搜了一下,大部分是做一个工具类进行bean解析输出SQL语句. 根据自身项目命名设计要求,简化一个例子如下,供参考 package com.util; import java.io.IOException; import java.lang.reflect.Fiel

oracle的建表语句

oracle数据库的建表语句,具体语法如下: CREATE TABLE tablename (column_name datatype [null,not null], column_name datatype [null,not null], ...... [constraint] ) 语法说明: tablename:在数据库中需要创建的表的表名称,在同一个数据库中的表名称是不能重复的: column_name:创建的表的列名称,列名称在一个表中也是不能重复的: datatype:创建的表的列

存储引擎,详细建表语句,数据类型,约束

引擎指的是一个系统的核心部分引擎有不同分类是为了适应不同的使用场景查看mysql支持的所有引擎show engines MRG_MYISAM 是一堆MYISAM表的集合 用于做水平分表,如果一个表中数据量太大 将导致效率降低 水平分表就是把整个大表拆成不同的小表,每一次查询会先判断数据在哪一个表中 然后对应去查找 以此来提高效率垂直分表 当一个表中 字段太多 然而常用的信息就那么一两个 那就可以把不常用字段切到另一个表中 然后建立关联关系 innodb 是最最常用的引擎 因为支持 事务 行锁 外

如何在SQLyog查看建表语句

第一步:打开SQLyog,连接数据库,按[ctrl+T]新建一个查询窗口 第二步:在查询窗口中输入   以下查看建表语句: SHOW CREATE TABLE [表名称]; 比如我要查看hhh表            如图所示: 第三步:右击查询窗口,[执行查询].[执行查询] 第四步:以文字视图显示,如下图 原文地址:https://www.cnblogs.com/hzyhx/p/11079900.html

SQL_使用DBMS_METADATA.GET_DDL生成建表语句

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/43988377 今天在群里学来一着,通过DBMS_METADATA.GET_DDL来生成建表或视图的sql语句. (1).生成创建表的sql语句 SQL> set long 20000; SQL> SELECT DBMS_METADATA.GET_DDL('