資料庫這門課為什麼這麼難學,該怎麼學?ze ran2014-11-26 11:05:43

在開始接觸其概念和名詞前,先問自己個問題,為什麼需要有資料庫?把資料存在一個檔案裡不行嗎?

想想如果沒有資料庫,用一個檔案怎麼組織儲存資料,如何滿足不同應用的需求,帶著這個問題去學習。到最後,可能你會發現你的那個檔案,已經變成一個數據庫了。

也許還可以幫助理解nosql的database。

資料庫這門課為什麼這麼難學,該怎麼學?阿里云云棲號2018-04-17 14:18:11

給親推薦一系列資料庫的免費學習課程,希望能夠幫到親。

先來個腦圖

資料庫這門課為什麼這麼難學,該怎麼學?

課程一:《MySQL資料庫入門學習》

免費學習地址:

https://

edu。aliyun。com/course/1

53/lesson/list?utm_content=g_1000055517

課程介紹:本課程透過最流行的開源資料庫MySQL帶你瞭解資料庫的世界。

課程二:《Redis資料庫入門》

免費學習地址:

https://

edu。aliyun。com/course/2

2/lesson/list?utm_content=g_1000055518

課程介紹:Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

Redis 是一個高效能的key-value資料庫。Redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

課程三:《分散式資料庫技術與實現》

免費學習地址:

https://

edu。aliyun。com/course/3

7/lesson/list?utm_content=g_1000055519

課程介紹:本課程主要講解分步式資料庫系統的主要功能和實現方式,課程中首先闡述傳統資料庫所存在的問題,結合此問題說明分步式資料庫系統如何解決這些問題,以及阿里雲平臺下分步式資料庫系統如何最佳化這些問題。

課程四:《PostgreSQL資料庫從入門到精通》

免費學習地址:

https://

edu。aliyun。com/course/5

2/lesson/list?utm_content=g_1000055520

課程介紹:PostgreSQL被譽為“世界上功能最強大的開源資料庫”,是以加州大學伯克利分校計算機系開發的POSTGRES 4。2為基礎的物件關係型資料庫管理系統。

PostgreSQL支援大部分 SQL標準並且提供了許多其他現代特性:複雜查詢、外來鍵、觸發器、檢視、事務完整性、MVCC。同樣,PostgreSQL 可以用許多方法擴充套件,比如,透過增加新的資料型別、函式、運算子、聚集函式、索引。

開發者可以免費使用、修改、和分發 PostgreSQL,不管是私用、商用、還是學術研究使用。

課程五:《SQL Server on Linux入門教程》

免費學習地址:

https://

edu。aliyun。com/course/5

1/lesson/list?utm_content=g_1000055521

課程介紹:SQL Server資料庫一直只提供Windows下的版本。2016年微軟宣佈推出可執行在Linux系統下的SQL Server資料庫,該版本目前還是早期預覽版本。

本課程主要介紹SQLServer On Linux的基本知識。

課程六:《HBase入門教程》

免費學習地址:

https://

edu。aliyun。com/course/7

3/lesson/list?utm_content=g_1000055522

課程介紹:HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。

HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

資料庫這門課為什麼這麼難學,該怎麼學?知乎使用者2018-04-17 22:53:34

資料庫這個東西,(曾經)就是一個數據管理的系統級軟體,事實上,Oracle資料庫是可以不要作業系統支援的。自NoSQL興起後,資料庫就是一個專門用於資料管理的計算機系統,NoSQL多半是分散式的,當然memcached、Redis之類的產品或系統可以配成單機。

在資料庫的教科書,DB、DBMS、DBM這幾個概念是不同的。但是,我覺得這樣不對。也許在當時,這種認知有一定的道理,但是,到了今天,層次結構已經成為系統設計的主要方法,所以,我們應該說,資料庫是一個層次結構的系統,類似於我們把計算機系統劃分為四個層次、把TCP/IP網路劃分為五個層次,以及B/S系統的層次化設計辦法。

從資料庫軟體及其應用的設計需求來看,應該滿足資料管理、系統軟體、資源管理、資料訪問方法、計算處理、程式設計介面等。作為一個計算機系統,資料庫同樣採用分層設計,同樣是一個四層結構的計算機系統。所以:

既然是資料管理,那麼就必然服從資料結構的一般原理。

