介紹資料庫-
# 資料存取的方式
1. 實體紙本-資料櫃
2. 電子試算表-EXCEL
3. 資料庫
# 資料系統的發展
1. 人工作業-紙本方式存在,人工處理 (資料多時不易尋找)
2. 循序儲存-磁帶方式儲存(速度慢)
3. 檔案系統-一般電腦,儲存在硬碟中(資料分別儲存 )
4. 資料庫管理系統(DBMS)
# 檔案資料系統常見的問題
* 資料重複-相同資料存在不同檔案中
* 資料不一致-相同資料存在不同檔案中但內容不同
* 資料存取不易-不同檔案格式,分散在不同地方
* 資料隔離-格式不同+分散,導致檔案不易整合
* 資料完整性-資料有檢查條件,且條件寫在程式中,ex:金額大於1000
* 資料更新一致性-部分資料更新失敗導致
* 多人存取異常-多使用者更改資料導致資料不一致
* 安全性問題-系統當機、硬體損壞、惡意破壞等
__________________________________________________________

# 資料庫管理系統的好處
1. 定義資料儲存的結構
2. 提供資料維護的機制
3. 確保資料的安全
4. 提供多人使用下,同時存取的控制機制
# 資料庫系統的使用者
1. 資料庫管理者-等於資料庫總管
2. 應用程式設計者-透過DML與資料庫互動(寫成語與資料庫互動)
3. 專業使用者-撰寫不同於傳統的特殊資料庫應用程式(資料庫分析師等)
4. 一般使用者-使用他人寫好的程式與資料庫互動
流行開發技術參考:https://roadmap.sh/aspnet-core
# 關聯式資料庫(SQL)與非關聯資料庫(NoSQL)
主要差異在於資料的儲存和整理方式。
非關聯資料庫不會以規則式表格形式儲存資料。而是將資料儲存為個別且未連結的檔案,並可用於複雜的非結構化資料類型,例如文件或互動式多媒體檔案。
## SQL常見的資料庫廠商
* SQL Server
* MySQL(屬於Oracle)
* MariaDB
* Oracle(付費)
* PostgreSQL(免費,號稱比Oracle快)
MariaDB小故事:MySQL原本是開源專案, 被Oracle買走後原本的人就不高興,做了備份,那備份出來的就是MariaDB,所以MariaDB跟MySQL有80%像,但之後會越來越不像,因為被Oracle買走了
這就是他們之間的小故事
## NoSQL常見資料庫廠商
* MongoDB
* Amazon DynamoDB
* Redis(記憶體)
* ElasticSearch
流行開發技術參考:https://roadmap.sh/aspnet-core
## SQL簡介
Structured Query Language(SQL),結構化查詢語言,在1970年代初,由IBM公司開發,用於存取資料庫內的資料。
**資料定義語言(DDL):**
用來產生、修改、刪除表格、索引等
**資料處理語言(DML):**
用來新增、修改、刪除資料等
**資料查詢語言(DQL) :**
使用 SELECT 敘述來查詢資料庫
**資料控制語言(DCL):**
用來管理資料庫或資料表的授權使用等
**交易控制語言 Transaction Control Language:**
多人使用環境的交易控制
PS:不同資料庫管理系統廠商的SQL語法會稍微不同,本課程使用Mircrosoft SQL server的Transact-SQL,(T-SQL)
## 實作
打開SQLServer 2019設定工具-SQLServer服務-MSSQLserver 狀態執行中,表示資料庫開啟中
打開SSMS-windows驗證登入
### SQLserver與Database
SQLserver是一種資料庫管理系統,所以當SQLserver啟動時會啟動一個Database Server,這個Serever裡面可以存放多個Database
不同的應用程式會使用不同得Database
#### 新增資料庫可以分為兩種:
(方法1)
* 資料庫>右鍵>新增資料庫>資料庫名稱>確定
(方法2)
```
* CREATE DATABASE <DB_Name>;
```
註:
1. SQL語法上,習慣在使用保留關鍵字時使用大寫。不過在MSSQL不區分大小寫
2. 使用中括號可以使用保留關鍵字命名,但**不建議**使用
4. 資料庫命名可使用底線,但不可使用空格
5. 執行後須重新整理,資料庫清單才會改變
6. 資料庫命名不可重複
(實際操作)
#### 使用某資料庫
方法一
* 左上角選單選擇
方法二
` USE <DB_Name>例:USE Student;`
註:可觀察左上角選單查看目前使用的資料庫
#### 移除某資料庫
方法一
* 滑鼠對著要刪除的資料庫右鍵
方法二
`* DROP DATABASE <DB_Name>;`
註:刪除時SSMS會自動檢查Databas是否有連線,有連線則無法刪除
若想刪除已連線資料庫>打勾[關閉現有的連線]
#### SQL Server的註解
程式前面加上兩個-- 例:-- DROP DATABASE <DB_Name>;
#### 顯示行數
上方工具-選項-文字編輯器-Transact-SQL-行號打勾
### 資料表(Tables)
#### 簡介:
資料表又稱表格,原文為Tables。
關聯式資料庫中,資料庫裡通常會有很多資料表。
資料表內的資料會有一致的格式。
資料庫與資料庫之間的資料表是互不相通的
### 資料表內容:
1. 直欄(Column):
* 具有相同的資料型態
* 儲存同類型的資料內容
2. 橫列(Row):
* 由1個以上的值欗所組成的一筆資料
* SQL查詢索回傳的資料單位
3. 欄位(Field):
* 直欄與橫列交會的地方
* 儲存資料的地方
4. 主鍵(Primary Key):
* 用來識別每一橫列的欄位,其特性:
* 具有唯一性(Unique)且不可為空值(Not Null)
5. 空值(Null):
* 欄位沒有儲存資料時稱為空值
6. 外來鍵(Foreign Key):
* 用來表示資料表之間的關係
* 一定會牽扯到兩個表格,一個稱為父表、一個稱為子表
### 資料型別(Data Type)
在同一個值欄內的值,資料必須一致
#### SQL server常見的資料型別簡介
* 字元字串:
CHAR、VARCHAR、TEXT
* 萬國碼字元字串(Unicode character strings):
NCHAR、NVARCHAR、NTEXT
* 二進位字串
BINARY、VARBINARY、IMAGE
* 精確數值:
INT、BIGINT、SMALLINT、TINYINT、NUMERIC
* 日期和時間:
DATE、TIME、DATETIME、DATETIME2、SMALLDATETIME
* 近似值(又稱為浮點數):
FLOAT、REAL
#### 字串相關的資料型別
##### 字元字串
* char(n) n必須是1到8000的值,不足自動補空格
* varchar(n|max) n可以是1到8000之間的值,max表示儲存體大小上限,上限2GB
多了var前置英文字,表示儲存資料的長度是否固定。
(範例)
Value char(4) Varchar(4)
##### 萬國碼字元字串
* nchar(n) n必須是1到4000的值,不足自動補空格
* nvarchar(n|max) n可以是1到4000之間的值,max表示儲存體大小上限,上限2GB
差別與上者相同,但多了一個n,
若資料不限英文,盡量都以n開頭
註:在資料庫中每個英文字,數字或符號的儲存空間需要1Byte,非英文或符號則需要2Byte來儲存
儲存單位排序:Bit->Byte->KB->MB->GB->TB->PB
##### 二進位字串
主要用來保留圖片、語音或混合媒體等資料
* BINARY(n) n必須是1到8000的值,不足自動補空格
* VARBINARY(n|max) n可以是1到8000之間的值,max表示儲存體大小上限,上限2GB
* IMAGE 官網不建議使用,未來版本中刪除

註:超過2GB的圖可存在本機,資料庫存路徑
#### 數字相關的資料型態
##### 精確數值
INT
TINYINT