现在的位置: 首页 > 综合 > 正文

PowerDesigner 11 使用心得(转)

2012年08月23日 ⁄ 综合 ⁄ 共 8874字 ⁄ 字号 评论关闭

PowerDesigner 11 使用心得()

 

 

 

1、安装PD v11.0

 

 

 

2、由pdm生成建表脚本时,字段超过15字符就发生错误(oracle

 

原因未知,解决办法是打开PDM后,会出现Database的菜单栏,进入Database
Edit Current DBMS scriptobjectscolumnmaxlen,把value值调大(原为30),比如改成60。出现表或者其它对象的长度也有这种错误的话都可以选择对应的objects照此种方法更改!

 

或者使用下面的这种方法:

 

生成建表脚本时会弹出Database generation提示框:把options
check model的小勾给去掉,就是不进行检查(不推荐)!

 

或者可以修改C:Program FilesSybasePowerDesigner Trial 11Resource FilesDBMSoracl9i2.xdb文件

 

修改好后,再cdm转为pdm时,选择“Copy the DBMS definition in model”把把这个资源文件拷贝到模型中。

 

 

 

3、生成的建表脚本中如何把对象的双引号去掉?

 

打开cdm的情况下,进入ToolsModel OptionsNaming Convention,把NameCode的标签的Charcter
case
选项设置成Uppercase或者Lowercase,只要不是Mixed Case就行!

 

或者选择Database->Edit current database->Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的comment为“Determines
if the case sensitivity for identifiers is managed using double quotes
”,表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES,改为“No”即可!

 

或者在打开pdm的情况下,进入ToolsModel OptionsNaming Convention,把NameCode的标签的Charcter
case
选项设置成Uppercase就可以!

 

 

 

4、建立一个表后,为何检测出现Existence of index的警告

 

A table should contain at least one column, one index, one key, and one reference.

 

可以不检查 Existence of index
这项,也就没有这个警告错误了!

 

意思是说没有给表建立索引,而一个表一般至少要有一个索引,这是一个警告,不用管也没有关系!

 

 

 

5、创建一个表在修改字段的时候,一修改name的内容,code也跟着变化,如何让code不随着name变化

 

NameCode
的右侧都有一个按钮“=”,如果需要不同步的话,把这个按钮弹起来就可以了。

 

Tools->General Options->Dialog->Name to Code Mirroring (去掉)

 

 

 

6、由CDM生成PDM时,自动生成的外键的重命名

 

PDM Generation Options->Detail->FK index names默认是%REFR%_FK,改为FK_%REFRCODE%,其中%REFRCODE%指的就是CDMRelationshipcode!另外自动生成的父字段的规则是PDM
Generation Options->Detail->FK column name template
中设置的,默认是%.3:PARENT%_%COLUMN%,可以改为Par%COLUMN%表示是父字段!

 

 

 

7、如何防止一对一的关系生成两个引用(外键)

 

要定义关系的支配方向,占支配地位的实体(有D标志)变为父表。

 

cdm中双击一对一关系->Detail->Dominant role选择支配关系

 

 

 

8、修改报表模板中一些术语的定义

 

即文件:C:Program FilesSybasePowerDesigner Trial 11Resource FilesReport LanguagesChinese.xrl

 

ToolsResourcesReport Languages-选择Chinese-单击Properties或双击目标

 

修改某些对象的名称:Object AttributesPhysical Data ModelColumn

 

ForeignKey:外键

 

Mandatory:为空

 

Primary:主键

 

Table:表

 

用查找替换,把“表格”替换成“表”

 

修改显示的内容为别的:Values MappingListsStandard,添加TRUE的转化列为是,FALSE的转化列为空

 

另外ReportTitle Page里可以设置标题信息

 

 

 

 

 

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

 

1pd中复制一列是,实际上是一个链接。源列的变动同时体现在复制列上

 

 

 

2。数据库设计通常步骤:CDM缺定主要结构--》生成PDM--》在PDM上修改,必要时生成CDM

 

 

 

3。若由pdm生成cdm再生成pdm,在pdm中修改过的外键名将被改回到默认值

 

 

 

4。必要时可以通过修改模板(DatabaseEdit Current DataBase)改变脚本的格式。例如:

 

ScriptObjectsColumnAddValue中开头增加一行“--%COLNNAME%”以便在脚本中显示列的中英文对照

 

 

 

5。去掉讨厌的namecode映射:ToolsGeneral Optionsclear
the Name to Code mirroring check box

 

 

 

6。对于大小写不敏感的数据库(如Oracle),PowerDesign在创建脚本时自动给表名和字段名加上双引号,以“强字符串”形式来获取区分大小写,这样给sql语句的编写制造很多麻烦。去掉这个添足的功能:

 

Database -Edit Current DBMS -Script -Sql -Format
-
CaseSensitivityUsingQuote

 

右边面板参数值 Value
选择No

 

 

 

7。由cdm生成pdm,可以控制是否将关系生成引用;pdm生成脚本,可以控制是否将引用生成外键

 

 

 

8。对于oracle而言,为表设置选项(如tablespace GPSSYSTEM)可使其创建到正确的表空间;为主键设置选项(using
index tablespace GPSINDEX
)使索引创建到正确的表空间中

 

 

 

9。使数据模型图上显示中文:Tools-Model Options-Naming Convertion,在右侧Display处选择Name

 

 

 

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

 

 

 

1、修改建表脚本生成规则。如果每个表格都有相同的字段,可以如下修改:

 

Database -> Edit Current DBMS
展开 Script -> Object -> Table -> Create
见右下的Value值,可以直接修改如下:

 

 

 

/* tablename: %TNAME% */

 

create table [%QUALIFIER%]%TABLE% (

 

   %TABLDEFN%

 

   ts                   char(19)             null default convert(char(19),getdate(),20),

 

   dr                   smallint             null default 0

 

)

 

[%OPTIONS%]

 

 

 

其中的 tsdr
两列会在生成SQL脚本的时候自动的插入每个表格中,其中的%TNAME%
变量是给每个表格的SQL添加一个该表的Name值注释。

 

 

 

2、修改字段生成规则。要给每个字段都添加一个注释的话,同一窗口中展开 Script -> Object -> Column -> Add
Value修改为:

 

 

 

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

 

     [[constraint %CONSTNAME%] check (%CONSTRAINT%)]]/*%COLNNAME%*/

 

 

 