既然是系統級軟體,那麼必然服從軟體設計的一般原理。

既然資料是一種計算機資源,那麼必定服從資源管理的一般原理。

既然有資料訪問,那麼必然有資料訪問的空間鄰近性和時間鄰近性。

既然是一種計算,那麼必然服從一種計算模式(不同的資料結構,計算模式不同)。

既然提供了一種語言,那麼必然服從語言設計的一般規律(哲學理念)。

既然資料元素之間有關係,那麼必然要提供描述這種關係的方式。

既然是一個計算機系統,那麼同樣是一個底層為硬體,頂層為應用的層次結構。

既然是一個計算機系統,那麼同樣講究透明性、虛擬性。

既然是有併發處理,那麼就需要考慮資料隔離,也就是共享資源中的互斥或同步問題。

好象就這麼多吧,如果資料結構、作業系統、離散數學、軟體工程、計算機組成等幾門基礎課程功底好點,稍微點撥一下,然後就可以透過專案自學了。

好吧,資料庫之所以難學,是因為寫書的人、講課的人、培訓的人,都是稀裡糊塗的。

——————————————————————————————————————————————-

1、一般資料庫分為三~四門課程:資料庫概論,資料庫應用和資料庫原理,外加一門資料庫課程設計。不過,其它課程也很重要。

2、從整體上看,

資料庫是一種針對資料管理需求的特定的計算機系統

。先要了解一下背景。有幾個方面,一個數據管理的需要,一個是底層硬體的特性,一個是資料結構,一個是系統級軟體的設計。事實上,資料庫和資料結構,有另外一個相同的說法,資料的管理和處理。然後,資料庫幾乎總是在塊裝置(磁碟)上(即使是最近幾年SSD比較便宜了,但是還是有大量的商用系統使用機械硬碟)。

3、資料庫有兩條路徑,一個是從應用開始學,一個是從理論開始學。當然,最後應該能夠把理論、應用結合起來,並且穿插學術研究和專案實踐的歷史發展及其背景。由於計算機系統的設計必然是透明的、虛擬的,所以從應用層開始學起,也沒有問題。

4、從應用來看,資料庫是為了滿足是資料的統一管理的需求。為了滿足這個要求,資料庫必須向用戶提供資料型別的定義方法、資料的操作方法、資料的一致性的保障。

5、從使用的角度來說,首先就是要掌握如何運用資料型別的定義方法、資料的操作方法來管理資料,並且在使用過程中,遵守一些必要的資料管理的規範。因此,根據專案,建立資料庫、資料表、選擇恰當的資料型別、遵守相關的規範。在這個過程中,掌握E-R圖這個工具,對專案中的資料進行分析,即提取實體、實體的屬性、實體的關係。

6、建庫建表之後,就要掌握相關的資料操作方法和資料庫內建的程式語言(儲存過程),解決具體的問題。

7、由於資料是儲存於外存中的(不考慮記憶體資料庫),根據計算機組成原理,我們知道,外存I/O效能是系統瓶頸。在一個給定的外存裝置的條件下,如何提高資料庫的效能?所以,我們就要根據應用的特性,合理地進行設計。這個時候,就涉及到資料結構了。

8、我們知道,資料結構的儲存結構,影響到資料操作的效能。對於外存中的資料,為了提高系統的效能,多采用索引結構,以加快資料項的定位。有的索引結構,寫效能優於讀效能,或者讀效能優於寫效能。因此,我們應該進行分析,哪一張表的哪一列應該建立什麼樣的索引。

9、在資料存在多張表的情況下,為了進一步提高系統的效能,我們還要推算資料表的多表操作時的I/O情況,依此最佳化資料表的索引設定。通常,我們分析多表操作中的關係演算過程,對多表操作的關係演算過程進行最佳化。

10、某些實際應用(事務處理)要求資料操作是原子性的(類似於作業系統的PV操作),所以,資料庫必須支援事務處理的要求,要不所有的資料操作全部成功,要不所有的資料全部保持原始狀態。

11、資料庫應用基本上是多使用者應用,所以,資料庫必須支援併發性。按照作業系統,我們知道,資料也是一種資源。所以,必須對資源的訪問進行控制,也就是資源鎖和互斥鎖。

