資料庫基礎

基礎

檔案處理容易造成數據重複和不一致,數據庫管理系統能集中管理和控制數據。關聯數據庫以數據表組織記錄和欄,主關鍵碼唯一識別記錄,外鍵碼聯繫不同數據表;規範化減少冗餘,結構化查詢語言的 SELECT 與 WHERE 負責選取和篩選記錄。

適合:中六資訊及通訊科技 · 單元:資料庫與多媒體 · 建議學習路徑第 1/6 課

學完呢課,你會識:
  • 檔案處理易造成數據冗餘與不一致;數據庫配合數據庫管理系統集中管理、控制權限
  • 關聯數據庫以數據表組織數據:欄是屬性,記錄是一條完整資料
  • 主關鍵碼唯一且不留空,識別每條記錄;外鍵碼聯繫數據表,受參照完整性約束
文體:科技知識說明文有聲朗讀

文體小知識:科技知識說明文——講解數據庫的結構、關聯數據庫的設計概念與基本查詢方法,是選修單元「數據庫」的入門知識。

資訊及通訊科技Information & Communication Technology

§課文原文 Passage

1處理大量數據時,許多機構早期以檔案處理方式,把數據分門別類儲存在不同檔案,由各個程式自行讀寫。這種方式容易產生問題:同一份學生資料可能同時存於訓導處和學務處的檔案,資料重複之餘,一旦其中一份更新而另一份漏改,便會出現不一致;程式與檔案結構互相依賴,改動格式時牽一髮而動全身。

2數據庫的出現正是為了解決上述問題。數據庫把機構的數據集中儲存、統一管理,並由數據庫管理系統負責處理新增、查詢、修改和刪除,同時控制存取權限,確保只有獲授權的使用者才能讀寫相關數據。數據庫管理員則負責設定權限、備份與日常維護,令數據安全而一致。

3最常用的關聯數據庫以數據表組織數據:每張數據表對應一類事物,縱行稱為欄,橫列稱為記錄。每張數據表應有主關鍵碼,例如學生表的學生編號,確保每條記錄都能被唯一識別;不同數據表之間則透過外鍵碼聯繫,例如借閱記錄表存有學生編號,指向學生表,形成表與表之間的關聯。

4設計數據庫時要避免數據冗餘,即同一數據在多處重複儲存。規範化就是把數據妥善分配到不同數據表的過程:每張表只描述一類事物,非關鍵資料只儲存一次,需要時以鍵碼聯繫查取。這樣不但節省空間,更新時亦只需改動一處;配合參照完整性,更可防止記錄指向不存在的數據。

5使用者透過數據庫查詢語言與數據庫溝通,最常用的是結構化查詢語言。以查詢圖書為例:先指明要選取哪些欄、來自哪張數據表,再以條件篩選,例如只要分類屬於科學的圖書。掌握這種「選取欄、指定表、按條件篩選」的基本概念,就能理解大至圖書館系統、小至手機通訊錄的數據查詢原理。

1重點摘要 Summary

檔案處理容易造成數據重複和不一致,數據庫管理系統能集中管理和控制數據。關聯數據庫以數據表組織記錄和欄,主關鍵碼唯一識別記錄,外鍵碼聯繫不同數據表;規範化減少冗餘,結構化查詢語言的 SELECT 與 WHERE 負責選取和篩選記錄。

2生字卡 Vocabulary

d
database數據庫

把機構數據集中儲存、統一管理的電子化數據集合,部分教科書亦稱作資料庫。

d
database management system (DBMS)數據庫管理系統

管理數據庫的軟件,負責新增、查詢、修改、刪除數據,並控制存取權限。

r
relational database關聯數據庫

以多張互相聯繫的數據表組織數據的數據庫。

f
field欄

數據表中縱向的一欄,描述記錄的某一屬性,例如書名。

r
record記錄

數據表中橫向的一列,集合一條數據的各項欄值,例如一本書的完整資料。

p
primary key主關鍵碼

唯一識別數據表中每條記錄的欄,不得重複或留空,俗稱主鍵。

