數據庫到底用不用外鍵

最近工做中用到powerdesigner ,前期須要經過powerdesigner生成表結構,後來因爲負責人員不在,不少表結構的添加沒有同步到powerdesigner,一個個覈對表結構着實麻煩,因而想到到反向生成模型,但數據庫沒有外鍵關係致使生成的模型也沒有外鍵。對項目中不用外鍵感到好奇因而問了相關人員緣由,並簡單瞭解了外鍵的特色和使用場景。爲了進一步瞭解,在網上找了相關文章如下爲轉載的原文連接: 
http://www.cnblogs.com/pengxl/archive/2010/06/11/1756346.htmlhtml

今天聽了一個企業技術總監的宣講,結果據說在他開發系統的過程當中,都沒有用到外鍵,這讓我很驚訝,趕忙上網搜索了一些資料看了看,終於明白了不用外鍵的緣由。mysql

這是一篇關因而否使用外鍵的討論,講的頗有道理: 
對於主/外鍵/索引來講,在一些開發團隊中被認爲是處理數據庫關係的利器,也被某些開發團隊認爲是處理某些具體業務的魔鬼,您的觀點呢?在實際應用中您會採起哪一種方式? 
你們共同觀點:主鍵和索引是不可少的,不只能夠優化數據檢索速度,開發人員還省不其它的工做, 
矛盾焦點:數據庫設計是否須要外鍵。這裏有兩個問題:一個是如何保證數據庫數據的完整性和一致性;二是第一條對性能的影響。 
正方觀點: 
1,由數據庫自身保證數據一致性,完整性,更可靠,由於程序很難100%保證數據的完整性,而用外鍵即便在數據庫服務器當機或者出現其餘問題的時候,也可以最大限度的保證數據的一致性和完整性。eg:數據庫和應用是一對多的關係,A應用會維護他那部分數據的完整性,系統一變大時,增長了B應用,A和B兩個應用也許是不一樣的開發團隊來作的。他們如何協調保證數據的完整性,並且一年之後若是又增長了C應用呢? 
2,有主外鍵的數據庫設計能夠增長ER圖的可讀性,這點在數據庫設計時很是重要。 
3,外鍵在必定程度上說明的業務邏輯,會使設計周到具體全面。sql

反方觀點: 
1,能夠用觸發器或應用程序保證數據的完整性 
2,過度強調或者說使用主鍵/外鍵會平添開發難度,致使表過多等問題 
3,不用外鍵時數據管理簡單,操做方便,性能高(導入導出等操做,在insert, update, delete 數據的時候更快)eg:在海量的數據庫中想都不要去想外鍵,試想,一個程序天天要insert數百萬條記錄,當存在外鍵約束的時候,每次要去掃描此記錄是否合格,通常還不止一個字段有外鍵,這樣掃描的數量是成級數的增加!個人一個程序入庫在3個小時作完,若是加上外鍵,須要28個小時! 
結論:1,在大型系統中(性能要求不高,安全要求高),使用外鍵;在大型系統中(性能要求高,安全本身控制),不用外鍵;小系統隨便,最好用外鍵。2,用外鍵要適當,不能過度追求3,不用外鍵而用程序控制數據一致性和完整性時,應該寫一層來保證,而後個個應用經過這個層來訪問數據庫。數據庫

相關文章
相關標籤/搜索