課程敘述
【關聯性資料庫 (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.8小時)
-
play_arrow
01. 關聯性資料庫SQL課程介紹
09:38 -
play_arrow
02. [Windows] 用官方安裝檔安裝MySQL
20:28 -
play_arrow
03. [Mac] 用官方安裝檔安裝MySQL
14:43 -
play_arrow
04. [Windows] 利用MySQLWorkbench 匯入與匯出備份資料庫(import, export SQL file)
21:35 -
play_arrow
05. [Mac] 利用MySQLWorkbench 匯入與匯出備份資料庫(import, export SQL file)
28:35 -
lock
06. 利用MySQLWorkbench控制MAMP的MySQL Server
05:12 -
play_arrow
07. [補充] 在Vultr VPS上架設Ubuntu Linux 主機 (免費100美金額度)
26:10 -
lock
08. [補充] 在Linux上安裝MySQL與遠端連線安全設定
29:49 -
lock
09. [補充] 在Ubuntu上安裝 MySQL 8, 讓root可以用帳號登入與建立新使用者
10:40
第二章 (總長5.3小時)
-
play_arrow
01. 為什麼寫程式需要用資料庫(含基本示範)
15:05 -
play_arrow
02. 建立與刪除資料庫, 簡單說明Character與Collation的選擇(Create Drop Database)
13:56 -
play_arrow
03. 新增資料表(Table)與刪除, 建立資料表的預設邏輯
12:23 -
lock
04. 新增與刪除資料, 注意Workbench的一些額外限制與行為
15:31 -
lock
05. 簡單建立文章(post)資料表, ORM系統的預設值探討
21:40 -
lock
06. 探討數字類型int float double decimal, 包含unsign與zerofill的使用
16:20 -
lock
07. 探討字串類型(一), char與varchar的不同, 為何不應該在MySQL使用nvarchar
19:10 -
lock
08. 探討字串類型(二), 初探Text與Blob, 淺談搜尋(Search)與索引(index)的概念
14:51 -
lock
09. 探討字串類型(三), 再探Text與Varchar的特性, 為何不能互相取代
24:14 -
lock
10. 探討日期時間類型, datetime與timestamp的不同, 為何ORM系統預設還是會有timestamp
23:43 -
lock
11. 接下來課程的使用方式
03:45 -
lock
12. Limit的使用方式, 為何Client常偷偷幫你下這個指令
05:07 -
lock
13. Order By排序的使用方式
09:48 -
lock
14. where 的使用方式(一), 判斷式的串聯(in, or and, 等於 大於 小於, is null, is not null)
18:52 -
lock
15. where 的使用方式(二), 字串搜尋與購物網站的搜尋應用解析
18:43 -
lock
16. where 的使用方式(三), 時間區間的搜尋比對(between)
09:26 -
lock
17. 常見的Pagination分頁功能原理, offset, limit與count()的運用
10:14 -
lock
18. 利用其他關聯性資料表來簡化搜尋
13:40 -
lock
19. 用where來組合多個table表的查詢結果
10:02 -
play_arrow
20. 用 inner, left, right, cross join 聯集資料表的介紹與示範
16:03 -
play_arrow
21. [補充] 利用PHP讀取MySQL資料庫並顯示出資料( mysqli )
22:32
第三章 (總長4.8小時)
-
play_arrow
01. 資料庫基本設計章節介紹, 資料庫設計與程式設計的相互影響
11:21 -
lock
02. Foreign key constraint 外鍵限制介紹(一)
21:08 -
lock
03. Foreign key constraint 外鍵限制介紹(二), 以簡易購物車架構為例子實作
24:11 -
lock
04. 第一正規化與範例
10:13 -
lock
05. 第二正規化與範例
09:43 -
lock
06. 第三正規化與正規化想法探討
13:45 -
lock
07. 資料關聯性, 一對多, 多對一, 一對一(has many, one to many, many to one, belongs to, has one, one to one)
12:29 -
lock
08. 資料關聯性, 多對多, 多欄位 primary key, 與沒有primary key ( belongsToMany, has_and_belongs_to_many)
26:34 -
lock
09. 資料關聯性, 多對多與遠層一對多的關係 (has_many through)
12:10 -
lock
10. 資料關聯性, 多型關聯與多型多對多為何不常用(Polymorphic relationship)
15:33 -
lock
11. [Windows] EER Model 與 SQL 檔案互相轉換
07:54 -
lock
12. [補充] 簡易 EER 模型製作講解
18:31 -
play_arrow
13. 開始設計購物網站資料庫前簡介
04:39 -
lock
14. ORM 系統的 Migtation 資料庫的版本管理機制, 以Application為主體的思考方式
18:19 -
lock
15. 詳細的 Product 與 Product options 邏輯, mwb檔的使用方式
26:18 -
lock
16. User 會員功能與第三方Oauth2登入邏輯
21:48 -
lock
17. Cart 購物車欄位設計
11:07 -
lock
18. Categories 階層設計, Breadcrumb 呈現條件
10:34 -
lock
19. 多對多關係的categories, 實作簡易的taxonomy 分類
05:49 -
lock
20. 訂單order邏輯與注意事項
07:57
第四章 (總長2.2小時)
-
play_arrow
01. WordPress 資料庫章節介紹, 除了WordPress 資料庫設計邏輯外還能學到什麼
03:28 -
lock
02. 利用Git 版控來研究資料庫變化
14:54 -
play_arrow
03. 簡介所有 WordPress 資料表與初始資料
14:32 -
lock
04. 文章與備份, 建立第二個category
20:13 -
lock
05. 開啟MySQL log, 寫在資料庫裏面的程式碼 rewrite_rule
10:06 -
lock
06. WordPress是如何共用程式碼於文章分類, 以Category, tag 與 文章作者為例
09:58 -
lock
07. 上傳圖片與 post 多對多關係連結
13:10 -
lock
08. 頁面樣式, 佈景主題與外掛跟資料庫和程式的連動關係
11:11 -
lock
09. 彈性 nav_menu_item 設計原理
08:28 -
lock
10. 使用者註冊與權限
10:10 -
lock
11. 留言與核准(comments and approved)
08:24 -
lock
12. 文章與頁面備份還原機制與限制
07:49
第五章 (總長2.3小時)
-
play_arrow
01. 指令與工具章節介紹
01:31 -
lock
02. 在MySQL workbench 建立新的管理員使用者
10:37 -
play_arrow
03. [Windows] 利用 MySQL client 做連線
12:55 -
lock
04. 基本 MySQL client 指令操作
08:51 -
lock
05. MySQL 使用者全域權限探討(一), 利用BackupAdmin Role 測試備份權限(user global privileges, select, lock tables)
11:30 -
lock
06. MySQL 使用者全域權限探討(二), 介紹所有Global Privilege
12:45 -
lock
07. MySQL 使用者全域權限探討(三), 使用終端機建立使用者與賦予權限
07:56 -
lock
08. [Windows] 重設 MySQL管理員 Root 密碼(忘記root admin 密碼)
07:42 -
lock
09. [Mac] 重設 MySQL管理員 Root 密碼(忘記root admin 密碼)
06:53 -
lock
10. 用 SQL Script 建立多位使用者
05:50 -
lock
11. my.ini 所在位置與影響範圍(defaults-group-suffix)
13:02 -
lock
12. 介紹 MySQL Client 的 options (my.ini, my.cnf)
22:07 -
lock
13. 簡介 MySQLD Server 的 options 與 variable (my.ini, my.cnf)
13:37
第六章 (總長0.4小時)
-
lock
01. 組合SQL語法, 利用select 出來的值寫入
11:35 -
lock
02. 解決 foreign key constraint 所造成的 alter table column error
03:09 -
lock
03. 資料插入與多筆子查詢( subquery )組合, 簡述長SQL語句可能帶來的問題
11:42 - 章節尚未完全完結,我們會持續更新!!
第七章 (總長0.0小時)
- 尚未確定課程,請再等我們一下!!
課程講師
縱裕
iOS 工程師 / Ruby On Rails 網站工程師
現職為iOS 工程師,但同時也在鑽研網站技術並且建立多個網站。
曾協助多個新創公司,範圍包含網站前端到桌面應用程式倉存管理與電子機關互動。
從網站架設,手機APP到系統底層都有豐富的經驗。
擅長不同系統架構的整合與創新想法的實現。
經歷:
進度條 技術顧問
Digilog.tw 網站與倉庫後台程式架構設計與建置
Zooe 線上教學平台 網站架構設計與建置
HelloStudy 楓禾留遊學網 設計與建置
Funlock 放樂工作室真實密室逃脫遊戲 - 魔鏡迷城 電子機關設計與製作
iOS App - Rock Click 節拍器
Nexcom ARM韌體與軟體工程師
Insyde BIOS工程師