name和code同步更新问题
在显示的视图里,显示的是name,code对应的是数据库实际的列或表,由于中文使用的问题,通常是name里填中文意思,code填英文的列名(一般不会用中文来命名列名)。在编辑Name的时候,Code就自动更新为Name中相同的值,这显示不是我们期望的,设置的方法是Tools=>General Options=>Dialog中的Name To mirroing复选框把勾去掉即可。
反向得到中文注释的表名和列名
如果不使用反向工程的话,一般PDM的更新在开发过程中会成为一个负担,尤其是表较多,有一定更新频率的时候。现实中有的情况就是PDM只在设计时,在软件开发后期和维护过程中,就不在进行更新了。反向的操作是在File=》Revers Engnieer=>Database中进行,可以按照数据创建的sql在反向,也可以直接连接到数据库进行反向。
默认反向过来的name和code是相同的,这肯定无法满足现实的要求。通常先进行了数据库设计,生成了PDM,中文注释已写好了,不可能反向回来,name又变成英文的了。这里需要做的就是更改配置,操作的地方在Tools=>Resources=>DBMS里,打开后会出现所有内置的DBMS的不同厂商的不同版本的产品,可以直接更改其属性,但最好还是以某一个为模板新增一个自己使用的DBMS。
建好后,在配置窗体的Script的Column下,如下图Column的节点的Commnet定义了一些系统内置的常量,具体做什么用可以接着往下看。
在Column里找到SqlListQuery,Value中最上面用大括号括起来的,就是一些内置的变量,对应数据库列的参数,下面的sql就是怎么去取的相应的值到变量中去(如sys.all_tab_columns )。在变量列表中COMMENT(注释)前增加COLNNAME(表示列的Name字段),然后下面sql的对应顺序的位置增加m.comments即可。同样的在Script的Table节点的SqlListQuery中进行更改即可:
{OWNER, TCODE,TLABL,TNAME} select t.owner, t.table_name, p.comments, p.comments from sys.all_all_tables t, sys.all_tab_comments p where not exists (select 1 from sys.all_mviews s where s.owner = t.owner and t.table_name in (s.mview_name, s.update_log)) and t.iot_name is null and nvl(t.dropped, 'NO') = 'NO' and t.TABLE_NAME= p.table_name and t.owner = p.owner [ and t.table_name=%.q:TABLE%] [ and t.owner=%.q:SCHEMA%] order by t.owner, t.table_name
最终效果如下,正是我们想要的。
PDM的更新和维护
有了以上内容,要维护PDM就比较好办了,操作时在Database的Generate Database、Apply Mode to Database、Update Model from Database。第一种相当于初始化操作,生成的sql语句里会先drop掉表,再create表,第二种就是根据差异来更新数据库,第三种就是从数据库得到Model里。
发布为HTML格式
做好的数据库设计当然不是只给自己看的,设计、开发、测试人员都可以参考,但有时候对方电脑上不一定会安装PowerDesign,如测试人员那就一般不会去安装。这时候,我们可以发布为HTML格式的文档给对方,操作是Report菜单中,按照向导一步步来就行了。
设置自己的样式
做程序员的有时还真的锻炼下自己的美感,搞点DIY,PDM也最好可以弄成统一的风格,比如一个公司内,一个大的团队内。这样就能形成鲜明特色,如淘宝UED Team做的PPT就有自己的一套风格。我用的是青花瓷和玉白色,这也是我们公司产品的主色调,青色象征着坚强、希望、古朴和庄重。