把已有数据库结构反向导入 PowerDesigner 生成物理数据模型(PDM),再批量替换成中文名、按前缀自动分模块——这几步下来,模型就好读多了。
1. 新建 PDM 并连上数据库
新建一个 Physical Data Model 文件,然后点菜单 Database → Configure Connections,左边选 Connection Profiles:

2. 配 MySQL 连接
点左上角 + 新建 MySQL 连接:

填上主机、端口、用户名、密码和目标库名:

填完点 Test Connection 测通,没问题就保存。
3. 从数据库反向生成模型
点 Database → Update Model from Database 打开选项窗口。
操作顺序:先点右侧 取消全选箭头(→|)清空默认勾选,再点左侧 选择数据库箭头(|←)选目标库,最后点 全选箭头(→|)选中所有表:


按上面步骤操作后,点确定就导入到 PDM 了:

4. 批量把英文名替换成中文注释
PowerDesigner 默认显示英文名。如果数据库表字段已经写了中文 Comment,可以用脚本一次性替换过来。
路径:Tools → Execute Commands → Edit/Run Script
粘贴并运行以下脚本:
1Option Explicit2ValidationMode = True3InteractiveMode = im_Batch4
5Dim mdl ' 当前模型6
7Set mdl = ActiveModel8If (mdl Is Nothing) Then9 MsgBox "当前没有打开的模型!"10ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then11 MsgBox "当前模型不是物理数据模型(PDM)!"12Else13 ProcessFolder mdl14End If15
16Private Sub ProcessFolder(folder)17 On Error Resume Next18 Dim Tab19 For Each Tab In folder.Tables20 If Not Tab.IsShortcut Then21 If Tab.Comment <> "" Then Tab.Name = Tab.Comment22 Dim col23 For Each col In Tab.Columns24 If col.Comment <> "" Then col.Name = col.Comment25 Next26 End If27 Next28
29 Dim view30 For Each view In folder.Views31 If Not view.IsShortcut And view.Comment <> "" Then32 view.Name = view.Comment33 End If34 Next35
36 Dim f37 For Each f In folder.Packages38 If Not f.IsShortcut Then39 ProcessFolder f40 End If41 Next42End Sub跑完之后,模型里的表名、字段名、视图名就都换成中文了。
5. 按前缀自动分组并创建模块图表
还能根据表名前缀(比如 act_、sys_)自动创建模块图表,把对应的表归进去。
路径一样:Tools → Execute Commands → Edit/Run Script,跑这个:
1Option Explicit2
3Dim mdl, prefixMap, d, prefix, diagName4Dim tab, sym, symExists, diagram, tabCode5Dim createdCount, movedCount6
7Set mdl = ActiveModel8
9If mdl Is Nothing Then10 MsgBox "请在物理数据模型中运行此脚本!", vbExclamation11ElseIf mdl.ClassName <> "Physical Data Model" Then12 MsgBox "当前模型不是物理数据模型(PDM),请检查!", vbCritical13Else14 Set prefixMap = CreateObject("Scripting.Dictionary")15 prefixMap.Add "act_", "活动模块"16 prefixMap.Add "sys_", "系统模块"17
18 createdCount = 019 movedCount = 020
21 For Each prefix In prefixMap.Keys22 diagName = prefixMap(prefix)23 Set diagram = Nothing24
25 For Each d In mdl.PhysicalDiagrams26 If d.Name = diagName Then27 Set diagram = d28 Exit For29 End If30 Next31
32 If diagram Is Nothing Then33 Set diagram = mdl.PhysicalDiagrams.CreateNew()34 diagram.SetNameAndCode diagName, prefix & "diagram"35 createdCount = createdCount + 136 End If37
38 For Each tab In mdl.Tables39 tabCode = LCase(tab.Code)40 If LCase(Left(tabCode, Len(prefix))) = LCase(prefix) Then41 symExists = False42
43 For Each sym In diagram.Symbols44 If Not sym.Object Is Nothing Then45 If sym.Object Is tab Then46 symExists = True47 Exit For48 End If49 End If50 Next51
52 If Not symExists Then53 diagram.AttachObject(tab)54 movedCount = movedCount + 155 End If56 End If57 Next58
59 If Not diagram Is Nothing Then60 diagram.AutoLayout61 End If62 Next63
64 MsgBox "处理完成!" & vbCrLf & _65 "新创建模块图表:" & createdCount & " 个" & vbCrLf & _66 "新增表符号总数:" & movedCount & " 个", vbInformation67End If其他模块也一样,在 prefixMap.Add 里加一行就行:
1prefixMap.Add "user_", "用户模块"2prefixMap.Add "order_", "订单模块"执行后 PowerDesigner 会自动创建对应的模块图表,把匹配前缀的表归进去并自动布局:

总结
跑完这五步,就能从 MySQL 反向生成 PDM、把英文名换成中文注释、按前缀自动分模块。接手上古系统或者做数据库文档标准化的时候特别好用,建议把脚本存下来,下个项目直接复用。
Some information may be outdated