其中的%COLNNAME%就是列的Name值(可以是中文)

 

 

 

3、修改外键命名规则。选择Database>Edit Current DBMS

 

选择Scripts-》Objects-》Reference-》ConstName

 

可以发现右侧的Value为:

 

 

 

FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%

 

 

 

可见,该命名方法是:'FK_'+8位子表名+9Reference+8位父表名,你可以根据这中模式自定义为:

 

 

 

FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT%

 

 

 

可以使FK名称变为FK_TABLE_2_RELATIONS_TABLE_1

 

掌握这种方法后就可以按照自己的想法修改了

 

 

 

生成建库脚本SQL文件中的表头注释很讨厌,可以在 Databse -> Generate Database (Ctrl+G)窗口中,选择Options卡片,去掉UsageTitle钩选项即可。

 

 

 

4、添加外键

 

Model -> References新建一条外键后,双击进入外键属性,在“Joins”卡片中可以选择子表的外键字段

 

 

 

要生成建库脚本即Databse -> Generate Database (Ctrl+G)窗口中确定即可。

 

 

 

5、双引号

 

对于大小写不敏感的数据库(如Oracle),PowerDesign在创建脚本时自动给表名和字段名加上双引号,以“强字符串”形式来获取区分大小写,这样给sql语句的编写制造很多麻烦。去掉这个添足的功能:

 

Database -Edit Current DBMS -Script -Sql -Format
-
CaseSensitivityUsingQuote

 

右边面板参数值 Value
选择No

 

 

 

16:20 浏览 (770)
评论 (0) 分类:
数据库 2007-09-25

 

缩略显示Oracle中如何计算时间差

 

计算时间差是Oracle DATA数据类型的一个常见问题。Oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。

 

 

 

一旦你发现了时间差异,你可以使用简单的技巧来以天、小时、分钟或者秒为单位来计算时间差。为了得到数据差,你必须选择合适的时间度量单位,这样就可以进行数据格式隐藏。

 

 

 

使用完善复杂的转换函数来转换日期是一个诱惑,但是你会发现这不是最好的解决方法。

 

 

 

round(to_number(end-date-start_date))-
消逝的时间(以天为单位)

 

 

 

round(to_number(end-date-start_date)*24)-
消逝的时间(以小时为单位)

 

 

 

round(to_number(end-date-start_date)*1440)-
消逝的时间(以分钟为单位)

 

 

 

显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的SQL *Plus查询。

 

 

 

SQL> select sysdate-(sysdate-3) from dual;

 

 

 

SYSDATE-(SYSDATE-3)

 

-------------------

 

                  3

 

 

 

这里,我们看到了Oracle使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。

 

 

 

Select

 

   (sysdate-(sysdate-3.111))*1440

 

from

 

   dual;

 

 

 

(SYSDATE-(SYSDATE-3.111))*1440

 

------------------------------

 

                    4479.83333

 

 

 

当然,我们可以用ROUND函数(即取整函数)来解决这个问题,但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型。

 

 

 

Select

 

   round(to_number(sysdate-(sysdate-3.111))*1440)

 

