2011-03-04 58 views
3

我總是在數據庫文章或教程中看到......或者在他們使用數據庫的任何地方,他們都會使用一種叫做關係的東西。我立即想起那些帶有字段名稱列表的小盒子,以及一個字段與另一個字段中的另一個字段連接的行。爲什麼數據庫中存在「關係」而不是僅僅使用SQL的連接?

我不是數據庫專家(如你可能知道),但有點我用,我從來沒有需要的關係。他們似乎總是多餘的,因爲我總是可以使用JOIN來實現我認爲他們的目的。它們是多餘的,還是有什麼你可以用JOIN做不到的關係?或者我只是在說胡話?

回答

5

的關係不只是加入了SQL查詢。關係提供了許多好處:

  • 數據完整性
  • 查詢方便
  • 第三方工具集成優勢
  • 「自我描述」的數據模型與數據庫
  • 工作未來的DBA /開發者

數據完整性: 關係有助於確保您的「訂單記錄」不能存在例如,有一個「客戶記錄」。通過定義客戶和訂單之間的關係,數據庫將確保不會發生這種情況。這有助於確保您的數據庫不會成爲一大堆垃圾數據

查詢便利性: 關係可以使查詢變得更輕鬆。由於客戶與訂單之間的關係,刪除客戶記錄可以自動同時刪除客戶的訂單

第三方工具集成優勢 許多第三方工具(O/R工具浮現在腦海中)依賴於關係爲了正常工作

真的,這個名單可以繼續下去...你應該使用他們,他們是非常有益的。即使你今天沒有看到價值,但如果你正在研究一個數據庫項目,並且這個數據庫項目會在很長一段時間內持續增長,那麼從一開始就建立關係將會對你有好處。

我認爲他們對於小型項目/一次性數據模型並不是那麼重要......但對於任何實質內容,您最好使用它們。

+1

另一個很好的答案,雖然我不同意數據庫中的關係對於小項目和一次性不重要的想法。小型項目和一次性項目往往最終被制度化,並超出其預期用途(特別是在企業或中小型企業環境中)。然後,我們開始希望有人從一開始就建立關係並建立關係。 。 。 – XIVSolutions 2011-03-04 06:27:19

+0

好點。我看到許多有動機的企業(非技術人員)創造了自己的工具或流程,以協助他們從事某些方面的工作。有時候這些工具會增加勢頭,然後其他業務人員開始使用它們。這些類型的工具通常使用Access,Excel等構建,通常是軟件開發人員存在的令人討厭的障礙。儘管如此,我不會勸阻商務人士使用任何他們熟悉的方法來做這些類型的事情,因爲這個過程鼓勵創造力並且可以激發更大的公司改進 – 2011-03-04 06:36:02

+0

與其他任何方法一樣,數據,明確定義關係也可以幫助查詢優化器。 – 2011-03-06 05:34:06

2

數據庫背後的理論基礎是所謂的Relational Algebra。關係不是數據庫特定的術語,它來源於關係代數。

連接是一種關係,可以有不同的關係。請參閱this wiki page以更多地瞭解關係究竟是什麼。

+0

我剛剛發現關係代數,並發現它很有趣。 – XIVSolutions 2011-03-04 06:28:34

2

當你正在閱讀的關係它所指的可能是外鍵我假設。如果這是真的,關係和聯合對於同樣的問題並不是不同的解決方案。他們是完成不同事情的兩種工具,它們通常一起使用。

聯接,因爲它聽起來像你知道的是一個選擇查詢,讓你從更多然後1個表中獲取行的一部分。

關係是定義規則的數據庫結構的一部分。例如,如果您有城市表和國家/地區表,則應將城市表中每行的關係指向國家/地區表中的某一行。這將確保數據的完整性,並且不允許城市行指向不存在的國家/地區行。

問「爲什麼在可以使用連接時使用關係?」對我來說,聽起來像在問'爲什麼變量有類型,但我仍然可以讀取它們?「。

1

在RELATIONAL數據庫中建立的關係是關係數據庫模型的核心,在數據庫中,我們爲實體建模。使用實體之間的關係來保持數據完整性,並確保記錄的組織正確關係還可以在相關表之間創建索引

如果您沒有使用關係,和/或建模基於離散關係實體,那麼你並沒有利用關係數據庫的真正力量,是的,你可以使查詢工作,是的,你可以讓Db做一些有用的工作,但是你可以確保每個員工記錄都正確相關到合適的公司?你能確保該公司只有一個記錄,並且該公司的所有員工都與該記錄相關嗎?

如果不圍繞實體和它們之間的關係設計數據庫結構,那麼不妨使用電子表格或一個大的平坦表格。關係和規範化構成了現代關係數據庫的基礎。

+1

*關係*和_不「關係」是關係數據庫模型的定義特徵。關係與參照完整性規則無關。 – sqlvogel 2011-03-04 09:18:49

4

RELATION是一組域的笛卡爾積的一個子集(http://mathworld.wolfram.com/Relation.html)。在日常用語中,一個關係(或更具體地說是一個關係變量)是大多數人稱爲表格的數據結構(儘管SQL中的表格不一定限定爲關係)。

關係是關係數據庫模型的基礎。

關係是不同的。關係是一種語義上的「事物之間的關聯」。

我想你實際上是在詢問引用完整性約束(外鍵)。外鍵是數據完整性規則,可通過防止將不一致的數據添加到數據庫來確保數據庫的一致性。不要將外鍵與關係混淆,因爲它們是非常不同的東西。

+0

你能插入這個作爲我的問題的答案[「關係」與「關係」在RDBMS/SQL?](http://stackoverflow.com/questions/5208295/relation-versus-relationship-in-rdbms-sql) – 2011-03-06 10:42:37

0

當Ed Codd開發了用於大規模數據庫的關係數據模型時,他將他的設計建立在關係微積分和代數的數學上。這種數學的結果可以用數學的精確度來預測,Ed Codd能夠以接近數學的精度預測關係數據庫在第一個數據庫建立之前會如何表現。

在數學中,一個關係是一個數學抽象。這是另一個響應者說的,它是兩個或更多域的笛卡爾積的一個子集。如果這對你來說很清楚,也許你不是數學家。

不管。一位優秀的計算機科學家可以很容易地理解SQL表,並且可以識別和利用SQL JOIN的強大功能。這種理解將取代對多種目的關係的數學理解。一個SQL表大致實現了數學關係。如果您對桌子設計非常小心,可以將「大致」轉換爲「完全」。

相關問題