f
foreign key外鍵碼

數據表中指向另一張數據表主關鍵碼的欄,用來建立表與表之間的聯繫,俗稱外鍵。

d
data redundancy數據冗餘

同一數據在檔案或數據表中重複儲存的現象(又稱數據冗餘度),容易造成不一致。

n
normalisation規範化

把數據妥善分配到各張數據表、減少冗餘的設計過程,又稱規格化。

S
Structured Query Language (SQL)結構化查詢語言

與關聯數據庫溝通的標準語言,以 SELECT、FROM、WHERE 等敘述進行查詢。

3逐步講解 Steps

  1. 第一步:檔案處理的局限早期機構以檔案處理方式管理數據,各部門自建檔案、各自的程式自行讀寫。舉個例子:同一批學生資料,訓導處與學務處各存一份,學生轉校時只更新其中一份,兩邊資料便不一致;這種數據冗餘不但浪費儲存空間,更會損害數據的可靠性。此外,程式與檔案結構互相依賴,加一個欄位便要改動所有相關程式,維護成本高昂,這些局限最終促成數據庫的出現。
  2. 第二步:數據庫與數據庫管理系統數據庫把整個機構的數據集中儲存,由數據庫管理系統統一管理,程式透過它存取數據,毋須理會底層檔案格式。舉個例子:學校資料庫同時支援點名系統和圖書館系統,兩個系統讀取同一份學生資料,資料只需維護一份。數據庫管理系統還負責控制存取權限,例如教師可查成績但不可讀薪酬表,並提供備份與還原功能,保障數據安全與一致。
  3. 第三步:數據表、記錄與欄關聯數據庫以數據表為基本單位,每張數據表描述一類事物。以圖書表為例:縱向的欄描述屬性,如圖書編號、書名、分類;橫向的記錄代表一本書的完整資料。設計時應為每個欄選定合適的數據類型,例如編號用文字、借出日期用日期。表、記錄、欄三個層次,是理解數據庫結構的基礎,也是設計與查詢時最常用的術語,答題必須運用準確。
  4. 第四步:主關鍵碼與實體完整性每張數據表必須有主關鍵碼,用來唯一識別每條記錄。舉個例子:兩名學生可以同名同姓,但學生編號不會重複,因此學生編號適合作主關鍵碼,姓名則不可。主關鍵碼的值不得重複,亦不得留空,這項要求稱為實體完整性。有時一張表可有多個合適的候選鍵碼,設計時從中選定一個作主關鍵碼,其餘成為備用鍵碼;答題時寫出選定的主關鍵碼並說明唯一與不留空兩項要求即可。
  5. 第五步:外鍵碼與表間關聯關聯數據庫的「關聯」二字,正是指數據表之間透過外鍵碼聯繫。以圖書館為例:借閱記錄表儲存學生編號,指向學生表的主關鍵碼,便知道誰人借了書;同時儲存圖書編號指向圖書表,便知道借了哪本書。外鍵碼的值必須對應主表中真實存在的記錄,這項約束稱為參照完整性;若企圖記錄一個不存在的學生編號,數據庫管理系統應拒絕寫入,從而保障數據正確。
  6. 第六步:數據冗餘與規範化設計數據庫的核心目標之一,是把數據冗餘減至最低。舉個例子:若把書名、作者連同每次借閱都寫進借閱記錄,同一本書的資料便重複幾十次,修改書名時容易漏改。規範化把數據分配到不同數據表:書的資料放圖書表,人的資料放學生表,借閱行為放借閱記錄表,各表以鍵碼聯繫。這樣每項數據只儲存一次,更新一處即可,數據一致性自然提高,儲存空間亦更節省。
  7. 第七步:用 SELECT 與 WHERE 查詢結構化查詢語言是與關聯數據庫溝通的標準語言,DSE 只要求掌握基本概念。查詢的骨架是:SELECT 指明選取哪些欄,FROM 指明數據表,WHERE 按條件篩選記錄。舉個例子:SELECT 書名 FROM 圖書 WHERE 分類 = '科學',意思是從圖書表中選出分類為科學的書名;若省去 WHERE,便會列出全部記錄。理解「選欄、定表、篩選」三個動作,足以讀懂簡單查詢並應付展示式題目。

