數據庫概論緒論筆記【整理版】

17955338-a31ee9a7c4fd72b1
image

(一) 引言

當你登錄你的QQ賬號和別人吹水的時候,當你期末交作業去度娘複製的時候,當你在工作中登錄一些網站的時候,再比如當你查看自己幾乎沒有什麼餘額的銀行卡的時候(捂臉),或許自己也沒注意,(非需要,大部分人也不想注意哈哈哈)我們一直都在以某種方式與數據庫打交道,或許你是一個開發人員,也或許你只是一個普通的用戶,這一篇是我去年就一直想寫的文章,但是也沒個合適的機會,這一段時間加班加點寫出來,同時最近想要更新的一系列文章,主要針對數據庫理論知識,後面我把去年寫過的 MySQL 文章也會對應的重新整理一遍

注:這篇文章重點還是偏理論,比較適合數據庫的新手,或者具有一定實操基礎的小夥伴,

17955338-46dbed2b4f41ad05
image

既然你都打開這篇文章了,那你就註定不是一個村民,這一局我們跳 Java 程序員!

開發學習中,想滿足一些需求,與數據打交道這可太頻繁了,如何存儲這些數據就是你考慮的問題了,當然不考慮性能,管理、安全等等,你的選擇可就多了,存個 txt,存個xml,甚至還可以存個excel等等,有位新手朋友曾經問過我這樣一個問題 “他在學習IO的一些技術的時候,常常會簡單的保存一些數據到 .txt 文件中,爲什麼還需要數據庫呢?”,這樣的一些小Demo,大家在Java基礎的學習中應該都是做過的,那麼我們下面就從這個問題講起~

(二) 爲什麼使用數據庫?

(1) 查詢速度

假定我們將數據全部存儲在一個普通文件中(data.txt)_(以逗號間隔)

......
"Eminem",male,1972,"USA"
"Rihanna",female,1988,"Barbados"
"Taylor Swift",1989,female,"USA"
"Aavril Lavigne",1984,female,"Canada"
......

如果在我們的數據極爲龐大的情況下,我們需要查詢其中的一些數據,例如,查詢Eminem的國籍,我們一般會使用遍歷,但是毫無疑問,這個響應時間會變得極其緩慢,但是使用數據庫後,它所提供的一些索引技術等就可以解決這樣的問題

(2) 數據完整有效

"Rihanna",female,1988,"Barbados"
"Rihanna",female,1995,"USA"

如果數據中出現了重名的情況,又如何判斷是不是同一個人呢?

如果data.txt文件中的數據被錯誤的修改,例如出生年份被修改爲其他類型字符串這種無效表達怎麼辦?

或許你可以在程序中寫一些邏輯判斷語句進而篩選處理這些問題,但是仍舊在數據較爲龐大的情況下,會出現各種各樣的問題,增加了開發者的開發難度,而數據庫本身就制定了一些約束,從而保證了數據的完整且,有效,從而使開發者只需要更加註重於程序本身的設計,而不用花費過多的時間去處理數據上的一些細節問題

(3) 數據共享

常用來簡單存儲數據的 txt/excel 等均屬於單一文件,並且都是無法共享的,只支持當前用戶使用並且修改

數據庫允許用戶共享,不同的用戶可以同時存取數據庫中的數據,用戶也可以用各種方式通過接口使用數據庫,並提供數據共享

(4) 數據的安全性

在我們前者中,數據的修改是很隨意的
但是在實際開發中,我們有時候需要面臨,多個用戶檢索、修改同一文件中的數據,或者在併發情況下,寫同一文件或者記錄,而數據庫基於鎖等的一些技術便可以幫助我們解決這些問題

(5) 故障恢復

由於邏輯或者物理上的錯誤,導致了系統的錯誤操作,從而使得數據被破壞,如何快速恢復數據,我們上面的單一文件系統顯然無法幫助我們解決問題,而數據庫卻有相關機制去彌補、處理相關問題

