2011-06-22 27 views
3

我是數據庫的新手,並且正在探索SQL vs noSQL。什麼樣的數據是高度關係的

什麼樣的數據是高度相關的,從SQL中受益以及哪種數據不適用?

請提供一些示例。

+0

[爲什麼我應該使用基於文檔的數據庫而不是關係數據庫?](http://stackoverflow.com/questions/441441/why-should-i-use-document-based-database-instead-of - 關係數據庫) –

+1

高度關係的東西:記帳(總賬),庫存和訂單/銷售系統,幾乎所有現在存在於「業務線」應用程序保護下的東西,真的...... –

+0

菜單與父母的孩子排名和老闆 - 員工排名通常被認爲是分層次的,不適合和更難以在關係數據庫中使用。 – mikeY

回答

2

關係數據裝配到一個relation的定義:

  • 的報頭定義的有限集合的列。
  • 每列有一個名稱和一個數據類型
  • 數據類型是一組命名的有限的不同值。
  • 關係的給定行中的每列包含一個相應列的相應數據類型的值。
  • 行沒有明確的順序。
  • 列沒有隱式順序。
  • 不允許重複的行。

這些條件是所有Normal Forms關係的先決條件。也就是說,即使是第一範式,表格也沒有資格,除非它是關係。如果表格不是關係型的,SQL中的許多操作都無法正常工作。

更實用,關係表必須具有相同的屬性上的每一行,由相同的名稱,並且必須在一個或多個列的主鍵定義,以便您可以單獨引用每一行。

的NoSQL實際上是一個營銷術語,用於品牌,促進一些數據管理產品。這不是計算機科學術語。

但如果你的意思是非關係,那麼你就可以看到一個非關係數據存儲被允許打破一些規則上面:一個給定的集合中

  • 兩個條目(行)可以是重複的。
  • 這些字段可能因條目而異。不同的號碼,不同的名稱,不同的數據類型。
  • 給定字段可以在兩個條目中包含相同的值,但由於某種原因(例如,取決於另一個字段中的值),該值被認爲是不同的。
  • 條目的順序很重要(例如,假設條目按時間順序排列)。
  • 字段的順序是重要的(例如,第一個字段被假定爲某種關鍵字)。

但是通過打破這些規則,您失去了關係操作工作的基礎。

+0

「一個頭文件定義了一個有限的列集合」:我想你的意思是說:「A *頭文件*定義了一組有限的屬性*」。同樣,您使用SQL或其他非正式術語來表達「關係」的含義,說實話,我認爲它不起作用 - 我認爲只是一個正式定義的鏈接就足夠了;) – onedaywhen

+0

@onedaywhen:謝謝,我會盡我所能地使用精確的術語,但StackOverflow文章並不是向人們介紹正式定義所需的所有術語的地方。我會做出一些犧牲,並使用非正式的術語,這些術語會讓讀者更加熟悉。爲了更全面地描述一個關係的意義,我推薦C.J.日期的「SQL和關係理論」。 –

2

你的問題似乎揹負着一些誤解。 關係與關係數據庫一樣,是指一種數據模型 - 用於數據的表示系統。 任何如果您的數據庫管理系統支持該類型的信息,則可以以關係表示由事實(命題)組成的信息。任何信息的內在質量都不會使其更適合於RDBMS。

SQL是一種(嚴格無關係的)數據庫語言。

NOSQL是一個鬆散的術語,可以應用於任何不使用SQL或擴展SQL功能的數據庫系統。 NOSQL和關係型是而不是互斥概念。 NOSQL並不一定意味着「非關係」,它只是意味着「不是SQL」。

+0

那又如何? Mark問及什麼數據適用於**以及SQL;而他並沒有提出流行的「NoSQL是一件事」的誤解。 – Tobu

+0

他問:「什麼樣的數據*是高度關係的」,這正是我試圖回答的。 – sqlvogel

+0

+1我通過「表示」假設您指的是結構和運算符;) – onedaywhen

相關問題