zoukankan      html  css  js  c++  java
  • Powerdesigner自定义DBMS(以derby数据库为例)

    Powerdesigner自定义DBMS

    Powerdesigner以下简称PD.
    PD默认支持的DBMS不够用时,我们就需要自己定义了。
    以apache derby数据库为例。
    1、DBMS的定义文件
    PD的DBMS定义文件放在install_dir/Resource Files/DBMS目录下。自定义DBMS的第一步是复制一个现成的DBMS文件,由于derby与Oracle相似之处比较多,所以可以选择复制Oracle的DBMS文件,并重命名为derby.xdb

    2、修改描述
    用记录本打开derby.xdb,将大概前16行的一些内容做修改。比如code、name等等。我的大体如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?xml version="1.0" encoding="UTF-8"?>
    <?PowerDesigner AppLocale="UTF16" Code="DERBY" Family="DERBY" ID="{04DFD581-D1C0-43E8-B9AE-01951ECAB446}" LastModificationDate="1347972332" Name="Apache Derby" Objects="778" Symbols="0" Type="{4BA9F647-DAB1-11D1-9944-006097355D9B}" signature="XDB_XML" version="15.1.0.2850"?>
    <!-- do not edit this file -->

    <DBMS xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">

    <o:DBMS Id="o1">
    <a:ObjectID>04DFD581-D1C0-43E8-B9AE-01951ECAB446</a:ObjectID>
    <a:Name>Apache Derby</a:Name>
    <a:Code>DERBY</a:Code>
    <a:CreationDate>0</a:CreationDate>
    <a:Creator/>
    <a:ModificationDate>1243501756</a:ModificationDate>
    <a:Modifier>test</a:Modifier>
    <a:Comment> </a:Comment>
    <a:Family>DERBY</a:Family>

    这样修改之后,我们在PD的database菜单里,选择Change Current DBMS时,可以看到下拉选项中,有一项为Apache Derby。

    3、修改数据类型转换
    由于我们复制的oracle的dmbs文件,与derby中,有些数据类型不一致,所以需要修改。在database菜单里,选择Edit Current DBMS,弹出窗口如下:

    左边是树型结构,点击后右边编辑内容。

    修改数据类型时,选择左侧树:Script -> Data Type。
    插两句话,讲一下PD数据库切换时字段处理的原理。PD本身定义了一套内部的数据类型,如A%n、N、N%s,%p等,其中:
    %n is the length of the data type
    %s is the size of the data type
    %p is the precision of the data type
    当我们由一个DBMS A 换成另一个DBMS B时,PD会首先将A的数据类型转换成PD内部自己定义的数据类型,这个转换的规则这里叫做 A-PD,然后再将内部的数据类型转换成B的数据类型,这里叫做PD-B,通过上面两步转换实现A到B的类型转换。

    而A-PD的规则,定义在刚才打开的Data Type节点下的PhysDataType节点,PD-B规则定义在AmcdDataType节点下。
    举几个简单的例子:
    A、Oracle NUMBER -> Derby BIGINT
    首先要查看Oracle的dbms文件,注意是Oracle的,展开到PhysDataType节点下,看到有如下映射
    Physical Model | Internal
    NUMBER | N
    所以,经过A-PD规则后,Oracle的NUMBER类型会转换成PD的内部类型N。
    接下来,查看Derby的dbms,打开AmcdDataType节点,找到如下映射:
    Internal | Physical Model
    N | NUMBER
    把上面的NUMBER修改成BIGINT
    这样的话,经过PD-B规则,Derby里的字段就会变成BIGINT类型了。

    B、Derby BIGINT -> Oracle NUMBER
    与上面类型,不过需要查看Derby的PhysDataType和Oracle的AmcdDataType节点。

    从上面两个例子基本可以看出来PhysDataType节点用来将数据库类型转换成PD的类型,而AmcdDataType则将PD的内部类型转换成数据库的类型。
    另外,可以使用%n,%s,%p实现更精细的转换,且这三个标识也可以完全由数字代替。

    4、注释
    修改列注释,表格注释在ScriptObjectsTable和ScriptObjectsColumn节点下。其它修改也很类似,如索引、依赖等等。
    实际上,我们最终通过PD生成的SQL,都是由ScriptObjects标签下定义的模板拼起来的。
    ScriptSqlSyntax节点下则是一些基本的SQL语法规定,比如注释以–开始,SQL结束符是;等等。

    更多详细说明可参考手册:
    1、derby:http://db.apache.org/derby/docs/10.9/ref/crefsqlj31068.html
    2、PD:http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc38628.1510/doc/html/rad1232022090125.html
    3、使用POWERDESIGNER设计数据库的20条技巧

    再说两句其它的,关于PD生成数据库设计文档。
    默认的模板生成的文档,有相当多无用的东西,没法儿看。所以我们可以自定义文档模板。在Report -> Report Templates菜单下,在弹出窗口中,点新建,输入名称,然后出现编辑模板的界面,分成左右两块儿,可以把左边一些需要的元素直接拖到右边就OK。报告模板默认放在安装目录Resource FilesReport Templates下,我们也可以把这个目录下的文件复制一份,改个名儿,然后在这个基础上修改。

    总之一句话,PD很强大。

  • 相关阅读:
    React元素渲染
    初识JSX
    微信小程序复制文本到剪切板
    微信小程序报错request:fail url not in domain list
    小程序,通过自定义编译条件,模拟推荐人功能
    积分抵扣逻辑
    微信小程序 switch 样式
    tomcat 配置开启 APR 模式
    tomcat8 传输json 报错 Invalid character found in the request target. The valid characters are defined in RFC 3986
    c++数组初始化误区
  • 原文地址:https://www.cnblogs.com/langtianya/p/3154529.html
Copyright © 2011-2022 走看看