資料庫程式設計 – PHP+MySQL :第 十章 善用 View 視界查詢 下一頁 |
第十章 善用 View 視界查詢
10-1 視界(View)簡介
10-1-1 視界與資料表 在資料庫的邏輯設計時,為了考慮正規化原則,我們會將資料表分割再分割。原本只需一、兩張資料表就可以達成,說不定將它分割成近十張資料表。滿足越多階層的正規化原則,資料表分割得越細,也造成編寫查詢程式越困難。因此,一般資訊系統只要能滿足第三階層正規化就可以了,不然真的自討苦吃。但僅滿足第三正規化原則,資料表還是會被分割得非常凌亂,有補救方法嗎?有的,就看您如何靈活運用『視界』(View),這就是本章介紹的重點。 資料表在資料庫內佔有一定的儲存空間,是真實存在的表格。然而,視界僅描述表格空間,但沒有真正儲存內容,它是一個或多個資料表的投影組合,也就是說,視界的表格內容還是分散在真實資料表內,它依賴原始資料表而存在。到底如何投影組合,基本上有下列方式:水平投影、垂直投影、水平與垂直投影、表格合併投影,以下分別介紹之。 10-1-2 開啟視界命令 視界是資料表的投影組合,它的產生是由一個或一個以上的資料表所構成,其基本命令格式如下:
10-2 視界的產生 我們介紹幾種視界產生方法與運用。 10-2-1 水平投影的視界 – 資管系教師 我們僅取資料表某些記錄(水平排列),則稱為水平投影。如下圖所示,我們由 teachers資料表內,僅取 dep_ID = “11” 資訊管理系的老師。
我們用 SQL 命令建立該 view,並取名為 11_teachers,如下:
執行成功後,可以發現在 course_db 上增加了 11_teachers 表,它的型態是 “檢視”(view),記憶體空間未知(unknow)。我們利用 SQL 命令觀察 11_teachers 表的內容如何,如下:
如果使用完,不再需要它時,可將它刪除 SQL 命令(刪除 11_teachers 表),如下:
10-2-2 垂直投影的視界 – 減化學生資料 我們擷取資料表某些欄位,如同垂直投影一般。如下圖,一般學生選課管理很少用到電話、電子郵件、地址、電話等資料。因此,我們只要投影有用到的地方即可,譬如姓名、學號、性別。
我們用 SQL 命令建立該 view,並取名為 smp_students,如下:
執行成功後,可以發現在 course_db 上增加了 smp_students 表,它的型態是 “檢視”(view)。我們利用 SQL 命令觀察 smp_students 表的內容如何,如下:
如果使用完,不再需要它時,可將它刪除 SQL 命令(刪除 11_teachers 表),如下:
10-2-3 多表格投影的視界 – 簡化教師資料 我們可以經由巢狀、合併或混合等技巧,將查詢的結果建立一個視界,這種應用可能更加廣泛。譬如,教師開課大多是系所辦理,很少牽涉到其它系老師,處理老師開課時大多不需要電子郵件、地址等資料,因此,我們可以針對每一個系所,建立一個 view 來專門處理該系所開課使用的教師表格,也許可以減少不需要的資料負荷。譬如開啟一個 11_course_teachers 視界{teacher_ID, name, sex},專門給資管系使用。我們用 SQL 命令建立該 view,並取名為 11_course_teachers,如下:
執行成功後,可以發現在 course_db 上增加了 11_course_teachers 表,它的型態是 “檢視”(view)。我們利用 SQL 命令觀察其內容如何,如下:
如果使用完,不再需要它時,可將它刪除 SQL 命令,如下:
|
翻轉工作室:粘添壽
資料庫程式設計:
翻轉電子書系列:
|