zoukankan      html  css  js  c++  java
  • 用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
    View Code

      从上面脚本可以看出

      第一每次表存在都会先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
    View Code

      其实对于自定义脚本,大家应该发现大部分都是通过数据库->Edit Current DBMS->Script->Objects来定义的,如Table来定义表,Column来定义列,很多功能只要去尝试修改下就能知道了。

  • 相关阅读:
    AMD 开源照片级渲染引擎 Radeon ProRender
    删除集群mds
    删除集群mds
    一次旅途她和豆浆结缘,如今拥有70多家加盟店
    小伙居然开网店卖花,整整一年时间他做出了400万元的业绩
    带着800元现金开始创业,居然开出了十几家连锁超市
    北大学霸从小米离职,靠眼镜打开亿万市场
    广西农民靠养猪发家致富,采用新模式既有效益又保护生态
    在母婴产品领域他独领风骚,利润已经突破了1亿
    80后小伙白手起家做照明生意,为他创造了六千万元的业绩
  • 原文地址:https://www.cnblogs.com/xqhppt/p/4380877.html
Copyright © 2011-2022 走看看