我是新來的數據庫設計,並試圖理解使用外鍵的最佳做法。我知道當你有1:m的關係時,我們不必爲關係創建一個關係;相反,我們可以將外鍵添加到關係的m方(對應於1方的主鍵)以保持參照完整性。然而,我的問題是:在其他情況下,我們可以做同樣的事情嗎?當我們有0..1到1或1-1的關係時,我們可以做同樣的事嗎?當參照完整性與計算成本一樣重要時,這種情況的最佳實踐是什麼?基數和外鍵關係
基數和外鍵關係
回答
有當我們繪製1三種可能的途徑:1關係關係模型:
外鍵的方法:選擇一個關係,比如說S-和包括S中的一個 外鍵T的主鍵最好是選擇具有在中的R S的作用總參與實體類型
合併關係的選項:1的替代映射:1的關係式 可以通過合併兩個實體類型和關係變成了一個 單一關係。當這兩個參與總共爲 時,這可能是適當的。
交叉引用或關係關係選項:第三替代 是設置爲的交叉引用這兩個關係S的 主鍵和T表示的實體類型目的的第三關係R。
有關詳細信息,你可以看看這個home.iitj.ac.in/~ramana/ch7-mapping-ER-EER-relations.pdf
你能詳細說明「全面參與」是什麼意思嗎? –
「全面參與」意味着該集合中的每個實體都參與該關係。例如。 「每個」員工應該爲至少一個部門工作,但每個部門可能會或可能不會有員工爲其工作。在此實體中,員工將具有與實體部門的關係的總體參與。另請閱讀[http:// stackoverflow。COM /問題/ 19781294 /什麼最差的表示法換總參與-和遞歸關係] – Enigma
外鍵約束的限制,而不是引用。一個關係隱式地存在於任何不同的列表示相同的域的地方,並且它們的表可以被連接,有或沒有外鍵。約束只是確保存儲在一列中的值/實體存在於另一列中。無論任何一個關係依賴於另一個關係,它們都適用於任何關係。這裏的典型用例是實體集的子類型。
外鍵約束的主要好處是通過級聯單個語句中的更新/刪除而不必在執行多個更新/刪除操作之前查詢ID來實現的性能增益(減少了通過線路的調用以及開發時間)刪除包含在事務中的語句。更不用說修復時間,如果變化沒有適當傳播。
M-to-M關係相當於兩個1:M的關係。我們不能將1邊的主鍵作爲其他外鍵用於此目的,我們使用一個解析M:M的中間實體該實體最終被稱爲「關聯」或相交實體。例如項目和員工之間的AM:M關係,可以分配一個新的midlle實體,以這種方式關係將轉換爲1:M,我們可以分配一個外鍵easyilly
- 1. 加入外鍵基數(關係代數)
- 2. 外鍵和基本關係表
- 3. 鑰匙和外鍵關係
- 4. 外鍵關係
- 5. 加入由主鍵和外鍵關係
- 6. 創建主鍵和外鍵關係
- 7. SQL外鍵關係
- 8. 瞭解Mongoose中的關係和外鍵
- 9. 外鍵關係和「屬於很多」
- 10. Django:外鍵和模型的關係
- 11. 的衝突關係和外鍵1-1
- 12. 在DB中建立關係和外鍵
- 13. 外鍵和n到n的關係
- 14. EF簡單關係和外鍵
- 15. MSSQL外鍵關係和空值
- 16. 有關數據庫關係和外鍵的最佳做法
- 17. MySQL關係數據庫外鍵
- 18. Rails中的外鍵關係
- 19. 關係(外鍵)CakePHP的
- 20. 外鍵,關係問題
- 21. Mysql表關係/外鍵?
- 22. 嵌套外鍵關係中的和和計數?
- 23. MySQL外鍵關係vs mysql_insert_id關聯表
- 24. 正確的模型關係,對cakephp2主鍵和外鍵查詢
- 25. JPA:與外鍵,多個主鍵和多對一關係問題
- 26. django模型中的外鍵和主鍵關係
- 27. 有關多個一對多關係和外鍵的數據庫設計問題
- 28. 聚集主鍵和關係
- 29. N:M關係可空的外鍵vs關係表
- 30. 帶條件的外鍵關係
具有外鍵IMPLIES存在關係... 「這是一條記錄,通過這個外鍵,這個記錄的父母」。 –