使用 PowerDesigner 从 MySQL 反向工程生成物理数据模型并优化展示

把已有数据库结构反向导入 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
粘贴并运行以下脚本:
Option ExplicitValidationMode = TrueInteractiveMode = im_Batch
Dim mdl ' 当前模型
Set mdl = ActiveModelIf (mdl Is Nothing) Then MsgBox "当前没有打开的模型!"ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then MsgBox "当前模型不是物理数据模型(PDM)!"Else ProcessFolder mdlEnd If
Private Sub ProcessFolder(folder) On Error Resume Next Dim Tab For Each Tab In folder.Tables If Not Tab.IsShortcut Then If Tab.Comment <> "" Then Tab.Name = Tab.Comment Dim col For Each col In Tab.Columns If col.Comment <> "" Then col.Name = col.Comment Next End If Next
Dim view For Each view In folder.Views If Not view.IsShortcut And view.Comment <> "" Then view.Name = view.Comment End If Next
Dim f For Each f In folder.Packages If Not f.IsShortcut Then ProcessFolder f End If NextEnd Sub跑完之后,模型里的表名、字段名、视图名就都换成中文了。
5. 按前缀自动分组并创建模块图表
还能根据表名前缀(比如 act_、sys_)自动创建模块图表,把对应的表归进去。
路径一样:Tools → Execute Commands → Edit/Run Script,跑这个:
Option Explicit
Dim mdl, prefixMap, d, prefix, diagNameDim tab, sym, symExists, diagram, tabCodeDim createdCount, movedCount
Set mdl = ActiveModel
If mdl Is Nothing Then MsgBox "请在物理数据模型中运行此脚本!", vbExclamationElseIf mdl.ClassName <> "Physical Data Model" Then MsgBox "当前模型不是物理数据模型(PDM),请检查!", vbCriticalElse Set prefixMap = CreateObject("Scripting.Dictionary") prefixMap.Add "act_", "活动模块" prefixMap.Add "sys_", "系统模块"
createdCount = 0 movedCount = 0
For Each prefix In prefixMap.Keys diagName = prefixMap(prefix) Set diagram = Nothing
For Each d In mdl.PhysicalDiagrams If d.Name = diagName Then Set diagram = d Exit For End If Next
If diagram Is Nothing Then Set diagram = mdl.PhysicalDiagrams.CreateNew() diagram.SetNameAndCode diagName, prefix & "diagram" createdCount = createdCount + 1 End If
For Each tab In mdl.Tables tabCode = LCase(tab.Code) If LCase(Left(tabCode, Len(prefix))) = LCase(prefix) Then symExists = False
For Each sym In diagram.Symbols If Not sym.Object Is Nothing Then If sym.Object Is tab Then symExists = True Exit For End If End If Next
If Not symExists Then diagram.AttachObject(tab) movedCount = movedCount + 1 End If End If Next
If Not diagram Is Nothing Then diagram.AutoLayout End If Next
MsgBox "处理完成!" & vbCrLf & _ "新创建模块图表:" & createdCount & " 个" & vbCrLf & _ "新增表符号总数:" & movedCount & " 个", vbInformationEnd If其他模块也一样,在 prefixMap.Add 里加一行就行:
prefixMap.Add "user_", "用户模块"prefixMap.Add "order_", "订单模块"执行后 PowerDesigner 会自动创建对应的模块图表,把匹配前缀的表归进去并自动布局:

总结
跑完这五步,就能从 MySQL 反向生成 PDM、把英文名换成中文注释、按前缀自动分模块。接手上古系统或者做数据库文档标准化的时候特别好用,建议把脚本存下来,下个项目直接复用。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!