5例題示範 Example

設計題:學校圖書館現以試算表記錄借書情況,經常出現重複和錯漏。館長決定改用關聯數據庫,設計三張數據表:圖書、學生、借閱記錄。請指出每張表的主關鍵碼,說明表與表之間如何聯繫,並以展示式概念寫出「列出所有逾期未還圖書編號」的查詢。

  1. 先分清三類事物:圖書、學生、借閱行為各是一類,各自成為一張數據表,避免把所有資料塞進同一張表造成冗餘
  2. 為每張表定主關鍵碼:圖書表用圖書編號,學生表用學生編號,借閱記錄表可用借閱編號,或以圖書編號加借出日期組合識別
  3. 用外鍵碼聯繫:借閱記錄表存圖書編號與學生編號,分別指向圖書表與學生表的主關鍵碼,形成一對多關聯
  4. 查詢概念:從借閱記錄表選取圖書編號,條件是歸還日期一欄為空,即 SELECT BookID FROM Loan WHERE ReturnDate IS NULL 的展示式理解
  5. 答案:三張數據表分別為圖書表(主關鍵碼:圖書編號)、學生表(主關鍵碼:學生編號)與借閱記錄表(主關鍵碼:借閱編號)。借閱記錄表內設圖書編號和學生編號兩個外鍵碼,分別指向圖書表和學生表,記錄「誰人借了哪本書」。借閱資料獨立成表後,書名和姓名只儲存一次,數據冗餘大減。要列出逾期未還的圖書,概念上是從借閱記錄表中選取圖書編號,並以 WHERE 篩選尚未歸還(歸還日期為空)的記錄,展示式寫法為 SELECT BookID FROM Loan WHERE ReturnDate IS NULL。評分位在於:三張表分工清晰、主關鍵碼正確、外鍵碼指向正確、查詢三要素齊備。

6常見錯誤 Mistakes

✗ 把「數據庫」與「數據庫管理系統」混為一談。
✓ 數據庫是集中儲存的數據本身;數據庫管理系統是管理它的軟件——兩者是「內容」與「工具」的關係。
✗ 用姓名或班別做主關鍵碼。
✓ 姓名可能重複、班別多人共用,兩者都不唯一;應用學生編號等不重複、不留空的欄做主關鍵碼。
✗ 認為所有數據放進一張大數據表最方便。
✓ 單表設計造成大量數據冗餘,更新時容易不一致;應按事物分表、以外鍵碼聯繫,即規範化的做法。
✗ 以為 WHERE 是用來選取欄位的。
✓ SELECT 負責選欄,WHERE 負責按條件篩選記錄,兩者分工不同,切勿混淆。
✗ 覺得數據冗餘只是浪費空間,無傷大雅。
✓ 冗餘最大的害處是不一致:同一數據多處存放,更新時漏改一處,查出的結果便可能出錯。

75 題快測 Quick check

Q1相比檔案處理,數據庫最主要解決什麼問題?

Q2主關鍵碼須符合哪兩項要求?

Q3外鍵碼的作用是什麼?

Q4SELECT、FROM、WHERE 各負責什麼?

Q5為什麼要把借閱記錄獨立成表?

8重點回顧 Recap

  • 檔案處理易造成數據冗餘與不一致;數據庫配合數據庫管理系統集中管理、控制權限
  • 關聯數據庫以數據表組織數據:欄是屬性,記錄是一條完整資料
  • 主關鍵碼唯一且不留空,識別每條記錄;外鍵碼聯繫數據表,受參照完整性約束
  • 規範化按事物分表、數據只存一次,是減少冗餘的設計方法
  • SQL 查詢三要素:SELECT 選欄、FROM 定表、WHERE 篩選記錄

同級其他科

同一科其他級別