上面我們僅僅從幾個常見的點分析了爲什麼使用數據庫,當然遠遠不止這些,所以總的來說就是數據庫其特殊的存儲以及管理方式,既提高了效率,也極大的減少了開發人員的負擔

總結一下:數據庫 em... 是個好東西!

17955338-33aee04988a33b76
image

(三) 數據庫系統概述

(1) 四個基本概念

A:數據(Data)

數據是信息的表現形式和載體,同樣也是數據庫中存儲的基本對象

數據的定義:描述事物的符號記錄

數據的種類:文本、圖形、圖像、音頻、視頻、學生的檔案記錄、貨物的運輸情況等

數據的語義:數據的含義稱爲數據的語義,數據與其語義是不可分的,這同樣呼應了前面所說:“ 數據是信息的表現形式和載體 ”

B:數據庫(Database)

定義:數據庫(Database,簡稱DB)是長期儲存在計算機內、有組織的、統一管理的、可共享的大量相關數據的集合

簡單點說:數據庫就是一個以某種有組織的方式存儲的數據集合(理解爲數據的倉庫也可以),並且能爲各種用戶共享

特別特別要注意一點:例如 MySQL 、Oracle 等數據庫軟件不能被稱作數據庫,他們確切的叫法是 DBMS(數據庫管理系統),當然了我們口語一般都習慣了,叫XXX數據庫,從理論上來說,是不準確的,自行有個區分的概念就好了,怎麼叫就你哈

C:數據庫管理系統(DBMS)

17955338-32ecdf11b1d3a527
image

朋友們,這幾個貨理論上叫做,數據庫管理系統,要和數據庫的概念區別好了喔

定義:它是位於用戶與操作系統之間的一層數據管理軟件,用於建立、使用和維護數據庫,簡稱 DBMS(Database Management System)

看一下他的功能:

① 數據庫定義功能

  • DBMS提供數據定義語言(Data Definition Language,DDL)來對數據庫中的數據對象進行定義,指定其結構和約束等。

② 數據操縱功能

  • DBMS提供數據操縱語言(Data manipulation Language,DML)來實現對數據庫的基本操作,包括查詢數據庫以獲得所需數據、更新數據庫以反映現實世界的變化等

③ 數據的組織存儲管理

  • 分類組織、存儲和管理各種數據,包括數據字典(存放數據庫的定義、數據庫運行時的統計信息等)、 用戶數據、數據的存取路徑等

  • 確定以何種文件結構和存取方式在磁盤上組織這些數據。

  • 實現數據之間的聯繫。

④ 數據庫事務管理和運行管理(控制)

  • 對數據庫的建立、運用和維護等進行統一管理、統一控制,保證數據的安全性、完整性、多用戶的併發操作和發生故障後的系統恢復。

⑤ 數據庫維護

  • 數據庫數據的載入、轉換數據庫的轉儲、恢復數據庫的重組和性能監視、分析

總結一下

  • 它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性
  • 用戶通過 DBMS 訪問數據庫中的數據,數據庫管理員也通過 DBMS 進行數據庫的維護工作
  • 它可使多個應用程序和用戶用不同的方法在同時或不同時刻去建立,修改和詢問數據庫

D:數據庫系統(DBS)

在計算機系統中引入數據庫後的系統構成

數據庫系統包括:① 數據庫 ② 數據庫管理系統(及其開發工具)③ 應用系統 ④數據庫管理員

(2) 數據管理技術的產生和發展

數據管理,就是對數據進行分類、組織、編碼、存儲、檢索和維護

數據管理技術的發展過程
① 人工管理階段(20世紀40年代中--50年代中)

  • 人工管理階段,數據面向應用,且不能保存,不能共享,同時不具有數據獨立性
    • 數據面向應用:數據需要由應用程序自己定義說明以及管理,也就是說,程序員需要自己規定數據的存儲結構,方法,輸入方式等等
    • 數據獨立性:是指用戶的應用程序與數據的邏輯結構和物理結構是相互獨立的

② 文件系統階段(20世紀50年代末--60年代中)

  • 文件系統管理數據,數據可以長期保存,同時具有了一定的共享性,但是不具有數據獨立性

