所以生成的脚本如下:
========================================
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”。
通过这种方法,这个问题的解决只需要花费不到一分钟的时间,而不需要动辄手动修改数小时,让人头晕眼花没有一丝成就感。
在powerdesign中,code与name老是联动,修改了name中的数据,code随之修改,影响效率,设置Tools-General Options-Dialog 中的Name to Code mirroring(不选中) 可以解决这个问题 。
这个功能虽然好用,但是我需要在Name这一项加上一个中文的注释,这个时候怎么办呢?
下面两个例子,相信对你相当有用.
Examples
· Script 1:
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
.delete(%CurrentPart%)
.set_value(_First, false, update)
.else
%CurrentPart%
.endif
.next
这个例子是把Name内容的#号后边的内容当作Code.
如:在Name列输入 用户名#user_name 则在Code列自动会变成 user_name
· Script 2:
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
%CurrentPart%
.set_value(_First, false, update)
.endif
.next
这个例子是把Name内容的#号前边的内容当作Code.
如:在Name列输入 user_name#用户名 则在Code列自动会变成 user_name
具体操作方法是:
1、打开powerDesigner菜单的Tools->Model Options....->Naming Convention
2、选中Name,并勾选Enable name/code conversions.
3、选择Name To Code,把上面任意一个例子的代码(红色部分)贴到conversion script内容框中即可。
注:用这个script的时候,必须先设置,才会转换的。
如果你已经设计好了,再设置是不会对之前的东西改变的。