from

 

   dual;

 

 

 

ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440)

 

----------------------------------------------

 

                                          4480

 

 

 

我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle表格中。在这个例子里,我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个Oracle STATSPACK USER_LOG扩展表格之中。

 

 

 

Update

 

   perfstat.stats$user_log

 

set

 

   elapsed_minutes =

 

   round(to_number(logoff_time-logon_time)*1440)

 

where

 

   user = user_id

 

and

 

   elapsed_minutes is NULL;

 

 

 

12:43 浏览 (273)
评论 (0) 分类:
数据库 2007-06-15

 

缩略显示MYSQLORACLE的一些区别

 

有很多应用项目,
刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,应用程序也要相应做一些修改。总结出以下几点注意事项。

 

 

 

1.自动增长的数据类型处理

 

          MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

 

 

 

    CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1        START        WITH       
1 MAXVALUE        99999        CYCLE        NOCACHE;

 

    其中最大的值按字段的长度来定,
如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999

 

          INSERT 语句插入这个字段值为:
序列号的名称.NEXTVAL

 

 

 

2. 单引号的处理

 

          MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

 

 

 

3.  翻页的SQL语句的处理

 

          MYSQL处理翻页的SQL语句比较简单,用LIMIT
开始位置, 记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,
并且只能用ROWNUM<100, 不能用ROWNUM>80

 

   以下是经过分析后较好的两种ORACLE翻页SQL语句( ID是唯一关键字的字段名
)

 

    语句一:

 

SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE
条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY
条件3;

 

 

 

    语句二:

 

SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE
条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY
条件3;

 

 

 

 

 

4.长字符串的处理

 

    长字符串的处理ORACLE也有它特殊的地方。INSERTUPDATE时最大可操作的字符串长度小于等于4000个单字节,
如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

 

 

 

5.         日期字段的处理

 

           MYSQL日期字段分DATETIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,
精确到秒,或者用字符串转换成日期型函数TO_DATE(2001-08-01,YYYY-MM-DD)--
24
小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式,
可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(2001-08-01,YYYY-MM-DD
HH24:MI:SS
)

 

 

 

    日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用 DATE_FIELD_NAME > SUBDATENOW(),INTERVAL
7 DAY
ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;

 

 

 

6.  空字符的处理

 

           MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQLNOT NULL来定义ORACLE表结构,
导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

 

 

 

7. 字符串的模糊比较

 

          MYSQL里用字段名 like '%字符串%',ORACLE里也可以用字段名 like '%字符串%'
但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0
会得到更精确的查找结果。

 

 

 

8. 程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。

 

 

 

 

 

11:49 浏览 (420)
评论 (0) 分类:
数据库 2007-06-05

 

缩略显示mysql
时间函数用法集合

 

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6
日期和时间类型。 

 

 

 

这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: 

 

 

 

mysql> SELECT something FROM table 

 

WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; 

 

 

 

DAYOFWEEK(date) 

 

返回日期date的星期索引(1=星期天,2=星期一,
……7=星期六)。这些索引值对应于ODBC标准。 

 

mysql> select DAYOFWEEK('1998-02-03'); 

 

-> 3 

 

 

 

WEEKDAY(date) 

 

返回date的星期索引(0=星期一,1=星期二,
……6= 星期天) 

 

mysql> select WEEKDAY('1997-10-04 22:23:00'); 

 

-> 5 

 

mysql> select WEEKDAY('1997-11-05'); 

 

-> 2 

 

 

 

DAYOFMONTH(date) 

 

返回date的月份中日期,在131范围内。 

 

mysql> select DAYOFMONTH('1998-02-03'); 

 

-> 3 

 

 

 

DAYOFYEAR(date) 

 

返回date在一年中的日数,
1366范围内。 

 

mysql> select DAYOFYEAR('1998-02-03'); 

 

-> 34 

 

 

 

MONTH(date) 

 

返回date的月份,范围112 

 

mysql> select MONTH('1998-02-03'); 

 

-> 2 

 

 

 

DAYNAME(date) 

 

返回date的星期名字。 

 

mysql> select DAYNAME("1998-02-05"); 

 

-> 'Thursday' 

 

 

 

MONTHNAME(date) 

 

返回date的月份名字。 

 

mysql> select MONTHNAME("1998-02-05"); 

 

-> 'February' 

 

 

 

QUARTER(date) 

 

返回date一年中的季度,范围14 

 

mysql> select QUARTER('98-04-01'); 

 

-> 2 

 

 

 

WEEK(date) 

 

  

 

WEEK(date,first) 

 

对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0522个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。 

 

mysql> select WEEK('1998-02-20'); 

 

-> 7 

 

mysql> select WEEK('1998-02-20',0); 

 

-> 7 

 

抱歉!评论已关闭.