8-3 視界的運用
瞭解視界的產生方法之後,接下來我們用幾個範例來說明視界的運用。 (A) 視界 simple_students 我們用 students 與 classes 兩張資料表來說明資料庫邏輯設計的問題。如下圖所示,原來記錄學生資料只要如同 org_students 表,裡面登錄了該學生在哪一班(class_name),在哪一系(dep_ID)。但班級名稱每年要修改,譬如今年四資三甲,明年就變成四資四甲,所以每年必須變更每一位學生的資料,這樣設計好像不理想。另外,學生可能轉系或轉班,又必須修改 class_name 與 dep_ID,如果僅修改一個地方也是發生錯誤。因此,為了此正規化原則,我們將它拆解成 students 與 classes 兩張資料表,每年只要修改 classes 內的 class_name,則全校學生資料隨之修改。此設計好像不錯,但延伸了新的問題,我們查詢學生資料時,大多以班級大多以代碼表示,但如要顯示班級名稱時,又要結合 classes 表格才能達成。再思考下一個問題,一般處理學生選課事務時,很少用到地址、電子郵件與電話,何不建立一個 view,來回復原來 org_students 的需求就好,如圖中的 simple_students。
在本書 course_db 已建立了此資料表,其結構 {class_ID, student_ID, name, sex},SQL 命令如下:(輸入之前,必須先把原有的刪除)
(B) 視界 simple_teachers 同樣的問題也發生在 teachers 與 department 資料表。如下圖所示,我們將它們回復成 simple_teachers 視界,不但能方便運用,也不會破壞原來的設計原則。
在本書 course_db 已建立了此資料表,其結構 {dep_name, teacher_ID, name},SQL 命令如下:(輸入之前,必須先把原有的刪除)
8-3-2 範例研討 - 查詢教師開課課程 (A) 系統功能:ExA_1 請查詢『粘添壽』老師這學期開了那些課程,請依照班級名稱、課程名稱、必選修、學分數支順序印出。 (B) 系統分析 此題目,我們在 6-4-1 節討論過,我們改用 simple_teachers 視界來處理,如下:
(C) SQL 命令: 將上圖的關連,以 SQL 命令如下:
(A) 系統功能:ExA_2 請查詢這學期 "粘添壽" 老師所開 "資料庫管理系統" 課程的學生名冊。 (B) 系統分析 此題目,我們用原資料表做過,現使用 simple_teachers與 simple_students 兩個 view 表格,來處理看看,下圖是資料表關連圖,假設:查詢選修粘添壽老師所開 "資料庫管理系統" 的學生名冊。
(C) SQL 命令:(查詢選修粘添壽老師所開 "資料庫管理系統" 的學生名冊) 將上圖的關連,以 SQL 命令如下:
|
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
翻轉電子書系列:
|