2010-11-24 66 views
2

我正在使用MySQL Workbench來建模我的數據庫。在其中,我可以選擇通過識別外鍵等來創建關係。這有什麼意義?我能夠在沒有這些關係的情況下運行我的查詢。數據庫設計:識別外鍵有什麼意義?

我的表確實有一個外鍵的實際列,我只是沒有在MySQL Workbench中定義它們。意思是,我沒有連接表格的那些線條。

回答

4

外鍵做了一些事情。最明顯的是,它們爲您提供內置的數據完整性,正如Macy Abbey所述。

有趣的是,您最喜愛的RDBMS的查詢優化器也可以使用像外鍵這樣的約束來做額外的優化。基本上,數據庫可以確定它是否能比你更好地編寫查詢。外鍵的存在讓數據庫可以做出這些假設。你可以在Do Foreign Key Constraints Help Performance?找到一個很好的例子。儘管該鏈接是特定於SQL Server的,但無論數據庫引擎如何,其原理都是相同的。

+0

有趣的耶利米,根據我上面的帖子,我認爲他們只會降低性能。謝謝! +1 – 2010-11-24 01:16:52

3

外鍵對確保數據完整性很有用。如果您定義它們,數據庫本身將確保無效的外鍵值將不被允許插入到表中。

+0

另外,請注意,使用外鍵會引入一些開銷(減慢操作)。 – 2010-11-24 01:02:15

0

您可以在沒有外鍵的情況下爲您的數據庫建模。但是,始終建議外鍵維護數據一致性。如果您沒有在數據庫中使用外鍵,則必須手動更改查詢並跟蹤外國人的身份。然而,如果你確實指定了外鍵,那麼不僅對你更容易,對sql也更容易映射你的數據。

1

如果您不知道數據完整性約束以及它們在數據庫設計中扮演的重要角色,那麼我建議您在開始設計數據庫之前先學習一門課程或學習一些書籍。聘請一些專業人員來幫助您目前的項目可能是一個好主意。

2

如果你沒有外鍵,你沒有關係。因此您沒有關係數據庫;它是一桶魚,沒有完整性,你不會擁有關係數據庫的力量(耶利米的答案只是許多的一個項目)。

2

這裏是你使用外鍵關係獲得一些好處:

  1. 參照完整性(當然)
  2. 優化器可以在某些情況下產生更好的執行計劃
  3. 工具支持(元數據遷移,分析等)

我首先使用可用的每種類型的約束。 然後,如果它顯示損害性能,我開始刪除的東西。這是一個很好的策略,讓你在晚上睡得好。