1. 程式人生 > >資料庫該不該使用外來鍵

資料庫該不該使用外來鍵

問題引入

以前的意識裡都是需要建立外來鍵,外來鍵能起到約束作用,能保證資料的完整性和一直性,比如如果沒有外來鍵約束,你自己程式控制又不到位把基本資訊都刪除了,詳情卻存在,人的基本資訊不存在了,工資資訊裡卻存在這個人,想要找這個人究竟是誰都找不到。

今天看到原來的外來鍵都被去掉了,問了下組長,結果回答就兩個字“效率”,雖然感覺很詫異,但是畢竟人家比我有經驗並沒有去爭論,下面將站在兩個對立面去贊成和反對建立外來鍵。

建與不建

注意這裡說的建與不建不是說不要外來鍵,儘可能把表弄成一張表,而是說人為控制還是資料庫使用本身外來鍵約束。

利用資料庫保證資料庫完整性和一致性;自己用程式控制怕有疏忽,外來鍵多起來麻煩;同一個資料庫可能給不同應用用,但是開發資料庫的人並不是開發應用的人,開發應用的人對資料庫不夠了解,就算開發資料庫的人去開發應用時間長也會忘記;

不建

導資料入庫要有先後順序,而且也會檢查外來鍵是否存在,十分消耗時間;刪除資料也是;還有就是可能資料建立的約束可能效率不夠高,想自己建立高效的約束。

總結

我自己覺得完整性和一致性肯定是需要保證的,不然會出問題,也會影響效率,需要看你專案又多大。

小型專案就使用資料庫本身的,效率追求不高,也沒必要花時間自己建立約束,時間代價比較大。
較大型專案可能資料約束本身效率不夠好,滿足不了大專案對效率的要求,又有人力物力去支援建立自己的高效約束。
還有較大專案初期,想早點上線,效率要求沒有那麼大,沒時間去建立高效率約束,那麼就用資料庫本身的約束,專案初期要求穩定一些比較好。