这里介绍使用powerdesigner15.2建立物理数据模型的例子,以建立用户和角色之间的物理模型为例。
首先在当前的工作空间下建立物理数据模型。
下一步,选择DBMS类型为oracle10g继续。
在打开的编辑界面中,可以在“调色板”工具箱中选择需要的小工具了。这里我们先拖拽了3个Table。
如果不小心把“调色板”窗口关了,可以在Tools→Customize Toolbars中弹出的窗口中勾选上就可以了。
接下来,开始建表,双击Table_1,在如下的窗口中,编辑表明,注意这里的所有Code命名都规定为大写的英文字母。
再切换到Columns选项卡下,编辑数据列了。发现可定义的数据列属性不够的话可以,点击
来定制列属性,这里我又加上了默认值和描述的属性。列的定义如下:
要看主键定义,双击用户表,点击Keys,双击主键那条记录,就可以编辑了。
给主键列建立相应的sequence。
直接在物理模型上右击建立sequence,建完之后会在模型节点下出现一个sequence节点。再右键新建其他的sequence,建完之后:
在每个表的主键列里引用各个sequence:双击表的主键列,在sequence的编辑位置,直接选择定义好的sequence即可。
建立index,双击Table,点击Indexes选项卡,在里面新建index名称,然后双击,在Columns选项卡中选择Expression为表中指定要建索引的列即可。
接下来,需要建立用户表和角色表之间的关联表了。建法同上。这里主要注意建立外键关联。
选中“调色板”中的Preference,在从关联表的外键指向主表的主键即可。接下来就是双击编辑外键关联的事了。
最后,我们可以预览生成的sql脚本。右键物理模型编辑网格界面的空白处,选择属性,点击预览选项卡,会看到生成了多余的sql。点击窗口上的工具栏中的“显示生成选项”,在弹出的窗口中勾选不需要生成的选项即可。
最终生成的pdm模型对应的sql脚本如下:
alter table FC_USER_ROLE drop constraint FK_ROLE_USER_ROLE; alter table FC_USER_ROLE drop constraint FK_USER_USER_ROLE; drop index IDX_ROLE; drop table FC_ROLE cascade constraints; drop index IDX_USER; drop table FC_USER cascade constraints; drop table FC_USER_ROLE cascade constraints; drop sequence SEQ_ROLE_SID; drop sequence SEQ_USER_ROLE_SID; drop sequence SEQ_USER_SID; create sequence SEQ_ROLE_SID increment by 1 start with 1; create sequence SEQ_USER_ROLE_SID increment by 1 start with 1; create sequence SEQ_USER_SID increment by 1 start with 1; /*==============================================================*/ /* Table: FC_ROLE */ /*==============================================================*/ create table FC_ROLE ( SID NUMBER(10) not null, ROLE_NAME VARCHAR2(20) not null, ROLE_TYPE VARCHAR2(2) not null, VALID_FLAG VARCHAR2(2) default 'Y' not null, CREATED_BY VARCHAR@(20) default 'admin' not null, CREATED_DATE date default sysdate not null, UPDATED_BY VARCHAR2(20) default 'admin' not null, UPDATED_DATE date default sysdate not null, constraint PK_ROLE primary key (SID) ); comment on table FC_ROLE is '这是角色表'; /*==============================================================*/ /* Index: IDX_ROLE */ /*==============================================================*/ create index IDX_ROLE on FC_ROLE ( ROLE_NAME ASC, ROLE_TYPE ASC ); /*==============================================================*/ /* Table: FC_USER */ /*==============================================================*/ create table FC_USER ( SID NUMBER(10) not null, USER_NAME VARCHAR2(20) not null, PASSWORD VARCHAR2(20) not null, EMAIL VARCHAR2(20) not null, PROFESSION VARCHAR2(4), VALID_FLAG VARCHAR2(2) default 'Y' not null, CREATED_BY VARCHAR@(20) default 'admin' not null, CREATED_DATE date default sysdate not null, UPDATED_BY VARCHAR2(20) default 'admin' not null, UPDATED_DATE date default sysdate not null, constraint PK_USER primary key (SID) ); comment on table FC_USER is '这个是用户信息表'; /*==============================================================*/ /* Index: IDX_USER */ /*==============================================================*/ create index IDX_USER on FC_USER ( USER_NAME ASC, EMAIL ASC ); /*==============================================================*/ /* Table: FC_USER_ROLE */ /*==============================================================*/ create table FC_USER_ROLE ( SID NUMBER(10) not null, USER_ID NUMBER(10) not null, ROLE_ID NUMBER(10) not null, VALID_FLAG VARCHAR2(2) default 'Y' not null, CREATED_BY VARCHAR@(20) default 'admin' not null, CREATED_DATE date default sysdate not null, UPDATED_BY VARCHAR2(20) default 'admin' not null, UPDATED_DATE date default sysdate not null, constraint PK_USER_ROLE primary key (SID) ); alter table FC_USER_ROLE add constraint FK_ROLE_USER_ROLE foreign key (ROLE_ID) references FC_ROLE (SID); alter table FC_USER_ROLE add constraint FK_USER_USER_ROLE foreign key (USER_ID) references FC_USER (SID);