# 超入門資料庫教學 ### 資料庫的四種語言 + DML + INSERT, UPDATE, DELETE + DDL + CREATE, ALTER, DROP + DCL + GRANT, REVOKE, COMMIT, ROLLBACK + TRANSACTION 概念 + DQL + SELECT + 輔助指令:GROUP BY, ORDER BY, WHERE, DISTINCT, COUNT... 等等 + 進階查詢:INNER JOIN, LEFT JOIN, RIGHT JOIN ![](https://i.imgur.com/7A5ERr0.png) ### SQL vs ORM + ORM (Object Relational Mapping),在『資料庫』和『 Model』兩者之間做關聯,讓使用者可以用熟悉的程式語言操作資料庫,而不用碰到 SQL + 優點 + 安全性 + 簡化性 ```CSharp users = User.where(user => user.age == 30) ``` + 通用性 + 缺點 + 效能 + 學習曲線高 + 複雜查詢維護性低 + SQL、ORM 我該用哪一個? ### ER Model ### 關聯表的正規化 + 為何要正規化 1. 提昇儲存資料與資料庫操作效率 2. 減少資料異常 3. 使資料庫維護更容易 + 正規化的資料庫特性 1. 欄位唯一性:每個欄位只儲存一項資料 2. 主關鍵欄位:每筆資料都擁有一個主鍵,來區別這些資料 3. 功能關聯性:欄位之間的關聯應該要明確 4. 欄位獨立性:欄位之間不應存在遞移相依 #### 開始正規化 + 有一張資料表長這樣 ![](https://i.imgur.com/Tp6GKTR.png) + 第一正規化 + 一個欄位只能有單一值 + 消除意義上重複的欄位 + 決定主鍵 + 第一正規化後 ![](https://i.imgur.com/zMCDswJ.png) + 第二正規化:消除部分相依 + 第二正規化後 ![](https://i.imgur.com/hJeUWvd.png) + 第三正規化:消除遞移相依 + 第三正規化後 ![](https://i.imgur.com/zR3G7OJ.png) ### 資料表 + 主鍵 + 外來鍵 + 資料類型 + ISNULL ### 效能調校 + 索引 + SARG + Query plan ### 牛刀小試 + 有一個線上課程網站,需要你幫忙開 table,描述如下 > 有很多老師在網站上開了很多堂課程,並且每一堂課都會有很多學生報名,每個學生報名課程的時候都會有訂單資料需要紀錄。