工具鏈準備
- 安裝 MySQL Connector/ODBC(官網下載對應版本)
- ODBC 資料來源管理員 (odbcad32) 建立 User DSN 指向目標 MySQL 實例
- ERWin 啟動,開啟既有 Logical Model
核心流程
- Forward Engineer → ODBC 2.0:選擇剛建立的 DSN,生成 Physical Model
- 關鍵微調:ODBC 產生的 DDL 往往不完全相容 MySQL 語法,需透過 ERWin Model-Level / Table-Level Scripts 修正
常見不相容點與修正腳本
| 問題 | ERWin 產出 | MySQL 需求 | 修正腳本範例 |
| 時間戳型別 | DATE | DATETIME / TIMESTAMP | ALTER TABLE %TableName MODIFY CREATE_ON DATETIME; |
| 自增主鍵 | INT | INT AUTO_INCREMENT | ALTER TABLE %TableName MODIFY ID INT AUTO_INCREMENT PRIMARY KEY; |
| 無符號整數 | INT | INT UNSIGNED | ALTER TABLE %TableName MODIFY QTY INT UNSIGNED; |
| 字符集/校對 | 預設 | utf8mb4_unicode_ci | ALTER TABLE %TableName CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| 儲存引擎 | 無指定 | InnoDB | ALTER TABLE %TableName ENGINE=InnoDB; |
ERWin 巨集變數速查
%TableName%:當前表名
%ColumnName%:當前欄位名
%DataType%:當前資料型別
%SchemaName%:Schema/Database 名
腳本類型與執行順序
| 類型 | 範圍 | 執行時機 | 用途 |
| Model-Level Pre | 整個 Physical Model | 建表前 | 建立資料庫、設定全域變數 |
| Model-Level Post | 整個 Physical Model | 建表後 | 建立跨表 FK、權限授予 |
| Table-Level Pre | 單表 | 建表前 | 建立臨時表、分區前置操作 |
| Table-Level Post | 單表 | 建表後 | 修正型別、加索引、建立觸發器 |
實戰範例:Table-Level Post Script 修正 DATETIME
-- ERWin Table-Level Post Script
ALTER TABLE %TableName MODIFY CREATE_ON DATETIME;
ALTER TABLE %TableName MODIFY UPDATE_ON TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Forward Engineer 設定要點
- 勾選 Generate Pre/Post Scripts
- 選擇 MySQL 5.x 目標資料庫版本
- 啟用 Generate IF NOT EXISTS 避免重複執行報錯
- 輸出單一
.sql 檔,便於版控與 Code Review
結語
ERWin + ODBC 逆向/正向工程是異構建模的標準路徑,但 ODBC 通用型別無法涵蓋 MySQL 專屬特性。掌握 Table-Level Post Script 微調 DATETIME、AUTO_INCREMENT、UNSIGNED、CHARSET、ENGINE 五大項,即能產出生產級 MySQL DDL,落地「建模即交付」流程。