1.1 建講原則

你和我是從下面開始認識數據庫的。這是我個人教人方法的一個特點。在談論新話題時,我總是先告訴你如何在實踐中使用某些工具。當我知道一個人知道如何使用它們時,我就開始講述一切是如何運作的。

採用這種方法有幾個原因,但最主要的一個是學習過程中最有價值和最缺失的資源是學生的動機

這種方法與我們習慣的方法略有不同,後者在學校和大學中使用。但一切都很清楚:當你在學校或大學學習時,你有正確的優先順序:學習是此時此刻生活中最重要的事情。

如果您在成年後從事自我教育,那麼您通常已經不得不將學習與工作、家務、照顧孩子或年邁的父母結合起來。而且在這裡經常學習不會是第一要務。

這都是關於優先事項的。創業界甚至有這樣一個概念——Fail Fast,盡快失敗。聽起來很奇怪,但實際上很有道理:創業公司的任務就是快速檢查他的假設是否正確。如果它不是真的,那麼你不需要在上面花費多年的生命,最好儘早了解對某種服務或產品沒有需求。

在教授 Java 和 SQL 時,我使用相同的方法:我讓你有機會儘早了解你是否正在從編程中匆匆忙忙。如果您喜歡編程,並且您自己能夠弄清楚如何使用循環和數組,那麼在導師的幫助下和精心設計的程序中,您完全有機會完成學業並找到工作。

但另一個同樣重要的事實是:休息幾天后,您就會明白編程不適合您。你可能只是對它不感興趣,沒關係。所以,你不需要花幾個月的時間在上面。

只有 40% 的畢業生從事他們在大學獲得的專業。你想想,人家學了5-6年,60%的人決定不干本專業了。是的,一些獲得的知識仍在使用,但大約有一半沒有。

這就是Fail Fast理念的價值——儘早了解某個職業、某個人或某個愛好不適合你。並且不要在他們身上浪費你的時間和精力。從長遠來看,這是一個非常好的策略。

1.2 SQL 和一切,一切,一切

我們完成了哲學介紹,讓我們回過頭來學習 SQL。

SQL 語言和 DBMS 略有不同。SQL 語言本身是一種標準,它描述了在對數據庫的 SQL 查詢中可以編寫什麼。DBMS 已經是這個標準的實現。一些 DBMS 實現了標準的某些功能,第二個實現了其他功能,依此類推。

DBMS 越昂貴,它實現的標準功能就越多。此外,許多 DBMS 通常會在 SQL 標準之外實現自己的獨特功能。有時這會導致可移植性問題:為一個 DBMS 編寫的 SQL 查詢可能不適用於另一個。

Java也有類似的情況。一個Java程序如果是在Windows下寫的,那麼在Linux上就不能正常運行了。為了解決這個問題,Java 引入了針對不同操作系統具有不同實現的特殊類。示例:具有 WindowsPath、LinuxPath 等實現的 Path 類。

問題的第二部分在版本控制的幫助下得到解決。來自不同語言或 DBMS 的所有成功創新都被添加到新的 JDK 或 SQL 標準中。您已經知道 JDK 有不同的版本,版本越新,功能越多。SQL 也一樣。

在SQL語言中,其標準有多個版本,以年份命名:

  • 數據庫:1999
  • SQL:2003
  • SQL:2006
  • 數據庫:2011
  • 數據庫:2016
  • SQL:2019

好消息:我們不會研究這些標準。首先,學習和掌握這一切需要數年時間。其次,這些標準就像 Android 的版本:發布後僅 5-10 年,該標準就會得到廣泛傳播。

在數據量大的數據庫中,人們需要可靠性和穩定性。“有用,不要碰它”是每個使用數據庫的人的座右銘。並且每 5 年進行一次向新版本數據庫的過渡,此時這種解決方案的所有優勢都已經很明顯了。

1.3 括號之外

正如我上面所說,成為數據庫專家需要數年時間。專業人士知道很多我們不會研究的東西。但我會稍微談談數據庫中的其他內容。

幾乎所有現代數據庫都支持:

1 程序語言 (PL)

RDBMS 支持編寫在 SQL Server 上運行的過程和函數的能力,並且可以在查詢期間對數據做很多事情。例如,一旦我向 Oracle 服務器編寫 PL SQL 查詢,它會響應查詢生成......一個包含數據的 HTML 頁面。是的你可以。

2 個事件(觸發器)

所有現代 DBMS 都支持事件機制,在 SQL 語言中稱為觸發器。觸發器作為對某些操作的響應而發生。例如,您可以攔截所有寫入數據庫的嘗試,並將它們更改的確切時間添加到新行中。

3 記錄

現代數據庫試圖變得超快,因此通常所有更改(新行、刪除行、更改行)都首先寫入一個稱為日誌的特殊文件。並且只有在一段時間後,SQL 服務器才會將這些記錄與主數據庫合併。

在某些方面,這類似於 Java 中垃圾收集器的行為:它也只是首先將對象標記為已刪除,並在空閒時間進行內存清理和優化。

4個插件

對於 DBMS 以及許多程序,您可以編寫自己的插件。此類插件允許您添加獨特的數據類型、使用它們的函數,或更改 DBMS 的標準行為。當您使用開源數據庫並且存在一些錯誤時,這尤其有用。

5 分佈式工作(集群)

現代 SQL 服務器的典型場景是多個服務器組成的集群。最簡單的選擇是將數據寫入一個服務器並從一組服務器讀取。在這種情況下,您可以為 SQL Server 之間的數據庫同步配置各種場景。

6 分片

當數據很多的時候,就開始拆分到不同的數據庫中。直到一個表可以存儲在不同數據庫中的部分。

分片可以是垂直和水平的。垂直分片是指表格被垂直線切割,而水平分片則被切割成水平線。

例如,我們決定按年份劃分錶中的所有數據:2019 年 - 一個表,2020 年的數據 - 第二個,依此類推。這將是水平分片。

7 推非推

數據庫發展到一定階段,開始加入越來越多的業務邏輯。這一切都是從過程、函數、服務器生成網頁開始的,最後是為 DBMS 添加了對幾乎所有流行語言的支持:Python、JavaScript,甚至 Java 和 C++。

聽起來很酷,直到你開始深入細節:你真的想用 Java 編寫你的 Web 應用程序業務邏輯,它將在 SQL 服務器中執行,那裡沒有 JDK、Java 庫、框架、很少的內存和大量的其他限制?