12、當事務處理和併發控制結合在一起時,事情就變得複雜起來。再加上系統性能的考慮,也就有了悲觀鎖和樂觀鎖。

13、系統級軟體,往往採用分層設計。同樣地,資料庫也採用分層設計理念,類似於計算機網路等其它資訊系統。

(修改中)

14、再次強調一下,資料庫,實際上就是一種特殊的資料結構。回憶一下,抽象資料型別,我們利用抽象資料型別描述現實世界中的資料,資料元素之間的關係,資料的操作。我們要給出抽象資料型別的邏輯結構和儲存結構。

15、當然,由於資料庫是分層設計,所以儲存結構和邏輯結構是位於不同的層次。資料結構的邏輯結構對應了資料庫的資訊世界,資料結構的儲存結構對應了資料庫的機器世界。

16、對於CRUD,可謂是非常眼熟,資料結構的最常見的操作。

17、既然是一種資料結構,那麼,資料庫的操作也具有時間開銷和空間開銷。時間開銷和空間開銷,是資料庫操作的時間複雜度和空間複雜度。

18、因此,即使作為一個普通的應用層開發人員,也應該對資料庫的底層有所瞭解,以降低資料庫操作的時間開銷和空間開銷。

19、SQL的設計理念,我記得知乎還是哪裡有一個高手回答過。作為一門語言,有其哲學理念。理解其設計理念,有助於我們掌握這門語言。對於語言理解不深,就不拋磚引玉了。

20、在邏輯上,庫-表-行-列-項,構成一種層次結構。資料庫的資料,固然是一種資料結構,但是,為了進行管理,也設計了一種邏輯上的層次管理方法。有點象檔案系統的層次結構——目錄和檔案結構,當然是在邏輯上的層面。比如庫—表—行—列—項。每一種具體的資料庫,它們的具體設計方案不同。

21、在分層設計中,有一種獨有的概念,檢視。檢視是一種邏輯上的概念,是一種對錶進行操作的結果。這個結果是一個虛擬的表,並不存在於物理儲存空間。

22、在分層設計中,為了提高系統的效能,因此也設計了特定的cache方案。

23、資料庫中的資料是一種資源,根據作業系統中的程序互斥和同步的原理,在併發訪問時,就會因為同時訪問資源而導致各種問題。

24、此外,從系統的角度來說,還應該提供安全。

25、對於最佳化,主要是指關係代數的最佳化,也就是儘可能減少時間開銷和空間開銷。

嗯。好象如果其它課程學得好,資料庫也就這點東西了。

資料庫這門課為什麼這麼難學,該怎麼學?程墨Morgan2018-04-18 08:50:43

資料庫一點不難學,問題是很多教材的理論和實踐脫節。

我本科和研究生期間都上過資料庫課程,多是講理論,不講實踐,其實很多理論是製造資料庫軟體的人才需要深挖的(我不是說這些知識理論沒用啊),如果從實用角度出發,直接找一個實際專案用某個資料庫開幹要學得快得多。

在實際專案中,往往也不會嚴格遵守第三正規化,這進一步讓人覺得書本上學的和工作不一樣,這也是教材很讓人遺憾的一個地方。

總之,學資料庫先明確自己的目標,是要學做一個數據庫軟體,還是學做一個使用資料庫的軟體,目標明確了好辦事。

資料庫這門課為什麼這麼難學,該怎麼學?胡津銘2021-01-08 09:55:08

資料庫難學嗎?我覺得也沒有那麼難。資料庫的體系的搭建應該是非常有趣而且自然的。如果你覺得難學,那很可能是沒有用對資料。這裡推薦一個很好的資料庫學習資源,PingCAP的一個github專案:

https://

github。com/pingcap/awes

ome-database-learning

強推一下里面提到的courses:

CMU Database Systems (15-445/645), thanks to Andy Pavlo

CMU Advanced Database Systems (15-721), thanks to Andy Pavlo

UC Berkeley Introduction to Database Systems

Stanford Database System Implementation

Let‘s Build a Simple Database, thanks to cstack

每一門都是非常有趣非常好的課程,

學習的話一定要完成作業

。從工程角度而言,幾門導論課

紮實地

學了一門之後,找實習/工作應該就不愁了。從research角度來說,Andy的兩門課程學得紮實了之後,甚至可以直接嘗試自己想idea發sigmod/vldb了。