如何让PowerDesigner支持自动生成含SQL Server 2000的表和列注释的角本

翁 彦

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 的功能还是比较多和复杂的,只有熟悉这个工具的功能使用,才能真真提高生产效率。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus