PowerDesigner
软件使用
创建E-R图
file → new model → model type → ConceptualDataModel
E-R图实体属性冲突问题
设计多个表,字段遇到同名的时候突然弹出这对话框
This data item is already used in a primary identifier.
Normalization rules prevent from reusing this data item inanother entit.解决方法 把Normalization rules 禁掉,步骤如下: 首先选菜单栏上的“Tools”,再选“Model Options...” 左边第一个类别“Model Setting”把右边的“Data Item”数据框中的“Unique code”选项框取消掉。就能把问题解决。

怎么画E-R图
实体
每一条属性的M\P\D 分别代表: Mandatory(是否允许为空) Primary Identifier(标识符,类似于数据库中的主键) Displayed(是否显示在实体图表符号中)
3.2 关系
将CDM(概念模型)对象转换成PDM(物理模型)对象
2、在 “Columns” 中,设置 “Name” 、 “Code”、“Data Type” 、“Length” 、“Precision” 、“P” 、“F” 、“M”
Name:PD软件中显示的名字 Code:数据库中表的字段名 Data Type:数据库中字段类型 Length:数据库中字段长度 Precision:数据库中字段精度(小数位数) P:主键 F:外键 M:是否为空(勾选为非空)
取消 Name 和 Code 关联
取消 Name 和 Code 关联的设置 在设计 PDM 文件的时候,设计一张表,在填写栏位的时候,如果我们输入 Name,Code会跟着变化. 这个完全是西方人的习惯,因为他们的 Name 和 Code 都是 E 文,所以不会出现什么问题. 但是,我们使用的时候,就会很不习惯,Name 应该是中文名字,Code 才是资料库的实际字段名. 下面记录修改设置的步骤: Step 1: 菜单栏找到 Tools,点开,找到 General Options,点击 Step 2:打开 Dialog 将 Operating modes 中的 Name To Code mirroring 將前面的 勾去掉
创建其他模型
活动图
Model types → Technical Architecture Modeling(TAM)→的Activity Diagram
用例图
Model types → Object-Oriented Model→Use Case Diagram
类图
Model types → Object-Oriented Model→Class Diagram
类图的关系
https://blog.csdn.net/qq_35461948/article/details/112471194 1, 泛化 generalization 用空心三角形+实线来表示
2, 实现 Realization用空心三角形 + 虚线 来表示
3, 关联 Association用实线箭头来表示
4, 聚合 Aggregation用空心菱形 + 实线箭头来表示
5, 组合 Composition用实心菱形 + 实线箭头来表示。
6, 依赖Dependency关系 用虚线箭头表示 如果在一个A类中用到了另一个B类,那么就说A类依赖B类
- 类中用到了对方
- 如果是类的成员属性
- 如果是方法的返回类型
- 是方法接收的参数类型
- 方法中使用到
发生以上5种关系,都称之为拥有依赖关系
包图
Model types → Object-Oriented Model→Package Diagram
时序图
Model types → Object-Oriented Model→Sequence Diagram
元素
角色(Actor)
系统角色,可以是人或者其他系统,子系统。以一个小人图标表示。
对象(Object)
对象位于时序图的顶部,以一个矩形表示。对象的命名方式一般有三种:
1 对象名和类名。例如:华为手机:手机、loginServiceObject:LoginService。
2 只显示类名,不显示对象,即为一个匿名类。例如::手机、:LoginSservice。
3 只显示对象名,不显示类名。例如:华为手机:、loginServiceObject:。
生命线(LifeLine)
时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线(对象的时间线)。以一条垂直的虚线表。
控制焦点(Activation)
控制焦点代表时序图中在对象时间线上某段时期执行的操作。以一个很窄的矩形表示。
消息(Message)
表现代表对象之间发送的信息。消息分为三种类型。
同步消息(Synchronous Message)
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线+实心箭头表示。
异步消息(Asynchronous Message)
消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线+大于号表示。
返回消息(Return Message)
返回消息表示从过程调用返回。以小于号+虚线表示。
自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示。
状态图
Categories → Technical Architecture Modeling(TAM)→Statechart Diagram
数据流图
Categories → Information →Data Flow Diagram
实体关系图
Model types → Object-Oriented Model→Use Case Diagram
数据结构图
Model types → Physical Data Model→Physical Diagram
箭头上无法显示文字
右键->Format->Content->Center中选Name
2 报错
2.1 PDM的sql导入数据库报错
关于sql导入MySQL运行报错:“[Err] 1022 - Can’t write; duplicate key in table ‘#sql-1bec_23’”
powerdesign数据库概念模型转物理模型,生成sql代码时容易出现以上1022错误,具体原因是外键重名。我们只要在自定义外键名转换成物理模型时,更改‘’多对多‘’自动生成表关系两边的外键名就好
修改多对多的外键名,不一样就行
2.2 PDM导出sql报错
不能把两个独立的E-R图一起导出
3 设置
3.1 禁止根据name自动输入code
Tools --> General Options --> Dialog --> 取消选中Name to Code mirroring
3.2 Code内容与Name一致
1.主菜单Tools->General Options->Dialog-> Name to Code mirroring,勾上(默认是勾上的)。
2.主菜单Tools->Model Options-> Naming Convention项(设置该项,会影响所有的子节点).勾选" Enable name/code conversions".
3.在Name To Code标签页输入以下脚本即可
.vbscript(%Name%) ScriptResult=getpy(ScriptInputArray(0)) function getpychar(char) tmp=65536+asc(char) if(tmp>=45217 and tmp<=45252) then getpychar= "A" elseif(tmp>=45253 and tmp<=45760) then getpychar= "B" elseif(tmp>=45761 and tmp<=46317) then getpychar= "C" elseif(tmp>=46318 and tmp<=46825) then getpychar= "D" elseif(tmp>=46826 and tmp<=47009) then getpychar= "E" elseif(tmp>=47010 and tmp<=47296) then getpychar= "F" elseif(tmp>=47297 and tmp<=47613) then getpychar= "G" elseif(tmp>=47614 and tmp<=48118) then getpychar= "H" elseif(tmp>=48119 and tmp<=49061) then getpychar= "J" elseif(tmp>=49062 and tmp<=49323) then getpychar= "K" elseif(tmp>=49324 and tmp<=49895) then getpychar= "L" elseif(tmp>=49896 and tmp<=50370) then getpychar= "M" elseif(tmp>=50371 and tmp<=50613) then getpychar= "N" elseif(tmp>=50614 and tmp<=50621) then getpychar= "O" elseif(tmp>=50622 and tmp<=50905) then getpychar= "P" elseif(tmp>=50906 and tmp<=51386) then getpychar= "Q" elseif(tmp>=51387 and tmp<=51445) then getpychar= "R" elseif(tmp>=51446 and tmp<=52217) then getpychar= "S" elseif(tmp>=52218 and tmp<=52697) then getpychar= "T" elseif(tmp>=52698 and tmp<=52979) then getpychar= "W" elseif(tmp>=52980 and tmp<=53640) then getpychar= "X" elseif(tmp>=53689 and tmp<=54480) then getpychar= "Y" elseif(tmp>=54481 and tmp<=62289) then getpychar= "Z" else '如果不是中文,则不处理 getpychar=char end if end function function getpy(str) for i=1 to len(str) getpy=getpy&getpychar(mid(str,i,1)) next end function .endvbscript4.如果想更改原来的设置,勾上Apply Name To Code Conversion->To All Objects即可,这样就会把所有对象的Code根据Name首字母重新生成。