2011-06-16 71 views
0

我正在處理數據庫設計不佳的問題。大多數表格確實有PK,但FK不存在。這使得難以可視化表格之間的關係。這讓我想知道,爲什麼SQL讓我們連接沒有約束的表?如果我打算用EmployeeId加入表B的表B,那麼膝關節反應不應該設置FK嗎?爲什麼我們可以加入非約束?

+1

一個_killed開發人員的膝反動反應,是的。 – SolarBear 2011-06-16 18:56:40

回答

3

因爲約束條件是可選

我同意不使用約束通常是一個壞主意,但總的來說,有一個有創建一個有效的數據庫設計的約束。

某些應用程序要求不使用任何約束來強制刪除仍具有審計追蹤表(某些報告將加入)的「當前」記錄。

在這種情況下,無法加入會妨礙靈活性和使用數據庫的能力。

這當然拋開許多數據庫是由不知道或關心參照完整性的人(業務或開發人員)創建的事實。

+0

+1感謝Oded,這是有道理的。 – 2011-06-16 19:04:06

+0

@ P.Brian.Mackey - 想想如果您執行這樣的規則,您會失去的靈活性。 – Oded 2011-06-16 19:04:52

0

在某些情況下,你可能會加入日期等,你不想設置FK或它可能是不可能的。它的決定,如果你想定義FK或不

0

SQL的哲學是,寫這個查詢的人只需要知道表和列;他們不需要知道任何索引或表格關係。該數據庫應該足夠聰明,以瞭解如何高效地執行查詢。

對於即席查詢,這是非常好的。

0

由於每次插入記錄時外鍵都會影響性能,因此需要確保約束沒有被違反。在高性能系統中,數據庫通常在開發和QA環境中具有FK,但在生產中不會加速插入。如果執行大量插入操作並且數據庫表很大,則性能差異可能很大。

這只是SQL允許您無限制地加入的衆多原因之一。

+0

您很可能仍然會在生產中使用FK來保護您的數據*。如果你有十億行表格,那麼你需要仔細考慮每個案例的評估情況:但這不是你在開始時要做的。 – gbn 2011-06-16 18:58:47

0

你可能不直接加入相關的表

  • Numbers表格
  • 交叉連接
  • 表祖父母,繞過父表
  • ...
0

哇!你甚至可以加入沒什麼!

相關問題