# 資料庫
### 資料庫三大層次
#### 外部層(Externel level)
為使用者觀點,只看的到部分的內部層,使用者可為應用程式或終端使用者,對資料庫的操作以查詢為主。
#### 概念層(Conceptual level)
為組織群體使用者觀點,定義整個資料庫的資料內容,以關聯的方式存在,定義包含整合性限制條件,但不考慮索引方法,資料庫實際儲存的結構。
#### 內部層(Internal level)
為儲存觀點,描述資料庫實際的儲存結構,定義各種不同型態的紀錄、索引方法。
### 資料模式
| | 資料結構 | 資料運算/處理 | 完整性限制 | 例子 |
| ---------------------------- |:--------------------------------------:|:----------------------------------------------------------:|:--------------------------------------------:|:----------------------:|
| 階層式資料模式(Hierarchical) | 由樹根紀錄及多個<br>有序的樹狀結構組成 | 多為樹狀結構運算,存取資料時從樹<br>根開始沿指標尋找,路徑唯一 | 除了樹根紀錄外,任何子紀錄必須要有父紀錄存在 | IBM IMS/VS |
| 網路式資料模式(Network) | 資料記錄組成的圖形結構 | 多為圖形結構運算 | 除非存在一個父紀錄,否則其子紀錄不得加入 | Codasyl DBTG, IBM IDMS |
關聯式資料模式(Relational)|表格式資料結構|關聯計算可分為值組導向<br>或定義域導向|實體完整性<br>參考完整性<br>定義域限制|Oracle DB, IBM DB2<br> SQL server, Foxpro<br> Access|
### 資料庫正規化
#### 資料庫的三種異常(Anomalies)
* 新增異常:新增時,資料不齊全。
* 刪除異常:刪除時,造成資料遺失。
* 更新異常:更新時,可能會漏改。
#### 初始範例:

#### 1NF
* 每一欄每一格只能有一筆資料
* 每筆資料都有一個唯一的主鍵做識別
* 避免欄位長度無法固定
* 避免出現完全依樣的兩筆資料

#### 2NF
* 消除部分相依,每一個非鍵欄位必須完全相依主鍵(學號=>學生,課程=>學分…),通常「主鍵有多個欄位」組成時會發生「部分功能相依」


#### 3NF
* 消除遞移相依(X->Y,Y->Z 所以X->Z)



### BCNF
* 3NF的改良式(必須滿足3NF)
* 主鍵中的各欄位(單獨看)不可以相依於其他非主鍵的欄位
* 如有獨立相依的情況,新增一個獨立的主鍵欄位。
### System log
紀錄交易中影響資料庫的內容,並儲存於硬碟,以提供交易錯誤或資料庫故障時所需的復原資訊。運作如下:
1. 交易中影響資料庫內容的動作先記錄於主記憶體
2. 主記憶體區塊已滿或是交易已確認,則將內容寫至硬碟的系統日誌
3. 當系統日誌已滿或是到達檢查點時,將所有以確認的動作寫入硬碟的資料庫
### XML資料庫
#### 目的:
XML的前身是HTML,大體是為了呈現內容,而不是標示內容。而XML的目的是標示內容,可以加入自訂的適當標籤。
### 分散式資料庫
#### 同質性分散式資料庫(Homogeneous Distributed Datbase)
是一群集中式資料庫系統的集合,彼此可以網路連結運算,且資料站間的資料有緊密關聯性,每個資料站具有獨立運作的能力,可獨立完成區域應用,彼此也能互相溝通,讓使用者可由任意資料站存取其他資料站的資料,完成整體異動。
##### 優點:
1. 真實反映企業組織的架構
2. 允許區域自主性
3. 降低網路流量
4. 隨企業增長漸進擴充
5. 跨多個資料站整體運算
6. 提升可靠性與可用性
##### 缺點:
1. 內部管理處理複雜
2. 資料機密性和安全性
#### 異質性分散式資料庫(Heterogeneous Distributed Database)
由於同質性資料庫只能達成某一程度的資料共享,嚴格來說還是一個封閉式的資料庫,為了完全的資訊共享,將各種資料庫由下而上整合,將一群集中式或分散式的資料庫整合為一個單獨資料庫並呈現在使用者面前。
##### 問題:
1. 異質性
2. 綱要整合問題
##### 如何建構異質性資料庫
1. 多重資料庫查詢語言系統(MultiDatabase Query Language Systems)
2. 整體綱要多重資料庫系統(Global Schema MultiDatabase Systems)
### NoSQL
#### 特色:
1. NoSQL
2. 無綱要(Schema-free)
3. 高擴充性
4. 最終一致性
#### 類型:
1. 圖學資料庫
2. 文件導向資料庫
3. Key-Value資料庫
4. 記憶體資料庫
### Hadoop
#### 特色:
1. 擁有儲存與處理巨量資料的能力
2. 適用於一般PC架設的叢集環境
3. 平行分散檔案處理獲得快速回應
4. 當節點發生錯誤時,可以及時自動取得備份資料並部屬運算
### 大規模並行分析資料庫(Analytical Massively Parallel Processing Databases)
是針對分析工作負載進行了優化的資料庫,聚合合處理大型數據集,MPP資料庫往往是列式的,這種體系結構能夠使複雜的分析查詢可以更快有效的處理。
這些分析資料庫將其數據及分布在許多機器和節點上,處理大量數據,節點都包含自己的存儲和計算資源,每個節點都可以執行查詢的一部分。
#### 特性:
1. 擅長分析工作
2. 數據集中化
3. 線性可伸縮性
#### 範例:
1. HPE Vertica
2. MemSQL
3. Teradata
4. Amazon Redshift
5. Azure SQL
6. Google BigQuery
7.