資料庫程式設計 – PHP+MySQL 第 十章 善用 View 視界查詢       下一頁

 

第十章 善用 View 視界查詢

內容:

10-1 視界 view 簡介

10-2 視界的產生

  • 10-2-1 水平投影的視界  - 資管系老師

  • 10-2-2 垂直投影的視界 - 簡化學生資料

  • 10-2-3 多表格投影的視界 - 簡化教師資料

10-1 視界(View)簡介

 

10-1-1 視界與資料表

在資料庫的邏輯設計時,為了考慮正規化原則,我們會將資料表分割再分割。原本只需一、兩張資料表就可以達成,說不定將它分割成近十張資料表。滿足越多階層的正規化原則,資料表分割得越細,也造成編寫查詢程式越困難。因此,一般資訊系統只要能滿足第三階層正規化就可以了,不然真的自討苦吃。但僅滿足第三正規化原則,資料表還是會被分割得非常凌亂,有補救方法嗎?有的,就看您如何靈活運用『視界』(View),這就是本章介紹的重點。

資料表在資料庫內佔有一定的儲存空間,是真實存在的表格。然而,視界僅描述表格空間,但沒有真正儲存內容,它是一個或多個資料表的投影組合,也就是說,視界的表格內容還是分散在真實資料表內,它依賴原始資料表而存在。到底如何投影組合,基本上有下列方式:水平投影、垂直投影、水平與垂直投影、表格合併投影,以下分別介紹之。

10-1-2 開啟視界命令

視界是資料表的投影組合,它的產生是由一個或一個以上的資料表所構成,其基本命令格式如下:

基本語法

   

Create view view_name as

Select 欄位_1, 欄位_2, 欄位_3, ..

From 資料表_1, …

Where 條件敘述

Create view simple_students as

Select student_ID, name, sex

From students

Where class_ID = “902113”;

10-2 視界的產生

我們介紹幾種視界產生方法與運用。

10-2-1 水平投影的視界 資管系教師

我們僅取資料表某些記錄(水平排列),則稱為水平投影。如下圖所示,我們由 teachers資料表內,僅取 dep_ID = “11” 資訊管理系的老師。

我們用 SQL 命令建立該 view,並取名為 11_teachers,如下:

create view 11_teachers as

select *

from teachers

where dep_ID = "11"

執行成功後,可以發現在 course_db 上增加了 11_teachers 表,它的型態是 檢視”(view),記憶體空間未知(unknow)。我們利用 SQL 命令觀察 11_teachers 表的內容如何,如下:

Select *

From 11_teachers;

如果使用完,不再需要它時,可將它刪除 SQL 命令(刪除 11_teachers ),如下:

drop view 11_teachers;

10-2-2 垂直投影的視界 減化學生資料

我們擷取資料表某些欄位,如同垂直投影一般。如下圖,一般學生選課管理很少用到電話、電子郵件、地址、電話等資料。因此,我們只要投影有用到的地方即可,譬如姓名、學號、性別。

我們用 SQL 命令建立該 view,並取名為 smp_students,如下:

Create  view  smp_students  as

Select student_ID, name, class_ID, sex

From students;

執行成功後,可以發現在 course_db 上增加了 smp_students 表,它的型態是 檢視”(view)。我們利用 SQL 命令觀察 smp_students 表的內容如何,如下:

Select *

From smp_students;

如果使用完,不再需要它時,可將它刪除 SQL 命令(刪除 11_teachers ),如下:

drop view smp_students;

10-2-3 多表格投影的視界 簡化教師資料

我們可以經由巢狀、合併或混合等技巧,將查詢的結果建立一個視界,這種應用可能更加廣泛。譬如,教師開課大多是系所辦理,很少牽涉到其它系老師,處理老師開課時大多不需要電子郵件、地址等資料,因此,我們可以針對每一個系所,建立一個 view 來專門處理該系所開課使用的教師表格,也許可以減少不需要的資料負荷。譬如開啟一個 11_course_teachers 視界{teacher_ID, name, sex},專門給資管系使用。我們用 SQL 命令建立該 view,並取名為 11_course_teachers,如下:

create view 11_course_teachers as

select teacher_ID, name, sex

from teachers

where dep_ID = (select dep_ID

              from department

              where dep_name="資訊管理系")

執行成功後,可以發現在 course_db 上增加了 11_course_teachers 表,它的型態是 檢視”(view)。我們利用 SQL 命令觀察其內容如何,如下:

Select *

From 11_course_teachers;

如果使用完,不再需要它時,可將它刪除 SQL 命令,如下:

drop view 11_course_teachers;

 

翻轉工作室:粘添壽

 

course_db 關聯圖

資料庫程式設計:

 

 

 

翻轉電子書系列: