0

我是新來的數據庫設計,並試圖理解使用外鍵的最佳做法。我知道當你有1:m的關係時,我們不必爲關係創建一個關係;相反,我們可以將外鍵添加到關係的m方(對應於1方的主鍵)以保持參照完整性。然而,我的問題是:在其他情況下,我們可以做同樣的事情嗎?當我們有0..1到1或1-1的關係時,我們可以做同樣的事嗎?當參照完整性與計算成本一樣重要時,這種情況的最佳實踐是什麼?基數和外鍵關係

+0

具有外鍵IMPLIES存在關係... 「這是一條記錄,通過這個外鍵,這個記錄的父母」。 –

回答

1

有當我們繪製1三種可能的途徑:1關係關係模型:

  1. 外鍵的方法:選擇一個關係,比如說S-和包括S中的一個 外鍵T的主鍵最好是選擇具有在中的R S的作用總參與實體類型

  2. 合併關係的選項:1的替代映射:1的關係式 可以通過合併兩個實體類型和關係變成了一個 單一關係。當這兩個參與總共爲 時,這可能是適當的。

  3. 交叉引用或關係關係選項:第三替代 是設置爲的交叉引用這兩個關係S的 主鍵和T表示的實體類型目的的第三關係R。

有關詳細信息,你可以看看這個home.iitj.ac.in/~ramana/ch7-mapping-ER-EER-relations.pdf

+0

你能詳細說明「全面參與」是什麼意思嗎? –

+0

「全面參與」意味着該集合中的每個實體都參與該關係。例如。 「每個」員工應該爲至少一個部門工作,但每個部門可能會或可能不會有員工爲其工作。在此實體中,員工將具有與實體部門的關係的總體參與。另請閱讀[http:// stackoverflow。COM /問題/ 19781294 /什麼最差的表示法換總參與-和遞歸關係] – Enigma

0

外鍵約束的限制,而不是引用。一個關係隱式地存在於任何不同的列表示相同的域的地方,並且它們的表可以被連接,有或沒有外鍵。約束只是確保存儲在一列中的值/實體存在於另一列中。無論任何一個關係依賴於另一個關係,它們都適用於任何關係。這裏的典型用例是實體集的子類型。

外鍵約束的主要好處是通過級聯單個語句中的更新/刪除而不必在執行多個更新/刪除操作之前查詢ID來實現的性能增益(減少了通過線路的調用以及開發時間)刪除包含在事務中的語句。更不用說修復時間,如果變化沒有適當傳播。

0

M-to-M關係相當於兩個1:M的關係。我們不能將1邊的主鍵作爲其他外鍵用於此目的,我們使用一個解析M:M的中間實體該實體最終被稱爲「關聯」或相交實體。例如項目和員工之間的AM:M關係,可以分配一個新的midlle實體,以這種方式關係將轉換爲1:M,我們可以分配一個外鍵easyilly