翁 彦
powerdesigner是sybase公司著名的产品,我从16-bit的windows开始,就接触并使用这个工具,应该说是有很深的感情。powerdesigner是dba和软件架构师设计的利器,随着版本的不断升级,powerdesigner提供了更多更强大的功能。仅以本篇为开始,向大家介绍一些powerdesinger中的使用技巧,帮助大家更好地更有效率地使用这个case工具。
问题的提出
我曾经在很多网上看到有朋友问起,在powerdesigner的physical model design中,除了oracle外,选择其他数据库模型,最后生成建数据库脚本的时候,不会自动生成记录表和列注释信息的数据库脚本代码。
请允许我先解释一下这个问题的概念,我们通过powerdesigner设计oracle数据库,最后得到的脚本可以像下面这样,其中的comment语句就是我上面指出的在oracle中保存注释信息的脚本语句,在oracle中执行后,可以通过查询oracle的数据字典得到这些信息。这样做的好处是,以后查看表结构比较方便,不需要从数据库文档资料中去寻找了,对于团队开发来说,有应用的意义。
/*===============================================*/
/* table: emp */
/*==============================================*/
create table emp (
"empid" number,
"empname" varchar2(50),
sex char(1)
)
/
comment on table emp is '职员信息'
/
comment on column emp."empid" is '职员编号'
/
comment on column emp."empname" is '职员姓名'
/
comment on column emp.sex is '性别 f:女 m:男'
/
sql server也有这样的语句,但是,大家往往发现选择了数据库模型是sql server,在自动生成建库脚本的时候,即使你选上了生成comment语句的选项,powerdesigner也不会帮你自动生成,是powerdesigner不支持sql server么,答案显然是否定的。
问题的解决
powerdesigner这个工具可以支持任何一种关系型数据库的模型设计,因为,在powerdesigner中每一种数据库模型的特性定义都存储在一个xdb文件中,我们可以在[powerdesigner_install_home]/resource files/dbms下可以找到。当然,我们也可以自己创建一个新的xdb,定义好我们想支持的数据库模型的特性。明白了这一点,这个问题的答案就显而易见。
下面我就简单地说明一下,我使用的是powerdesinger9.5企业版。sybase有些简化版本(如sql moduler)就不能自定义xdb,请大家注意。
1 从菜单tools->resouces->dbms,进入自定义数据模型,参见图1。
图1
2 powerdesigner弹出一个对话框,列表框中列出了当前powerdesigner支持的
数据库模型(图2)。我们选择创建一个新的。输入名字sql server 2000(extended),选择从现有的sql server 2000复制,这样sql server 2000(extended)就包含了原来sql server2000模型拥有的所有特征(图3)。
图2
图3
3 接下来,我们就需要为sql server 2000(extended)添加支持自动生成表和列注释代码的特性。powerdesinger把定义的特性用树状结构组织了起来(图4),本篇要做的工作就是定义script代码特征。我们需要修改script/objects/table/tablecomment和script/objects/column/columncomment中的脚本特征代码。
4 sql server 2000在数据库中保存表和列注释是通过调用系统存储过程sp_addextendedproperty来做的。那么我们只需要,分别写上
表级的注释代码是:
execute sp_addextendedproperty n'ms_description', n'%comment%', n'user', n'%owner%', n'table', n'%table%', null, null
列级的注释代码是
execute sp_addextendedproperty n'ms_description', n'%comment%', n'user', n'%owner%', n'table', n'%table%', n'column', n'%column%'
大家看看这些代码,立刻就明白是怎么回事了(图5)。%comment%之类的就是相当于替换变量,powerdesigner在生成脚本的时候自动替换设计模型中替换变量的值。
图4
图5
5 保存sql server 2000(extended)成一个xdb文件。
6 现在,我们可以创建一个新的physical data model了,数据库模型选sql server 2000(extended)。建立一个表,需要提醒的是,一定要指定一个数据库使用者,一般用dbo(图6)。我们可以为表和列都添加上注释。
图6
7 生成建库脚本,菜单databases->generate database。在图7所示的对话框中,注意要选中comment选项。点击确定,就得到最终的建库脚本。打开看看,我们看到了powerdesinger根据我们告诉它的规则生成了对应的代码
…
execute sp_addextendedproperty n'ms_description', n'雇员信息', n'user', n'dbo', n'table', n'employee', null, null
go
execute sp_addextendedproperty n'ms_description', n'主键id,自动增加', n'user', n'dbo', n'table', n'employee', n'column', n'employeeid'
go
….
8 我们在sql server 2000中执行这个角本,然后通过enterprise manager可以看到这些注释。
图7
图8
小结
通过这个实践,我们可以了解powerdesigner是如何处理不同数据库的sql语法差异的,这和我们开发应用中的参数文件的思路基本一致。同时,我们也应该认识到,powerdesinger的功能还是比较多和复杂的,只有熟悉这个工具的功能使用,才能真真提高生产效率。