Database-Theory

什麼是“數據庫”?

  • January 27, 2018

在這個問題上有很多討論:大型搜尋引擎使用哪些數據庫技術?

太多的討論讓我感到困惑。那麼…到底什麼是數據庫?只有關係數據庫是“數據庫”嗎?物件導向的數據庫是“數據庫”嗎?是否有任何系統允許我儲存和檢索資訊(如地圖、列表等)數據庫?

還是數據庫必須儲存/檢索資訊並且還具有一些管理功能,例如使用者和權限?dBase III 是否加上一個數據庫,因為它不是真正的關係?

這是一個很好的問題,也是一組很好的答案。我認為討論中缺少的一件事是深入研究數據庫和數據庫管理系統(DBMS)之間區別的答案。我喜歡 Shark 從 dictionary.com 提供的數據庫定義。我認為它確實表明了區分數據庫和 DBMS 的必要性。該數據庫是“為方便訪問而組織的相關數據的綜合集合”。該定義的第二部分“通常在電腦中”是區別所在。如果它儲存在電腦中,它可能會或可能不會儲存在 DBMS 中。它可以儲存在 OS 文件系統中。它可能儲存在專有文件系統中。因此,我同意 FrustratedWithFormsDesigner 的觀點,即卡片目錄是一個“數據庫” (也許——它是全面的和相關的嗎?稍後會詳細介紹)。它恰好儲存在文件櫃中。在當今世界上,“為方便訪問而組織的最全面的相關數據集合”儲存在電腦上,所以我不同意 Shark 很遺憾 Dictionary.com 添加了該部分。我認為這是絕對正確的——作為“數據庫”的定義。

那麼我們如何定義 DBMS?我回到dictionary.com 發現了這個

“一套程序,通常管理大量結構化的持久數據集,為許多使用者提供臨時查詢工具。它們廣泛用於業務應用程序。”

定義繼續並且很長。它描述了 DBMS 提供的常見特性,例如安全性、數據完整性、事務管理、並發控制,以及最重要的 - 數據獨立性。DBMS 提供從物理儲存方式中抽像出來的數據的外部視圖。

使用這個定義,我認為 DBMS 必須提供一個數據模型是很清楚的,這是如何組織數據以呈現給使用者的。三種常見模型是分層 (IMS)、網路 (IDMS) 和關係模型(DB2、Oracle、SQL-Server 等)。還有OO模型(OODBMS)。今天只有關係模型具有廣泛的適用性。其他模型仍在使用中,但僅在特定情況下使用。DBMS 還必須提供提到的其他功能。我將這些統稱為數據管理特性或功能。

因此,提供數據管理功能的軟體產品是 DBMS’,而不提供這些功能的產品不是DBMS’。NoSQL 產品不是DBMS。這並不是說它們沒有用,也不是說他們不儲存“數據庫”。我喜歡認為 DBMS’,正如定義所說,解決了與會計、工資單、計費、客戶關係管理、銷售等業務應用程序相關的一類問題。NoSQL 產品雖然不是 DBMS’,但非常適合解決與傳統業務應用程序無關但由於當今計算技術能夠處理的大量儲存和頻寬而存在的一類問題。這些是網際網路搜尋、線上拍賣、推特和臉書等應用程序。DBMS 不適合解決這些問題,因為 DBMS 包含數據管理功能,雖然這些功能對於業務應用程序來說是絕對必要的,但對於解決 Craig 的儲存和檢索沒有用處。s 列表廣告或 twitter 提要(通常無論如何 - 這是另一次討論 :-))。這些問題需要大規模擴展和極快的響應,而 DBMS 的功能膨脹,並不適合。

數據專業人員需要了解所有這些用於儲存數據的工具以及它們適合解決的問題類別,以便為工作選擇合適的工具,就像總承包商必須知道他或她的哪些建築工具是適合這項工作的工具。沒有工具本身是好是壞。如果它非常適合解決一個重要問題,那就太好了。

最後,我將指出數據庫和 DBMS 定義中的另外兩個關鍵區別,這些區別可能在迄今為止的討論中被忽略。數據庫的定義包括“相關數據的綜合收集”。DBMS 的定義包括“管理大​​型結構化最好使用 MS Access 或其他一些關係 DBMS。因此,也許卡片目錄畢竟不是一個數據庫,因為它雖然全面(它記錄了圖書館中所有書籍),但它並不相關,因為它只有關於書籍的資訊,而不是關於作者、出版商的完整相關資訊,等等。

其次,DBMS 擅長儲存“結構化”數據。它完全基於具有結構化類型的離散數據元素的定義模式。NoSQL 產品,比如沒有模式的鍵值儲存,擅長儲存非結構化數據。因此,該 NoSQL 產品不符合 DBMS 的定義。但是,如果您要解決的問題是非結構化數據的儲存(在 DBMS 最初開發時我們甚至沒有嘗試這樣做),並且您不需要獨立於您將寫入的應用程序的數據管理功能NoSQL 產品是處理非結構化數據的完美工具。

我希望這個答案能為此處發布的其他出色答案增加價值。我期待任何其他人可能提出的任何評論和討論點,這將有助於我們所有人拓寬我們對解決數據相關問題的數據庫和技術類別的理解。

引用自:https://dba.stackexchange.com/questions/18700