③ 數據庫系統階段(20世紀60年代末--現在)

17955338-7f9d470601d9ad72
image

(3) 數據庫系統的特點

前面簡單介紹了 人工管理階段,以及文件系統階段的一些優缺點,而數據庫系統作爲他們的進化產物,自然對前者的不足做出了一定的完善,下面簡單先將其特點列出來

  • 數據結構化
  • 數據的共享性高,冗餘度低,易擴充
  • 數據獨立性高
    • 數據由DBMS統一管理和控制

A:數據結構化

數據結構化是數據庫系統文件系統的根本區別。在文件系統中,獨立文件內部的數據一般是有結構的,但文件之間不存在聯繫,因此從數據的整體來說是沒有結構的

數據庫系統雖然也常常分成許多單獨的數據文件,並且文件內部也具有完整的數據結構,但是它更注意同一數據庫中各數據文件之間的相互聯繫

簡單的認爲就是:整體結構化+ 數據結構化(數據模型)

B:數據的共享性高,冗餘度低,易擴充

數據庫系統從整體角度看待和描述數據,數據面向整個系統,可以被多個用戶、多個應用共享使用

減少了數據冗餘,同時節約存儲空間,避免數據之間的不相容性與不一致性,使系統易於擴充

這樣的特點不僅,減少了數據冗餘,同時節約存儲空間,也避免數據之間的不相容性與不一致性,使系統易於擴充

C:數據獨立性高

① 物理獨立性

  • 指用戶的應用程序與存儲在磁盤上的數據庫中數據是相互獨立的,即:當數據的物理存儲改變了,應用程序不用改變

② 邏輯獨立性

  • 指用戶的應用程序與數據庫的邏輯結構是相互獨立的 數據的邏輯結構改變了,用戶程序也可以不變

  • 數據獨立性是由DBMS的二級映像功能來保證的

③ 數據由DBMS統一管理控制

  • 數據的安全性(Security)保護
  • 數據的完整性(Integrity)檢查
  • 併發(Concurrency)控制
  • 數據庫恢復(Recovery)

(四) 數據庫系統結構

從數據庫管理系統角度看,數據庫系統通常採用三級模式結構,是數據庫系統內部的系統結構

從數據庫最終用戶角度看(數據庫系統外部的體系結構),數據庫系統的結構分爲:

  • 單用戶結構
  • 主從式結構
  • 分佈式結構
  • 客戶/服務器
  • 瀏覽器/應用服務器/數據庫服務器多層結構等

(1) 幾個基本概念

A:“型” 和“值” 的概念

型(Type):對某一類數據的結構和屬性的說明

值(Value):是型的一個具體賦值

例如,員工記錄定義爲(編號,姓名,性別,部門,年齡,籍貫)這樣的記錄型

而(20200417,湯姆,男,技術部,40,北京)則是該記錄型的一個記錄值

B:模式(Schema)

模式是數據庫中全體數據的邏輯結構和特徵的描述(數據的結構和聯繫),它僅僅涉及到型的描述,不涉及到具體的值,並且模式是相對穩定的

17955338-fedf3c83506d8c3a
image

C:實例(Instance)

模式的一個具體值,反映數據庫某一時刻的狀態同一個模式,可以有很多實例,實例隨數據庫中的數據的更新而變動

模式是相對穩定的,而實例是相對變動的,因爲數據庫中的數據是在不斷更新。模式反映的是數據的結構及其聯繫,而實例反映的是數據庫某一時刻的狀態。

17955338-deb5c31a183b7b6b
image
17955338-ee1a6e67ad4e02d0
image
17955338-81cf55cbf6f7664a
image

分別看完模式和實例的配圖,這兩者的概念就很好區分了,就比如上例中,就是一個學生選課的數據庫模式,其中包含學生的記錄,還有課程的記錄,以及學生選課的記錄,而下面我隨便舉了一些例子,例如他是 2020年的學生選課數據庫實例,當然前面還有2019年的 2018年的 等等,每個實例就是不同的了,雖然都是學生選課數據庫模式

