線上程式教學課程: 從零開始的SQL語法與資料庫設計 - 以MySQL來攻略
關聯性資料庫是網站中不可或缺的一塊,不良的資料庫設計會讓專案花三倍的時間也完成不了。本課程使用MySQL教學,從基礎SQL語法到用應用程式層面的資料庫設計。避免學到一堆語法卻沒用到而記不起來的困擾!
最後更新時間: 2022/10/24
課程敘述
【關聯性資料庫 (Relational database)】在現代的網站架構是不可或缺的一塊,甚至可以說不了解關聯性資料庫就無法成為一個合格的網路後端工程師。因為資料庫設計的好壞會立即影響應用程式開發的效率,不良的資料庫設計讓原本一個月可以完成的功能變成三個月也完成不了最後打掉重練也不少見。所以有能力在專案初期辨識資料庫設計上的優劣對於準時下班是相當重要的。
在關聯性資料庫中市佔率最高的即為MySQL,同時也是最熱門的開放原始碼可免費商用的資料庫。因爲其使用GPL授權的關係,所以可以免費商用做於網站後端的資料庫。MySQL所使用的語法大部分為標準的SQL語法,各大知名的的資料庫如Oracle、SQL Server、PostgreSQL、IBM DB2 與 AWS Aurora,甚至iOS、Android手機內部使用的SQLite也都基本依循標準的SQL語法。當然各個資料庫細節與進階使用上面多少都有些差異,不過在基礎的使用與邏輯上面幾乎沒有不同。因此我們的課程是選擇MySQL作為課程進行的主要資料庫。
如果對關聯性資料庫還沒有概念的話可以先看我們的文章:
延伸閱讀:後端服務的根基,淺談SQL關連式資料庫 RDBMS
此課程與其他課程不同點為我們著重於常見的【網路應用資料庫規劃】,雖然一樣從關聯性資料庫的SQL語法和MySQL基本使用設定開始進行課程,但是中後段的章節即開始以常見的購物網站為範例講解,避免學到一堆進階語法但是因為沒有情境使用而記不起來。同時也可以很快地碰到實務上的取捨,錯誤的設計當然會讓專案無法進行下去,但是學術上正確的資料庫也有機會讓開發變的異常的複雜。
目前程式後端框架幾乎都包含ORM(Object Relational Mapping)函式庫,簡單來講就是用接近一般程式語言的方式來操作資料庫,不需要直接執行SQL語法,ORM函式庫會幫開發者轉換,算是相當主流的開發方式,例如熱門的Ruby on Rails, PHP Laravel, Python Django....語言與函式庫太多無法每個都列出。ORM函式庫固然方便,一般情況也可以加快開發速度,但是很多時候我們沒辦法很細微的控制它們轉換的語法,導致於要做細節優化或是提高像報表生成這樣耗時功能的效率並不是很方便。這是ORM函式庫一定會碰到的問題,所以都會留一條後路讓開發者直接撰寫SQL指令來調整。課程最後面的章節則會探討報表生成這類型耗時功能的一些策略與細節優化。(包含與NoSQL資料庫一起使用的一些策略)
進階輔助課程組合:
Linux AWS Apache Nginx + MySQL 進階輔助課程組合
*NoSQL 資料庫也是現在常見的資料庫類型,用來建構大型網站或大量資料類型的服務上有一定的優勢,但是在一般的使用情境下沒有特別優勢反而還可能有劣勢,因為各大後端框架在開發中多半還是以【關聯性資料庫】為主要支援對象,而且都是它們經過謹慎的考量後的決定。所以如果不是工作上的需要,建議先了解【關聯性資料庫】後再去研究【NoSQL】類型的資料庫會比較實際。
*現在流行的趨勢是混合使用,利用各別的長處來掩蓋短處,例如使用MySQL或PostgreSQL作為主資料庫,Redis作為快取。當然也有更多的分散式架構解決方案,不過這就超出【基礎】課程範圍。太多選擇對初學者不見得是好事,容易混淆使用情境與前因後果。
課程難度
初級,此課程需要一點基本程式經驗。
請參閱課程需求
課程需求
課程以Windows進行,但是主要使用的軟體MySQL Workbench在Windows 與 MacOS皆有支援,且外觀幾乎一樣。所以無論以Windows或MacOS進行課程都不會有問題。
1. 擁有一台電腦 (Windows、MacOS系統皆可)
2. 有任何類型的程式開發經驗
非必要,但會幫助學習
1. 架過任意類型網站
2. 曾在任意電商網站線上買過東西
課程目標
1. 學會SQL語法
2. 學會如何使用MySQL
3. 了解基本關聯性資料庫設計
4. 解決ORM函式庫所無法解決的問題
5. 有能力自行設計常見小型應用的資料庫
課程特點
課程主要以MySQL 進行,並且以基本通用的SQL語法作為開始,延伸到購物網站分析與設計。以網路應用程式的考量來進行教學,而非純粹管理資料庫。讓學生
並且帶入目前最常見的「內容管理系統 CMS」資料庫(例如:WordPress),學習經過時間與大量使用者驗證過的資料庫是如何設計架構,探討其中的利與弊。
*有些工程師對於「內容管理系統」有排斥感,因為「內容管理系統」的使用者組群主要設定為一般群眾,並且可以用外掛的方式越過“工程師開發”直接加入新內容。
(但實務上只有簡單的功能會順利,系統複雜到一定程度也會有相衝突反應,可參考我們的 WordPress 課程簡介。)
但是一般初級後端工程師(Junior) 的面試考題中會出現的「設計文章與留言系統」其實就是「內容管理系統」的簡化版,而且不包含「內容管理系統」標準的"過往文章紀錄回朔"功能,更不用提外掛功能開關的設計。所以了解全世界30%以上市佔率的「內容管理系統」是如何設計,知道這樣設計其中的優勢與劣勢絕對是有益而無害的。
("過往文章紀錄回朔"功能就是文章如果改爛了,可以回復到特定日期的文章版本,不算難,但是一般系統不專供內容管理通常不會提供,因為有其對應的優缺點考量。)
第一章 (總長2小時)
第二章 (總長5小時)
第三章 (總長4小時)
第四章 (總長2小時)
第五章 (總長2小時)
第六章
第七章
課程講師
縱裕
iOS 工程師 / Ruby On Rails 網站工程師
現職為iOS 工程師,但同時也在鑽研網站技術並且建立多個網站。
曾協助多個新創公司,範圍包含網站前端到桌面應用程式倉存管理與電子機關互動。
從網站架設,手機APP到系統底層都有豐富的經驗。
擅長不同系統架構的整合與創新想法的實現。
經歷:
進度條 技術顧問
Digilog.tw 網站與倉庫後台程式架構設計與建置
Zooe 線上教學平台 網站架構設計與建置
HelloStudy 楓禾留遊學網 設計與建置
Funlock 放樂工作室真實密室逃脫遊戲 - 魔鏡迷城 電子機關設計與製作
iOS App - Rock Click 節拍器
Nexcom ARM韌體與軟體工程師
Insyde BIOS工程師




