---
# System prepended metadata

title: 資料庫基本概念
tags: [Database]

---

# 資料庫基本概念

## 目錄
> :::spoiler 清單
> [TOC]
> :::
---
### 基本觀念
> 常用的基礎格式為csv，以逗點區隔value

### Relational Model (關聯式模型)
> 將data以entities(實體)跟attributes(屬性)進行組織

- Entity (實體)
    > 一個抽象的概念，用於定義並歸納同類物件。
    > e.g. 人、建築物
    > 通常會轉換為table
    
    > 在圖形上通常用方型
    - Attributes (屬性)
        > 實體的特性
        > 通常會轉換為fields
        > record as rows and field as columns
        
        > 在圖形上通常用橢圓形
- Relation (關係)
    > 表達實體之間的意義

    > 在圖形上即為實體之間的連接線

### RDBMS (Relational Database Management System) 關聯式資料庫管理系統
- DB2 (IBM)
- SQL server (Microsoft)
- MySQL (Oracle)
    > 最大宗的開源資料庫，但相對不安全
- PostgreSQL
    > 開源且適合商用的資料庫
> 不同DB之間的語法會有差異，但SQL的語法基本相容

### ACID特性
- Atomicity 原子性
    > 要求交易全部完成或全部取消，確保不可停滯在中間某個環節
- Consistency 一致性
    > 資料庫在交易前後均保持一致性
- Isolation 隔離性
    > 多個並發交易之間互不干擾
- Durability 持久性
    > 交易提交後，對數據庫中數據的修改是永久性的


> 基於ACID原則，以確保交易正確可靠

### Database特性
- logical data structure (邏輯資料模型)
    > 資料以實體儲存，因此需要有載體運作才能存取
- Partitioning (可切割)
    > 資料的存儲是可分離與組合的
- Caching (快取)
    > 支援記憶體快取 
- Data Dictionary (資料字典)
    > 存在內部表格和視圖
- Backup and recovery (備份與還原)
    > 確保在系統故障時的資料恢復救援
- Clustering (集群)
    > 提供高可用性，使系統在集群中一個或多個服務器故障時仍能不間斷地運行


### 邏輯與實體單元
![](https://i.imgur.com/DxBcMrI.png)
- Schma (綱要)
    > 描述資料庫架構規劃
- Tablespace (資料表空間)
    > 基於硬碟分配，可無限擴展
    主要類型有
    - permanent (永久)
        > User不應存取SYSTEM的tablespace
        > SYSAUX不應有任何User區段(segments)，僅供應用程式使用
    - undo (撤回)
        - 一個DB可以有多個undo tablespace，但同一時間只能有一個undo tablespace被啟用
        - 用於撤回操作，同時為DML語句的choose語句提供閱讀一致性，這些choose語句在同一個或一組table上運行
        - "Snapshot too old" 為嘗試查詢數據時，由於undo中沒有足夠的資訊來構建所需的Snapshot(快照)
    - temporary (臨時)
        - 可以將多個temporary tablespace組成群組
        ![](https://i.imgur.com/kpjM064.png)
        - DB中可以有多個Temporary tablespace在線上並啟用
        - Temporary tablespace group必須包含至少一個Temporary tablespace

        - Temporary tablespace group能為單一User的多個sessions(對話)提供不同臨時表空間 
        
- Segment
    > 由一個或多個extent組成
- Extent
    > 由data block組成的連續資料，會保留部分空間紀錄儲存位置連結資訊
- OS block
    > 系統分區
### 邏輯結構
![](https://i.imgur.com/9yg3WE8.png)

### Bigfile tablespace
> 單一大檔案設定

### Optimal Flexible Architecture (OFA)

預設tablespace
![](https://i.imgur.com/5En2n85.png)

### Segment or datafile segregation
區分存放不同tablespaces的原則
> 大小差異較大的資料
> 不同類型的資料
> 不同應用程式
> 使用頻率差異較大的資料
> 靜態與動態的資料

### 資料庫空間配置的思考重點
- Datafiles 放置位置是最大影響因素
- 最大化 I/O trhoughput
- 最大化整體資料庫效能

### 實體關聯模型(Entity-Relationship Model)
- Entity (實體)
- Attribute (屬性)
- Key and Primary Key (PK)
- Relationship

#### Table Layout (資料表佈局)
![](https://i.imgur.com/g53Anlf.png)

![](https://i.imgur.com/EARsoid.png)


> 建立好layout後，創建Table
> Entity -> Table
> Attributes -> Columns
> Keys -> value

### Normalization (正規化)
> 刪除重複和不一致的相依屬性，避於冗餘，提升關聯式資料庫的管理性

#### 正規化架構 3NF (Third Normal Form)
> 正規化的規則，稱為正規形式 (Normal Form)
- 第一正規形式 (1NF)
    > 處理單一table出現重複資料
    - 刪除各個資料表中的重複資料群，也就是不要在一個資料表中使用多個欄位儲存類似的資料。
    - 為每一組關聯的資料建立不同的資料表。
    - 使用主索引鍵 (Key) 識別每一組關聯的資料。
- 第二正規形式 (2NF)
    > 處理多個table用到同樣資料
    - 為可套用於多筆記錄的多組值，建立不同的資料表。
    - 使用外部索引鍵，讓這些資料表產生關聯。
    - 記錄不應依賴資料表主索引鍵之外的索引鍵，但是必要時可使用複合索引鍵。
- 第三正規形式 (3NF)
    > 
    - 刪除不依賴索引鍵的欄位。
    > 記錄中的值如果不是該筆記錄之索引鍵的一部分，就不屬於資料表。 一般而言，只要欄位群組的內容可以套用至資料表中一筆以上的記錄時，您就可以考慮將這些欄位放置在不同的資料表中

### Table
- A table is the method used to store user data
- We have very little control on how data is stored in a regular table
- Rows may stored in any order, depending on the activity on the table
#### Naming Conventions
- Must begin with a letter
- Can be 1-30 characters long
- Must contain only A-Z, a-z, 0-9, _, $, and #
- Must not duplicate the name of another object owned by the same user
- Must not be an Oracle Server reserved word

### 名詞定義
- Instance (實例)
    > 獨立可執行的個體



---
###### tags: `Database`