PowerDesigner数据库建模name和code写反了解决或者是设置name和code的联动

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




下面是设置联动

在powerdesign中,code与name老是联动,修改了name中的数据,code随之修改,影响效率,设置Tools-General Options-Dialog 中的Name to Code mirroring(不选中) 可以解决这个问题 。


要是想根据自己的设计让coe和name联动采用以下方法:

大家都清楚在用PowerDesigner的时候,当你输入Name的时候Code是会自动帮你按照Name的内容填上的.

这个功能虽然好用,但是我需要在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的时候,必须先设置,才会转换的。
如果你已经设计好了,再设置是不会对之前的东西改变的。




上面的都是从其他地方看来的  我自己也没有亲自试验,先记录下来,以备不时之需。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值