談談數據庫外鍵的使用

baidu到這個話題,發現一個朋友的觀點和我相似,引用一下

外鍵的作用我認爲主要有兩個
一個是讓數據庫自己通過外鍵來保證數據的完整性和一致性
一個就是能夠增加ER圖的可讀性
我覺得第二點的重要性甚至比第一點還高

有些人認爲外鍵的建立會給開發時操作數據庫帶來很大的麻煩
因爲數據庫有時候會由於沒有通過外鍵的檢測而使得開發人員刪除,插入操作失敗
他們覺得這樣很麻煩
其實這正式外鍵在強制你保證數據的完整性和一致性
這是好事兒

應該說如果系統比較小
外鍵的作用可能不會很明顯
如果你的系統後臺有幾百個表的話
沒有外鍵的數據庫設計是我無法想象的

有一個基礎數據的表:商品
其他表都保存商品ID
查詢時需要連表來查詢商品的名稱
單據1的商品表中有商品ID字段
單據2的商品表中也有商品ID字段
如果不拉出外鍵的話
當單據1,2都使用商品ID爲3的商品後
刪除此商品後
再查看單據1,2的時候就會查不到商品的名稱

當表很少的時候
有人認爲可以在程序實現的時候來通過寫腳本來保證數據的完整性和一致性
也就是在刪除商品的操作的時候去檢測單據1,2中是否已經使用了商品ID爲3的商品
但是當你寫完腳本之後系統有增加了一個單據3
他也保存商品ID找個字段
如果不拉出外鍵
你還是會出現查不到商品名稱的情況
你總不能每增加一個使用商品ID的字段的單據時就回去修改你檢測商品是否被使用的腳本吧


第二點就是增加ER圖的可讀性
這也同樣是在後臺數據庫表非常多的時候能夠體現出來的
外鍵能夠明確的兩個表之間的關係
例如一個單據的主表和單據的商品的子表
如果兩個表沒有拉出外鍵表明關係,且兩個表的位置在ER圖中很遠
對於一個對這個系統不是非常瞭解的人來說
讓他去理出兩個表之間的關係是很麻煩的
如果你拉出外鍵就算兩個表離的很遠
他也能隨着外鍵找出他們之間的關係來
ER圖的可讀性對於一個剛剛接觸大型系統的新手來說是極爲重要的


當然
外鍵的個數也不是沒有個尺度
因爲外鍵拉的過多會使ER圖極爲混亂(到處都是線)
所以應該掌握合適的尺度才行
必要的外鍵必須要拉出來
如果實在不想因爲外鍵過多而造成ER圖的混亂
可以對基礎數據的刪除用假刪除的辦法
以避免在沒有外鍵約束和檢查的情況下造成數據的不一致性


着急回去吃飯
所以寫的很急
:)))
以後再灌水
:P

該文章轉載自1024k:http://www.1024k.cn/faq/2007/200706/43275.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章