由一個問題引發的思考——關於數據庫的外鍵約束


   出於系統設計的需要,數據庫中的表添加了外鍵約束,由於自己的知識不足,這就導致了在刪除數據時被外鍵約束了,不能刪除。So,趕緊學習,趕緊補充知識。問度娘問谷歌,首先得知道什么是“外鍵約束”,網上自有高人在——“如果表A的主關鍵字是表B中的字段,則該字段稱為表B的外鍵,表A稱為主表,表B稱為從表。外鍵是用來實現參照完整性的,不同的外鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕松。”(參考

通過看教程知道了PowerDesigner這個強大的工具,用它可以生成級聯約束,通過觸發器來約束修改數據庫,就是在子表插入數據時,檢查父表是否存在相應的外鍵,如果不存在則禁止添加,當刪除父表數據時,字表中相關的數據自動被刪除。這功能真是強大,可問題又來了,從來沒用過PowerDesigner,只能現學現賣了,問題是你懂的,這個軟件是英文版的,漢化的又不夠好,英語的重要性又一次體現了出來。可是數據庫已經建好了,怎么才能導入的PD中呢,還好強大的PD可以進行“逆向工程”,就是把數據庫導入到PD中進行編輯,再更新到數據庫,過程總是不順利的,首先是數據庫版本不兼容,我安裝的PD是15.1,好像是不支持Sql Server 2008,導入數據時總報錯,苦逼的我也不知道是什么問題,就一個勁兒的問度娘,網上說的好多解決方法都不適用,好在我的耐性還是比較強的,終於找到了良葯—— PowerDesigner 逆向工程 unable to list the tables,用Sql語句將數據庫的兼用級別改為90:

 EXEC sp_dbcmptlevel "dbName", "90";
                 GO

數據庫終於導入成功了,內心這個小激動。接下來就是編輯數據庫關系了:

編輯完關系該更新數據庫了,不知為什么更新的時候不能生成字表插入的觸發器,只能手動添加。誰知道這只是小試牛刀,悲劇的還在后頭,原來的數據庫是有數據,更新完之后數據都沒了,幸虧我有備份,不哭。那就把數據導入進來吧,總有解決不完的問題——附加數據庫的時候因為數據庫名是一樣的,所以要先修改數據庫名,妹的,又報錯:

還好有大牛——MS SQL修改數據庫名稱

由於是昨天晚上太晚了,沒弄完,所以今天有些細節記不太清了,以后會詳細記錄的。


主要感悟有兩點:

一是不要怕遇到問題,有了問題我們才能在解決問題的過程中學到知識,成長的路上會有各種各樣的問題,技術總是在解決問題中練就的。

二要堅持不放棄,學習就是需要一種鍥而不舍的精神,多試幾次,不要輕言放棄。有時,我會為了解決一個問題思考好幾天,最終總會找到答案。



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com