(五) 數據庫系統的三級模式結構

數據庫系統分爲三級模式,簡單做了一個圖,讓大家看起來直觀一點,當然啦,大家最好先去簡單看一下下面概念的介紹再回過頭食用 ~

17955338-7a2550d1fc320af5
image

先講模式,再講上下兩個

(1) 模式(邏輯模式)

定義數據庫中全體數據的邏輯結構和特徵的描述,是所有用戶的公共數據視圖,綜合了所有用戶的需求,同時一個數據庫只有一個模式

舉個例子:我的數據庫中,存在很多關係模式,例如用戶關係模式中(用戶編號,用戶名稱),權限關係(權限編號,權限名稱)等,數據庫中所有關係模式的集合就組成了邏輯模式

模式所處位置(三層模式中):是數據庫系統模式結構的中間層

與數據的物理存儲細節和硬件環境無關

與具體的應用程序、開發工具及高級程序設計語言無關

(2) 外模式(子模式/用戶模式)

定義:數據庫用戶(包括應用程序員和最終用戶)使用的局部數據的邏輯結構和特徵的描述,是與某一應用有關的數據的邏輯表示

外模式所處位置(三層模式中):介於模式與應用之間

模式外模式的關係:一對多,外模式通常是模式的子集 (看圖記憶就行了 - - ),不同的外模式反映了不同的用戶的應用需求、看待數據的方式、對數據保密的要求

外模式應用的關係:一對多,同一外模式也可以爲某一用戶的多個應用系統所使用,但一個應用程序只能使用一個外模式

(3) 內模式 (存儲模式)

是數據物理結構和存儲方式的描述,它定義了數據庫內部記錄類型、記錄尋址技術、索引和文件的組織方式、以及數據控制方面的內容

數據在數據庫內部的表現方式:

  • 記錄的存儲方式(順序存儲,按照B樹結構存儲,按hash方法存儲)

  • 索引的組織方式

  • 數據是否壓縮存儲

  • 數據是否加密

  • 數據存儲記錄結構的規定

  • 一個數據庫只有一個內模式

17955338-56ce8fde2bbf603b
image

網圖,侵刪

(六) 數據庫的二級映像

這二級映像分爲:

  • 外模式與模式之間的映像
  • 模式和內模式的映像

(1) 外模式與模式之間的映像

保證了數據的邏輯獨立性

模式改變時,數據庫管理員修改有關的外模式/模式映像,使外模式保持不變

應用程序是依據數據的外模式編寫的,從而應用程序不必修改保證了數據與程序的邏輯獨立性,簡稱數據的邏輯獨立性。

(2) 模式和內模式的映像

保證了數據的物理獨立性
當數據庫的存儲結構改變了(例如選用了另一種存儲結構),數據庫管理員修改模式/內模式映像,使模式保持不變,應用程序不受影響保證了數據與程序的物理獨立性,簡稱數據的物理獨立性。

(3) 二級映像總結

  • 保證了數據庫外模式的穩定性

  • 從底層保證了應用程序的穩定性,除非應用需求本身發生變化,否則應用程序一般不需要修改

  • 數據與程序之間的獨立性,使得數據的定義和描述可以從應用程序中分離出去

  • 數據的存取由DBMS管理,用戶不必考慮存取路徑等細節,簡化了應用程序的編制,大大減少了應用程序的維護和修改

(七) 數據庫系統的組成

數據庫,數據庫管理系統(及其開發工具),應用系統,數據庫管理員,硬件平臺及數據庫 ,軟件 ,人員

這一塊,不是很重點,也比較好理解,就不細細展開說了 知道這幾個點就好了

(八) 結尾

如果文章中有什麼不足,歡迎大家留言交流,感謝朋友們的支持!

如果能幫到你的話,那就來關注我吧!如果您更喜歡微信文章的閱讀方式,可以關注我的公衆號

在這裏的我們素不相識,卻都在爲了自己的夢而努力 ❤

一個堅持推送原創開發技術文章的公衆號:理想二旬不止

17955338-30c341b6c3b30fc1
image
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章