113 地方特考三等 資訊處理 資料庫應用 考古題詳解
第 一 題20 分
假設在學校的教務系統中,需要記錄學生的基本資料,譬如:學號(ID)、姓名(Name)、就讀系別(Major)、連絡電話(Tel)、通訊地址(Address)等。
請利用 SQL 標準語法定義此表格的綱要(Schema),包含:
- 此表格的名稱「Student」。
- 5 個屬性,分別對應到上述需要記錄的 5 類資料。
- 各屬性合適的資料型態。
- 適合的主鍵(Primary Key)。
- 說明如此定義主鍵的理由。
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料表的綱要定義(Schema),以及如何選擇主鍵。CREATE TABLE 用來建立資料表,欄位定義包含欄位名稱與資料型態;主鍵用來唯一識別每一筆資料,並且不得為 NULL。
解題方法
依題目列出的五類資料建立五個欄位。學號是每位學生的識別碼,適合作為主鍵;姓名、系別、電話與地址可能重複或變動,不適合單獨作為主鍵。
CREATE TABLE Student (
ID VARCHAR(20) NOT NULL,
Name VARCHAR(100) NOT NULL,
Major VARCHAR(100),
Tel VARCHAR(30),
Address VARCHAR(255),
PRIMARY KEY (ID)
);
第 二 題30 分
假設某間大學建立一個關聯式資料庫系統,以表格「Professor」和「Teach」分別記錄老師的個人基本資料和授課資料。
其屬性中,除了薪水(salary)和學期(semester)為整數型態外,其餘皆為字串型態。學期的表示法中,前三位數字為學年,而第四位數字以「1」和「2」分別對應到上下學期。例如,「1131」代表 113 學年度的上學期。
兩個表格各自的屬性如下所示,其中主鍵以底線標註:
Professor(ID, name, department, salary)
Teach(ID, course, semester)
請利用 SQL 查詢指令,分別回答下列問題:
(一) 找出資工系中薪水大於 10 萬元的教授名字。
(二) 找出所有資管系教授於 1131 學期所開設的課程。
(三) 輸出每一個系的教授平均薪水和最高薪水。
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料庫的基本 SQL 查詢,包括:
- 使用
WHERE篩選符合條件的資料列。 - 以多個條件搭配
AND,同時限制系所與學期。 - 使用彙總函數
AVG、MAX,並以GROUP BY按系所分組。 - 判斷查詢所需資料表:教授資料來自
Professor;課程與學期資料來自Teach。
解題方法
(一)資工系中薪水大於 10 萬元的教授名字
姓名與系所、薪水皆在 Professor 表中,因此只需查詢該表,以 WHERE 同時篩選系所及薪水,並用 SELECT 指定輸出姓名。
SELECT name
FROM Professor
WHERE department = '資工系'
AND salary > 100000;
題目指定薪水是整數型態,所以門檻寫為 100000;「大於」使用嚴格比較運算子 >,不包含剛好 100000 元的教授。
(二)資管系教授於 1131 學期開設的課程
系所資訊在 Professor 表,而授課課程與學期在 Teach 表。兩表以 ID 對應,因此需依 ID 連接,再篩選資管系與 1131 學期,最後輸出課程名稱。
SELECT T.course
FROM Professor AS P
JOIN Teach AS T
ON P.ID = T.ID
WHERE P.department = '資管系'
AND T.semester = 1131;
semester 為整數型態,因此條件值寫成 1131,不加引號。此查詢會列出符合條件的授課紀錄;若同一門課有多筆符合紀錄,結果也會出現多次。
第 三 題20 分
假設要為一個音樂串流平臺網站設計資料庫,請根據下列需求利用實體關係模式(Entity-Relationship model)進行規劃,並畫出對應的實體關係圖(ER-diagram):
- 每首歌曲都要記錄其編號、歌名、歌手、作曲人和作詞人。
- 每個會員都要記錄其會員編號、姓名、地址和電話。
- 要記錄每首歌曲何時被收聽,包含收聽的會員、收聽的日期時間等。
- 歌曲分為多個類別,如抒情、搖滾、古典等。
請注意,圖中必須標明實體集合、關係集合、屬性、主鍵和對應數量限制(Mapping Cardinality)等,也可使用擴充實體關係模式(Extended Entity-Relationship model, EER)的表示法。
登入後即可作答並保存紀錄。
核心觀念
本題考查 ER model 的基本構成:
- 實體集合(Entity Set)
- 關係集合(Relationship Set)
- 屬性(Attribute)
- 主鍵(Primary Key)
- Mapping Cardinality,即 、、
- 關係集合本身的屬性設計
題目中的「收聽」具有「收聽日期時間」,因此日期時間應屬於「收聽」關係,而不是會員或歌曲的屬性。
解題方法
先將題目中的名詞判斷為實體集合:
- 歌曲:具有歌曲編號、歌名、歌手、作曲人、作詞人。
- 會員:具有會員編號、姓名、地址、電話。
- 類別:如抒情、搖滾、古典。
- 收聽紀錄:表示會員在特定日期時間收聽某首歌曲。
歌曲與會員之間是多對多關係:
- 一位會員可以收聽多首歌曲。
- 一首歌曲也可以被多位會員收聽。
- 因此為 。
- 收聽日期時間是此關係的屬性。
歌曲與類別之間也是多對多關係:
- 一首歌曲可以屬於多個類別。
- 一個類別可以包含多首歌曲。
- 因此為 。
ER 圖文字表示
下列以矩形表示實體集合、菱形表示關係集合,底線表示主鍵。
┌────────────────────────────┐
│ 歌曲 │
│ PK 歌曲編號 │
│ 歌名 │
│ 歌手 │
│ 作曲人 │
│ 作詞人 │
└─────────────┬──────────────┘
│ 0..N
│
◆─────┴─────◆
│ 歸類 │
◆─────┬─────◆
│ 1..N
│
┌─────────────┴──────────────┐
│ 類別 │
│ PK 類別編號 │
│ 類別名稱 │
└────────────────────────────┘
┌────────────────────────────┐
│ 會員 │
│ PK 會員編號 │
│ 姓名 │
│ 地址 │
│ 電話 │
└─────────────┬──────────────┘
│ 0..N
│
◆─────┴─────◆
│ 收聽 │
│ 收聽日期時間│
◆─────┬─────◆
│ 0..N
│
┌─────────────┴──────────────┐
│ 歌曲 │
│ PK 歌曲編號 │
│ 歌名 │
│ 歌手 │
│ 作曲人 │
│ 作詞人 │
└────────────────────────────┘
其中「歌曲」實體在圖中同時參與「歸類」與「收聽」兩個關係集合,代表同一個歌曲實體集合。
實體與關係說明
1. 歌曲實體集合 Song
屬性如下:
- 主鍵:歌曲編號
- 歌名
- 歌手
- 作曲人
- 作詞人
可表示為:
題目只要求記錄歌手、作曲人與作詞人,因此將其視為歌曲的屬性即可。
2. 會員實體集合 Member
屬性如下:
- 主鍵:會員編號
- 姓名
- 地址
- 電話
可表示為:
3. 類別實體集合 Category
題目列出抒情、搖滾、古典等類別。為使每個類別可被識別,設計:
- 主鍵:類別編號
- 類別名稱
可表示為:
4. 歸類關係集合 Classify
歌曲與類別為多對多關係:
若每首歌曲至少要有一個類別,歌曲端為全參與,基數為 ;類別端可暫時沒有歌曲,基數為 。
其關聯表可表示為:
第 四 題30 分
下面名為「Register」的表格列舉學生修課的表現,其第一列為表格的欄位名稱,而欄位的意義依序為學號(ID)、姓名(Name)、課名(Title)、學分數(Credit)、成績(Grade),並假設此表格的主鍵由「ID」和「Title」兩個屬性所共同組合而成。
| ID | Name | Title | Credit | Grade |
|---|---|---|---|---|
| 11301 | 張三 | 資料庫 | 3 | A |
| 11301 | 張三 | 作業系統 | 3 | C |
| 11302 | 李四 | 資料庫 | 3 | B |
| 11302 | 李四 | 作業系統 | 3 | B |
請說明 BCNF(Boyce-Codd Normal Form)正規化格式的定義,與此表格未符合 BCNF 的原因,以及將此表格經過正規化處理後的結果。
登入後即可作答並保存紀錄。
核心觀念
BCNF(Boyce-Codd Normal Form,鮑依斯-科德正規化)要求:對關係中的每一個非平凡函數相依 ,決定項 都必須是超鍵。非平凡函數相依是指 不包含於 。
題目已指定 Register 的主鍵為 ,因此這組合能唯一識別一筆修課紀錄。BCNF 的判斷重點,是檢查每個函數相依的決定項是否都能唯一識別整筆資料。
解題方法
由欄位意義可得以下函數相依:
- :同一學號對應同一學生姓名。
- :同一課名對應該課的學分數。
- :同一學生修同一課,對應一筆成績。
題目指定主鍵為 ,所以它是超鍵;但 和 個別都不是超鍵,因為一位學生可修多門課,同一門課也可由多位學生修習。
因此, 與 的決定項都不是超鍵,違反 BCNF。表格中的例子也呈現此問題:同一學號的姓名重複出現,同一課名的學分數也重複出現。
正規化結果
依違反 BCNF 的函數相依拆分,得到三個資料表:
Student(學生)
| ID(主鍵) | Name |
|---|---|
| 11301 | 張三 |
| 11302 | 李四 |
Course(課程)