# 超入門資料庫教學
### 資料庫的四種語言
+ 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

### 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. 欄位獨立性:欄位之間不應存在遞移相依
#### 開始正規化
+ 有一張資料表長這樣

+ 第一正規化
+ 一個欄位只能有單一值
+ 消除意義上重複的欄位
+ 決定主鍵
+ 第一正規化後

+ 第二正規化:消除部分相依
+ 第二正規化後

+ 第三正規化:消除遞移相依
+ 第三正規化後

### 資料表
+ 主鍵
+ 外來鍵
+ 資料類型
+ ISNULL
### 效能調校
+ 索引
+ SARG
+ Query plan
### 牛刀小試
+ 有一個線上課程網站,需要你幫忙開 table,描述如下
> 有很多老師在網站上開了很多堂課程,並且每一堂課都會有很多學生報名,每個學生報名課程的時候都會有訂單資料需要紀錄。