# Day 6 - 資料庫幼幼班:認識資料表 ## 劇情背景 海克絲突然問你:「對了,你對資料庫的部分熟悉了嗎?」 你有點心虛:「呃...還沒有很熟...」 海克絲驚訝地看著你:「什麼?你應該知道我們是用 PostgreSQL 吧?那你對資料庫的概念熟嗎?」 看到你一臉茫然,海克絲笑了笑:「其實沒那麼難啦!你有用過 Excel 嗎?」 「當然有啊!」 「那你就已經知道一半的資料庫概念了!」海克絲打開電腦,「資料庫就像一堆有組織的 Excel 表格。今天我們先來認識什麼是『資料表』,以及 LiveFit 用了哪些表。」 ![biglaugh](https://hackmd.io/_uploads/BJrhdvsHbe.png) --- ## 學習目標 - 理解什麼是資料庫與資料表 - 認識「主鍵」與「外來鍵」的概念 - 了解 LiveFit 的 4 張核心資料表 - 學會閱讀資料表結構 --- ## 核心概念 ### 資料庫是什麼? 資料庫就是「有組織的資料儲存庫」,像是一本超大的 Excel。 **LiveFit 使用 PostgreSQL:** 關聯式資料庫,資料以「表格」形式儲存,表格之間可以建立「關聯」。 ### 資料表 vs Excel | Excel | 資料表 | |-------|--------| | 一個 Excel 檔案 | 一個資料庫 | | 一個工作表 | 一張資料表 | | 一列資料 | 一筆記錄 | | 一個欄位 | 一個欄位(Column) | ### 主鍵(Primary Key)是什麼? 主鍵就是每筆資料的「身分證號碼」,絕對不能重複,也不能是空的。 **特性:** - 每張表都要有一個主鍵 - 通常是 `id` 欄位 - 用來唯一識別每一筆資料 ### 外來鍵(Foreign Key)是什麼? 外來鍵是「連到別張表的暗號」,用來建立表格之間的關聯。 **範例:** - 購買紀錄表的 `user_id` → 連到使用者表的 `id` - 可以知道「這筆購買是誰買的」 ### LiveFit 的 4 張核心資料表 | 資料表 | 中文名稱 | 說明 | |--------|----------|------| | CREDIT_PACKAGE | 堂數方案表 | 存放堂數方案(7堂、14堂、21堂) | | SKILL | 技能表 | 存放技能清單(重訓、瑜伽、有氧) | | USER | 使用者表 | 存放會員資料,role 欄位分辨學員/教練 | | CREDIT_PURCHASE | 購買紀錄表 | 存放購買紀錄,有外來鍵連到其他表 | ### 正規化:為什麼要分這麼多表? 如果把所有資料都塞在一張表,會有兩個問題: 1. **重複輸入**:同一個客戶下 100 筆訂單,名字就要寫 100 次 2. **改資料災難**:客戶換電話,要改 100 個地方 **解決方法:把表格拆開!** - 客戶資料存一張表 - 訂單資料存一張表 - 用「客戶編號」連結起來 這就是「正規化」的概念。 --- ## 測驗題目預覽 (共 13 題) ### 資料庫觀念篇 (4 題) 1. 主鍵(Primary Key)的特性是什麼? 2. 如果把「金額」欄位設定為數字,可以輸入「五十萬」嗎? 3. 為什麼要把資料「正規化」(拆成多張表)? 4. 外來鍵(Foreign Key)的作用是什麼? ### LiveFit 資料表篇 (9 題) 5. CREDIT_PACKAGE 表是用來存什麼資料? 6. CREDIT_PACKAGE 表的 credit_amount 欄位代表什麼? 7. SKILL 表的 name 欄位為什麼不能重複? 8. USER 表的 role 欄位有什麼作用? 9. 王小明、李燕容、小美剛註冊時,他們的 role 是什麼? 10. 如果李燕容想從學員變成教練,要怎麼做? 11. USER 表的 email 欄位為什麼不能重複? 12. CREDIT_PURCHASE 表的 user_id 是什麼意思? 13. 為什麼購買紀錄要記錄「當時的價格」? --- ## 遊戲連結 請進入遊戲完成本日關卡: 👉 **[點此進入遊戲](https://hexschool.github.io/backend-camp-game/)** ## 回報格式(確認打卡細節) 1. 完成遊戲中的測驗並截圖完成畫面 2. 到體驗營 Discord 的[每日活動頻道](https://discord.com/channels/801807326054055996/1446368763581562880),找到當天任務的討論串 3. 在討論串留言貼上截圖,打卡儀表板會自動記錄你的成績 4. 分享一下此關卡有哪些知識點讓你印象深刻,甚至有透過 AI 服務延伸學習 ![截圖 2026-01-02 下午5.16.29](https://hackmd.io/_uploads/BJig6WSEZg.png) --- ## 海克絲的叮嚀 > 「資料庫是系統的心臟,資料出錯比畫面出錯嚴重多了。今天先把『表格怎麼看』學起來,明天我們再來學怎麼用 SQL 操作資料。記住,資料表之間是有關聯的——看懂這些關聯,你就能理解整個系統是怎麼運作的!」 --- ## 重點整理 ### 今天學到的概念 1. **資料庫** = 有組織的資料儲存庫,像超大的 Excel 2. **主鍵** = 每筆資料的身分證號碼,不能重複 3. **外來鍵** = 連到別張表的暗號,建立表格關聯 4. **正規化** = 把表格拆開,避免重複輸入和修改災難 ### LiveFit 四張核心資料表 - **CREDIT_PACKAGE**:堂數方案(7堂、14堂、21堂) - **SKILL**:技能清單(重訓、瑜伽、有氧) - **USER**:會員資料,role 分辨學員/教練 - **CREDIT_PURCHASE**:購買紀錄,外來鍵連到 USER 和 CREDIT_PACKAGE