PowerDesigner数据库建模name和code写反了怎么办?

类别:软件工程 点击:0 评论:0 推荐:

name和code的输入错误:有一位网友使用PowerDesigner进行数据库建模,由于对PowerDesigner的使用不熟悉,勿以为对表中的列生成脚本会使用name而不是code。该网友的本意是:使用中文作为注释便于理解和沟通,而sql脚本则采用英文。但是正是由于对这个概念没有弄清楚,恰恰将name和code弄错,code输入列中输入了中文,name列中输入了英文。如下图所示:

所以生成的脚本如下:

========================================

create table 学生 (

   学号                   int                  null,

   姓名                   varchar(20)          null,

   年龄                   smallint             null,

   性别                   bit                  null,

   已婚                   bit                  null,

   身份证号               varchar(18)          null,

   备注                   varchar(50)          null

)

========================================

这恰恰和他的本意相违背,所以,为了正确的生成英文脚本时,不得不手动将name和code以正确的中英文次序再重新输入一次,模型中有几十张表,该工作耗费了大量宝贵的开发的时间,造成了不必要的损失。

讨论:

要解决这个问题我们要首先要了解PowerDesigner是如何成脚本。在2.15PowerDesigner的变量一节中曾经提到,很多对象都既包含一个代码变量(code variable)又包含一个生成代码变量(generated code variable)。代码(code)变量是在对象属性窗口中定义的属性代码,而生成代码(generated code)变量则是根据对象的属性代码和生成选项计算而产生的,如果代码(Code)的长度超过了DBMS中限制的最大长度,则会自动截取code产生生成代码(generated code)。而PowerDesigner在默认情况下生成脚本既不是采用name也不是code,而是代码(code)生成的“生成代码”(generated code)作为对象的名称。而通常情况下由于code本身没有超过DBMS规定的最大长度,所以会给人一种错误的认识,认为脚本生成使用的是code作为名称。

这样,在这个例子中解决问题的思路就很清楚了,如果可以采用name来生成英文代码就可以解决该问题,换句话说,就是用name(名称)替换generated code(生成代码)。参考2.15PowerDesigner的变量一节中的变量列表:“用于定义表的变量”,可得知COLUMN是列的生成代码,COLNNAME是列名称(name),COLNCODE是列代码(code)。

COLNCODE和COLUMN不同之处在于COLUMN是列的生成代码,即COLNCODE在DBMS最大长度范围内的code,如果code太长,就会被截取一部分,这时候的COLUMN就和COLNCODE就不相等了,但通常情况下code不会超过最大长度即与COLUMN相等。

解决方案:

如下图所示,选择Database->Edit current database,选择script->object->column->add

 

图表 2.15.2.1

可以在窗口右方的Value编辑框中看到定义表中列的代码模板:

==========================================

%20:COLUMN%[%COMPUTE%?AS(%COMPUTE%):%20:DATATYPE%[%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%]

[[constraint %CONSTNAME%] check (%CONSTRAINT%)]]

==========================================

参考2.15.2 PowerDesigner中对变量格式化一节,此外,由于变量在PowerDesigner中的引用需要加“% %”,所以很容易理解代码模板中的“%20:COLUMN%”表示对列的生成代码(generated code)采用固定长度20位,而我们需要做的正是将COLUMN换为COLNNAME,也就是将“%20:COLNNAME%”换为“%20:COLNNAME%”,然后点击确定,弹出确认窗口,点击“是”表示保存该修改。进入表中的priview属性页中可以查看代码发生变化,基本上解决了这个问题:

==========================================

create table 学生 (

   studenNo             int                  null,

   studentName          varchar(20)          null,

   age                  smallint             null,

   gender               bit                  null,

   isMarried            bit                  null,

   idCardNo             varchar(18)          null,

   description          varchar(50)          null

)

==========================================

观察代码发现表名称还是采用了这位网友输入的相反的中文,我们可以用相同的方法,Database->Edit current database,选择Script->Object->Table->Create将%TABLE%换为%TNAME%,这样,便会发现脚本中的“学生”也会正确的成为“student”。

通过这种方法,这个问题的解决只需要花费不到一分钟的时间,而不需要动辄手动修改数小时,让人头晕眼花没有一丝成就感。

本文地址:http://com.8s8s.com/it/it37473.htm