資料庫表設計時應當建立主外來鍵關係

2021-06-21 22:03:08 字數 1314 閱讀 4739

近期在做乙個小專案,討論到到底要不要在資料庫設計時,建立主外來鍵關係。

外來鍵的作用我認為主要有兩個 

乙個是讓資料庫自己通過外來鍵來保證資料的完整性和一致性 

乙個就是能夠增加er圖的可讀性 

我覺得第二點的重要性甚至比第一點還高

有些人認為外來鍵的建立會給開發時運算元據庫帶來很大的麻煩 

因為資料庫有時候會由於沒有通過外來鍵的檢測而使得開發人員刪除,插入操作失敗 

他們覺得這樣很麻煩 

其實這正式外來鍵在強制你保證資料的完整性和一致性 

這是好事兒

應該說如果系統比較小 

外來鍵的作用可能不會很明顯 

如果你的系統後台有幾百個表的話 

沒有外來鍵的資料庫設計是我無法想象的

有乙個基礎資料的表:商品 

其他表都儲存商品id 

查詢時需要連表來查詢商品的名稱 

單據1的商品表中有商品id欄位 

單據2的商品表中也有商品id欄位 

如果不拉出外鍵的話 

當單據1,2都使用商品id為3的商品後 

刪除此商品後 

再檢視單據1,2的時候就會查不到商品的名稱

當表很少的時候 

有人認為可以在程式實現的時候來通過寫指令碼來保證資料的完整性和一致性 

也就是在刪除商品的操作的時候去檢測單據1,2中是否已經使用了商品id為3的商品 

但是當你寫完指令碼之後系統有增加了乙個單據3 

他也儲存商品id找個字段 

如果不拉出外鍵 

你還是會出現查不到商品名稱的情況 

你總不能每增加乙個使用商品id的字段的單據時就回去修改你檢測商品是否被使用的指令碼吧

第二點就是增加er圖的可讀性 

這也同樣是在後台資料庫表非常多的時候能夠體現出來的 

外來鍵能夠明確的兩個表之間的關係 

例如乙個單據的主表和單據的商品的子表 

如果兩個表沒有拉出外鍵表明關係,且兩個表的位置在er圖中很遠 

對於乙個對這個系統不是非常了解的人來說 

讓他去理出兩個表之間的關係是很麻煩的 

如果你拉出外鍵就算兩個表離的很遠 

他也能隨著外來鍵找出他們之間的關係來 

er圖的可讀性對於乙個剛剛接觸大型系統的新手來說是極為重要的

當然 外來鍵的個數也不是沒有個尺度 

因為外來鍵拉的過多會使er圖極為混亂(到處都是線) 

所以應該掌握合適的尺度才行 

必要的外來鍵必須要拉出來 

如果實在不想因為外來鍵過多而造成er圖的混亂 

可以對基礎資料的刪除用假刪除的辦法 

以避免在沒有外來鍵約束和檢查的情況下造成資料的不一致性

檢視oracle資料庫所有表的主外來鍵的關係

在日常資料維護中,經常刪除資料,要是這些資料所在的表有外來鍵關聯,又不設定成級聯刪除的話,就需要先清空子表的相關資料了。要找出所有的主外來鍵的關聯是乙個比較頭疼的事情,下面給出乙個例子,可以得到某使用者下的所有主外來鍵關係 select pk table 主鍵表,pk col 主鍵表id,fk ta...

資料庫的主外來鍵關係

資料庫中有三種主外來鍵關係圖 1 一對一關係 2 一對多關係 兩種 總圖 注意 在資料庫中如果某列是 fk,那麼這列所在的表就意味著多。另外的表就是一。如下圖 四張表的結構展示了上面所有的三種關係圖 建立的指令碼 oracle create table pkfk b pkb varchar2 10 ...

資料庫是否要設定主外來鍵

在設計資料庫時到底要不要設計主外來鍵?大多數時,否定主外來鍵的考慮角度一般是效率問題,但是在考慮到效率的同時是否考慮到了資料一致性呢?在保證資料一致性的前提條件下,才要去考慮效率問題 資料存的都不準確,就先不要考慮效率的問題了,當然有時候為了提高效率會人為增加一些冗餘資料 也即在考慮效率的同時要考慮...