在數據建模過程中,我們建立概念數據模型,通過正向工程生成物理數據模型,生成數據庫建庫腳本,最後將物理數據模型生成關係數據庫,現在反過來,通過逆向工程將關係數據庫,生成物理數據模型。
優點:
在丟失數據模型或者數據庫模型同現有的數據庫不一致,可以通過該方法生成使用中數據庫的模型
缺點:
還原回的模型中,可能會沒有中文註釋,沒有表外鍵對應關係(字段還有,索引關係沒了)
前提:
1,確認要生成模型的數據庫是最新的,並且可以使用
2,安裝Powerdesigner軟件
具體操作步驟:
一,建立ODBC數據源
1, 打開系統ODBC數據源,位置「控制面板--管理工具--數據源(ODBC)
2,選擇系統DSN,點擊添加按鈕,會彈出如下界面,選擇與數據庫相匹配的驅動程序
3,點擊完成,彈出數據源名稱(自定),和選擇你要連接的數據庫,如下圖所示
4,選擇確定後,該數據源建立成功,可以雙擊該數據源名稱進行連接測試,如下圖所示
5,至此數據源建立完成,當然這些也可以不用在這裏建立,在powerdesigner裏也可以建立,建立方法爲
選擇Database->configure connections,轉到system dsn標籤,點擊Add按鈕,選數據庫類型DB2,點擊完成。顯 示如下:輸入DataSource Name「PDMTest」;輸入ServerName「Database」, 配置完成。如下所示:
二,在Powerdesigner中逆向生成
1,打開Powerdesigner工具,創建一個PDM文件,選擇與之匹配的數據庫類型「ibm db2 udb 8.x common server」。創建方法爲:右鍵點擊左側面板中的WorkSpace---->new------>physical data nodel ,在DBMS中選擇你要的數據類型,選擇好後點擊確定,則新建立了一個工作空間。
2,選擇Database菜單下的Reverse Engineer Database,彈出Database Reverse Engineering對話框,選Using an ODBC data source選ODBC數據源「s2ms」,如下圖所示:
3,點擊確定後,顯示此數據庫中所有表、視圖、用戶(這個選擇一下該數據庫的用戶)。根據需要選擇後,轉換成pdm。圖示如下
4,選擇好後,點擊OK,則生成模型。
三,利用腳本生成模型
如果你不光有個正在使有的數據庫,你還有一下建立庫的腳本,那你發財了!因爲用.sql的腳本生成的模型,就不存在用數據庫生成的缺點了,具體操作如下:
二、通過SQL腳本逆向工程生成PDM
1、數據庫SQL腳本文件crebas.sql。下爲腳本實例:
create table "class" (
"classID" NUMBER(2) not null,
"className" VARCHAR2(24),
constraint PK_CLASS primary key ("classID")
)
/
create table "student" (
"studentID" NUMBER(10) not null,
"studentName" VARCHAR2(4),
"classID" NUMBER(2),
constraint PK_STUDENT primary key ("studentID")
)
/
alter table "student"
add constraint FK_STUDENT_REFERENCE_CLASS foreign key ("classID")
references "class" ("classID")
/
2、還是創建一個pdm,選擇Database--->Reverse Engineer Database,選擇Using script files。
3、 看到由腳本自動生成相關的PDM如下所示:
四,生成模型後要導出數據庫建庫腳本
導好的模型,當然是用來修改和導出建庫腳本的,操作方法如下
1,選擇database--->generate database彈出如下窗口
在用戶的none中選擇數據庫用戶,同時可選要導出的表,最後點擊確定,如果不能正常生成腳本提示模型錯誤,則在上圖中的options中將check modle 的選項去掉,點擊確定,生成sql腳本,
這時生成的腳本不要着急去用,因爲可能是有問題,用記事本或其它工具打開這個腳本,你會發現在所屬名上也就是s2ms上都會加上""號,用Ctrl+H,將所有"替換爲空,就大功告成了!
2、通過sql腳本導入反向生成ER圖
原文地址:http://hi.baidu.com/china8jie/blog/item/fbd7d75cb583b447faf2c0da.html
想起來Sybase 的Power designer, 反向工程生成ER圖, 這樣看的就清楚了.