# DBMS Test 1 (3/12) <style> .markdown-body li + li { padding-top: 0 !important; } </style> --- [TOC] --- ## 1. 資料庫管理師 ### 目的 - 資料庫管理師(Database Administrator, DBA) - 維護資料庫系統正常運作 ### 角色 - 中間協調與溝通的角色 - 軟硬體廠商 - 管理者、使用者、開發者 ### 工作 - 執行整個公司的資料管理和處理 - 維護資料庫綱要 - 資料管理 - 維護和監控 DBMS - 安裝和升級 DBMS - 監控和調整資料庫的效能 - 使用者的稽核追蹤 - 容量計畫和選擇儲存裝置 - 備份與回復 - 資料庫是公司重要的資產 ### 資料庫管理系統的優點與缺點 - 優點: - 整合資料管理 - 資料共享 - 減少資料重複(Data Redundancy) - 維持資料的一致性(Data Consistency) - 資料獨立(Data Indenpendence) - 提供單一界面和語言存取資料 - 更多的資料保密、安全管理和控制能力 - 提供多種觀點的資料 - 支援交易管理(Transaction Management) - 具高可靠性(Reliability) - 降低軟體開發的費用 - 缺點: - 龐大的額外費用 - 資料轉換成本 - 安全管理漏洞 - 大幅更改作業流程 - 系統風險增加 - 人為風險增加 ## 2. 檔案處理與資料庫 ### 資料與資料處理 - 資料(Data)、 資訊(Information) - 資料是資訊的原始型態,資訊是處理後的有意義資料 - 資料處理(Data Processing) - 使用特定方法將資料轉換成資訊的過程 - ![](https://i.imgur.com/U4McDP6.png =400x) - 資料階層 1. 位元(Bits) 2. 位元組(Bytes):又稱字元(Character) 3. 欄位(Fields) 4. 記錄(Records):存實體(Entity)的屬性(Attributes) 5. 檔案(Files):增刪查改 6. 資料庫(Database) ### 資料庫 - 資料庫系統(Database System) - ![](https://i.imgur.com/2Owqeom.png =400x) - 中繼資料(Meta-data, The data about data):資料本身的描述資料 - 資料庫(Database):是一個儲存資料的電子文件檔案櫃(An Electronic Filing Cabinet) - 資料庫儲存的資料為: - 結構化(Structed) - 整合的(Integrated) - 相關聯(Interrelated) - 共享(Shared) - 可控制(Controlled) - 長存資料(Persistent Data):長時間儲存的資料,維持或組織正常運作的重要資料 - 資料塑模(Data Modeling) - 目的:將真實東西轉換成模型(Model) - 模型(Model):邏輯關聯資料 - 實體(Entities):真實世界中識別出的東西 - 屬性(Attributes):每一個屬性所擁有的特性 - 關聯性(Relaationships):多個實體間關係 - 一對一(1:1) - 一對多(1:N) - 多對多(M:N) - 資料庫三層次 - 資料模型(Data Model):將真實東西轉換成實體、屬性和關聯性 - 中繼資料(Meta-data):定義資料列(Rows)或記錄(Records)型態,也就是訂一個資料欄位(Columns)或資料項目(Data Item)的型態 - 資料(Data):實際的資料列(Rows)或記錄(Records) ### 檔案處理與資料庫系統 - 檔案系統(File System) - 檔案處理系統(File Processing System) - 重複的資料 - 檔案使用固定欄寬或以特殊分隔字元儲存欄位資料 - 缺點: - 資料的不完整、不一致 - 不同的應用系統監所用到的資料往往關係十分密切 - 維持資料的完整、一致將花費很高的管理費用 - 資料的不安全 - 應用程式的不穩定 - 例:改資料格式、就要改程式、資料檔結構、擷取資料邏輯等 - 資料庫 - ![](https://i.imgur.com/3jEkNfR.png =500x) - 可達成的工作目標 - 消除不當的資料重複 - 維護資料的完整性 - 確保資料的機密性及安全性 - 資料的獨立性、應用程式的穩定性 - 可監督、稽核與追溯 ### 資料庫系統發展的歷史演進 - 1960 年代:網路式資料庫模型、階層式資料庫模型 - 階層式資料庫模型(Hierarchical Database Model) - 樹狀結構組織資料且建立關聯性 - 多對多關聯性(Relationships):可使用重複相同的記錄型態來建立 - 優點: - 建立父子關係,存取較快 - 資料完整性易維護 - 缺點: - 因存取須從父資料表開始,設計者須熟悉資料庫架構 - 資料重複儲存 - 網路式資料庫模型(Network Database Model) - 建立在兩種集合結構(Set Structures) - 記錄集合(A Set of Records) - 鏈結集合(A Set of Links) - 優點: - 避免資料重複 - 資料存取非常快速 - 可從任一資料表使用集合結構存取資料 - 容易建立複雜的資料庫系統和查詢 - 缺點: - 資料表的關聯複雜,維護困難 - 資料庫結構不容易修改,任何資料結構變更會影響很多資料表與存取 - 使用者須熟悉資料庫架構 - 1970 年代:關聯式資料庫模型、實體關聯模型 - 關聯式資料庫模型(Relational Database Model) - 一個儲存記錄的二維表格,其資料結構為關聯表(Relations) - 對比網路式資料庫模型 - 以資料值(Data Values),而非鏈結結構(Links Structures)建立關聯 - 依照表中部分屬性關聯為基準,而非表與表之間相連 - 優點: - 資料庫設計可以專注邏輯觀點,及實體、屬性與關係 - 容易設計和管理、並不需要太多程式設計工作 - 提供表準 SQL 語言,可以定義、查詢和執行資料操作 - 再不同關聯式資料庫間,可以興毅轉換儲存的資料 - 缺點: - 硬體與作業系統花費高昂 - 以資料值而非低階指標建立關聯,存取效率較差 - 不支援複雜結構資料,一個資料表只能實作一個實體,並不能表示多個子實體的集合 - 因易用而造成人為錯誤 - 1980 年代:關聯式資料庫、結構化查詢語言 - 1990 年代:物件導向式資料庫模型、主從架構 ### 資料庫系統架構 - ANSI/SPARC 架構 - 外層(External Level) - 外部資料綱目(External Schema) - 資料庫提供的資料庫外界模型 - 外界看到的資料庫的長相 - RDB:檢視表(Views) - 概念層(Conceptual Level) - 設計概念綱目(Conceptual Schema) - 設計 RDB 資料表 - 實體關係模型(Entity Relation Model) - 正規化(Normalization) - 內層(Internal Level) - 內部資料綱目(Internal Schema) - 硬體儲存策略、內部資料結構 ## 3. 資料庫系統 ### 資料庫環境的四大組成元件 - 四大元件:使用者、資料、軟體、硬體 ![](https://i.imgur.com/ceCtcaw.png =500x) - 終端使用者(End Users):依其權限增刪查改 - 長存資料(Persistent Data):長時間存在的非暫時資料 - 索引資料(Indexes) - 對部分屬性預先進行排序,並提供指標(Pointer)指向實際資料位置 - 使用雜湊函數(Hash Function)或 B 樹(B-Tree) - 交易記錄(Transaction Log):資料庫管理系統自動產生的使用者指令或操作的歷史資料 - 資料庫管理系統(DBMS):一組程式模組用來定義、處理和管理資料庫的資料 - ![](https://i.imgur.com/0SG2p3F.png =400x) - 資料庫管理系統語言(DBMS Languages) - 資料定義語言(Data Definition Language, DDL):定義資料庫結構 - 資料操作語言(Data Manipulation Language, DML):進行增刪查改 - 應用程式(Appilication Program):提供使用者相關介面 - 開發工具(Development Tools):建立資料庫、開發應用程式 - 硬體:可分成集中式或分散式的主從架構 ### ANSI/SPARC 的三層資料庫系統架構 ![](https://i.imgur.com/VlfUf1n.png =400x) - 概念層(Conceptional Level):資料庫管理師觀點 - 資料庫儲存的完整資料,概念上看到的完整資料庫 - RDB:二維表格顯示顯示的資料 - RDB:「關聯表」(Relations)是資料庫所看到的完整資料 - 外部層(External Level):一般使用者觀點 - 不同使用者在資料庫系統所看見的資料,通常只是部分資料庫的資料 - 使用者觀點(User Views):不同呈現方式、不同格式、部分資料庫 - 內部層(Internal Level):實際管點 - 實際資料庫儲存在電腦儲存裝置的資料結構或檔案組織所呈現的資料 - 資料庫管理系統與作業系統的介面 - 目的: - 使用者角度 - 所見的資料是獨立的 - 並不用了解實際資料的儲存方式 - 資料庫管理角度 - 更改實際儲存結構不會影響使用者觀點的資料 - 更改概念層的完整資料庫也不會影響使用者觀點的資料 ### 資料庫綱要 - 資料庫綱要(Database Schema):整個資料庫的描述,即描述整個資料庫儲存資料的定義資料 - ![](https://i.imgur.com/NRudZq2.png =300x) - 資料庫管理系統所管理的資料庫可以分割成: - 綱要(Schema):資料描述的定義資料 - 資料(Data):資料本身 - 三層資料庫綱要: - ![](https://i.imgur.com/4lcHOfW.png =450x) - 外部綱要(External Schema):描述外部層顯示的資料(資料庫的部份資料) - 概念綱要(Conceptual Schema):描述概念層的完整資料庫的資料和其關連 - 概念資料庫設計(Conceptual Database Design):分析使用者資訊,以便定義所需的資料項目 - 資料庫只擁有一個概念綱要 - 內部綱要(Internal Schema):描述內部層實際觀點的資料 - 定義資料的儲存結構、索引 - 資料庫只擁有一個內部綱要 ### 實體與邏輯資料獨立 - 資料獨立(Data Independence):上層綱要不會受下層綱要影響,下層綱要更改不會影響到上層綱要 - 反:資料相依(Data Dependence):如堆疊 - 三層資料庫系統的兩種資料獨立: - 外部與概念對映的邏輯資料獨立(Logical Data Independence) - 更改概念綱要並不用同時更改外部綱要,只需配合修改外部與概念對映的定義 - 概念與內部對映的實體資料獨立(Physical Data Independence) - 更改內部綱要並不用同時更改概念綱要和外部綱要,只需配合修改概念與內部對映的定義 ## 4. 關聯式資料庫系統概覽 ### 前言 - Codd, E.F. 於 1970 年首先提出了關聯式資料模型(Relational Data Model)理論 - 該模型植基於數學中的關聯理論(Relational Theory) - 該模型的基本單位稱作值域(Domain):表示一個欄位屬性 ### 關聯式資料庫的基本術語 - RDBMS(Relational Data Base Management System): - 如:Oracle, DB2, MS SQL Server, Sybase 等 - 資料庫(Data Base) - 資料庫是資料儲存在 RDBMS 裡的一種物件 - 表格空間(Tablespace) - 資料表(Base Table) - 索引(Inedx) - 資料表(Base Table):組成資料庫最基本單位,可視為一個檔案 - ![](https://i.imgur.com/knht2Nj.png =450x) - 資料行(Column):又稱欄位(Field)、屬性(Attribute) - 同一資料行裡的資料都具有相同的屬性 - 在資料表中的順序並沒有意義 - 資料列(Row):又稱為紀錄(Record) - 在資料表中的順序並沒有意義 - 主鍵(Primary Key, PK)、外來鍵(Foreign Key, FK) - 空值(NULL):未知、尚未確定之意 - 非空值(NOT NULL):資料行被宣告(`NOT NULL`)為必須有正確的資料值 - 索引(Index):為了加快資料存取速度,但會增加增刪改時間 - 須建索引的資料欄位 - 主鍵(Primary Key, PK)、外來鍵(Foreign Key, FK) - 常作為查詢條件的欄位 - 索引鍵之順序:遞增(Ascending)、遞減(Descending) - 常見索引技術 - B 樹索引(B-Tree Index) - 雙向鏈結索引(Doubly-Linked List) - 鍵(Key):可以用來唯一(Unique)識別出資料表中某一筆紀錄的欄位或欄位組合 - 候選鍵(Candidate Key):所有可能被選為主鍵的鍵 - 替代鍵(Alternate Key):候選鍵中未被選為主鍵的鍵 - 主鍵(Primary Key, PK):又稱為主要鍵 - 建立資料表時用 `PRIMARY KEY` 來宣告主鍵 - 不可為空值(Null Value) - 對資料表中紀錄之異動或查詢通常是以主鍵操作為主 - 組合鍵(Composite Key):又稱為連結鍵(Concatenated Key),由多個屬性組合和而成的鍵 - 外來鍵(Foreign Key, FK):欄位值來自其他資料表的鍵 - 建立起欄位間「參照(考)」關係 - 藉由兩張資料表間之合併(Join,或稱聯結)來同時擷取多個資料表的資料 - 完整性法則(Integrity Rule):為確保資料完整性(Data Integrity)和一致性,避免因增刪查改引起異常 - 個體完整性(Entity Integrity):作用在單一資料表 - 主鍵 - 必須能識別出唯一的資料列 - 鍵值不可為空,組合鍵之所有欄位值不可為空 - 建立資料表時必須將某欄設定為 `PRIMARY KEY` 來確保個體完整性和唯一性 - 建立索引時可宣告某欄位為 `UNIQUE INDEX` 來確保個體唯一性 - 值域完整性(Domain Integrity):作用在單一資料表 - 限制某欄位之值必須在某一限制範圍或條件約束 - 建立資料表時可用 `CHECK` 來設定條件約束(Constraint) - 參照完整性(Referential Integrity):作用在兩張資料表 - 藉由「主鍵」與「外來鍵」的關係來規範兩張資料表表間資料的完整性 - 使用者定義完整性(User Define Integrity):作用在一或多張資料表 - 依使用者實際需求或商業邏輯來規範 - 手段:條件約束(Constraint)、預存程序(Stored Procedure)、觸發程序(Trigger) - 檢視表(View Table):以使用者之視界(View)所定義虛擬的、暫時性表格 - ![](https://i.imgur.com/vdwNie0.png =450x) - 可來自資料表或檢視表的部分 - 通常不能異動 - 可以透過檢視表的過濾處理,讓不同的使用者看報不同的資料內容 - 結構化查詢語言(Structured Query Language, SQL) - 資料定義語言(Data Definition Language, DDL):定義資料庫的組織架構 - 資料處理語言(Data Manipulation Language, DML):增刪查改 - 資料控制語言(Data Control Language, DCL):授予與撤銷使用權等 - 可使用 RDBMS 的交談式介面下達 SQL 指令,或內嵌(Embedded)在高階程式語言中 ### 關聯式資料庫管理系統應具備的基本功能 - 建立與維護資料庫物件:增刪改資料庫物件 - 如:資料庫(Database)、資料表(Base Table)、檢視表(View)、索引(Index)、預存程序(Stored Procedure)、觸發程序(Trigger)等 - 新增、修改、刪除、查詢資料 - 維護資料一致性、完整性:利用 `NOT NULL`、條件約束等 - 維護資料安全:透過授權、撤銷及檢視表 - 管理交易(Transaction) - 交易(Transaction):一連串不可分割的操作程序之組合 - `COMMIT`:確認交易 - `ROLL BACK`:將所有資料恢復到交易前狀態 - 一個交易不是以 `COMMIT` 正常地結束,就是以 `ROLL BACK` 異常地結束 - 控制交易以確保資歷的正確、一致、完整,避免相互矛盾 - ACID:每一個交易的特性 - 不可部分完成性(Atomicity):或稱單元性 - 一致性(Consistency):資料及內部資料結構不可因交易而產生不一致 - 隔離性(Isolation):交易需相互隔離,互不影響的 - 耐久性(Durability):或稱持續性,因系統問題而進行到一半中斷的交易可以之後自動繼續進行 - 平行控制(Concurrency Control) - 鎖定(Lock)與解鎖(Unlock) - 共用鎖定(Shared Lock):只供多人讀取,無法修改 - 獨佔鎖定(Exclusive Lock):其他人無法讀取或修改 - 鎖定顆粒度(Lock Granularity):表示被鎖定資料多寡,RDBMS 依交易自動調整 - 記錄鎖定(Record Lock):一次只鎖定一筆紀錄 - 資料頁鎖定(Page Lock):一次鎖定一個資料頁(可能多筆記錄) - 資料表鎖定(Table Lock):一次鎖定一張資料表(可能多個資料頁) - 避免死結的產生 - 死結(Lock):互相等待 - 監測交易,制定交易優先序,強迫一方先執行,另一方恢復到交易前重新來過 - 增加單位時間的交易數:提升效益 - 交易隔離等級(Isolation Level) - `READ COMMITTED`:下達 `COMMIT` 前的資料都可以再被其他交易讀取 - `READ UNCOMMITTED`:不會發出共用鎖定,也不允許獨佔鎖定 - `REPEATABLE READ`:交易中,查詢所讀取到的資料都會遭到共用鎖定,以免其他交易更新資料 - `SERIALIZABLE`:正被更新中的資料,無法再被其他交易讀取 - 資料備份(Backup)與復原(Recovery) - 備份與復原所需檔案 - 備份檔(Backup File):可以輕易將資料復原 - 交易記錄檔(Transaction Log File):或稱日誌檔,記錄所有交易完整過程 - 復原處理 - 系統當機之復原處理 - 重開後自動進行 `ROLLBACK` 或 `ROLLFORWARD` - 如果一筆交易裡已經執行過 `COMMIT` 則優先執行 `ROLLFORWARD`,反之執行 `ROLLBACK` 撤回交易 - ![](https://i.imgur.com/73umvgH.png =400x) - ![](https://i.imgur.com/QbpcQyo.png =400x) - 需參考備份檔與交易紀錄檔 - 備份種類: - 資料庫備份:備份整個資料庫 - 差異式資料庫備份:只備份最後一次資料庫備份後被變更的資料 - 資料庫系統目錄 - 資料檔:存放資料表 - 索引檔:存放鍵值及其索引 - 備份檔:存放資料庫備份檔,通常會以磁帶方式異地儲存 - 交易記錄檔:記錄資料庫交易過程 - 系統目錄:本身也是一個資料庫架構,由多個系統資料表組成,記錄使用者、資料庫的相關資訊。