天天看點

《視圖更新與關系資料庫理論》——第1章 抛磚引玉

第1章 抛磚引玉

視圖更新與關系資料庫理論

身教勝于言教。

——samuel johnson《rasselas》(1759)

本書中所涉及的大多數範例都是基于我們耳熟能詳的(可别說是老掉牙的)“供應商與零部件”資料庫而來的。我為再一次把這個老生常談的例子拿出來表示歉意,但正如我在其他地方所說,我認為在各種不同的出版物上使用同樣的例子對于學習而言是有利無害的。就sql來說[1],資料庫包含3張表,更确切地說,是3張基表,分别稱為供應商表s(“suppliers”)、零部件表p(“parts”)和裝置供應表sp(“shipments”)。樣本值如圖1.1所示。

這幾張表簡要的語義如下。

表s的内容列出了簽過合同的供應商。每個供應商有一個唯一的供應商編号sno、可能不唯一的供應商名字sname(盡管圖1.1中的樣本值恰好是唯一的),以及狀态值status和位置city。注意:在本書的其餘部分,我将把“簽過合同的供應商”簡稱為“供應商”。

表p的内容表示各種各樣的零部件。每一種零件都有唯一的零件編号pno、名稱pname、重量weight和用于存儲同種類零部件的位置city。注意:在本書其餘部分,我将把“各種各樣的零部件”簡稱為“零部件”。

表sp的内容表明了供應情況,即顯示了哪種零件被哪一家供應商運輸或供應。每一次運輸都有供應商編号sno、零件編号pno以及數量qty。同時,對于特定的供應商和零件,在某一時期,最多隻能有一次運輸。并且像這樣的供應商編号和零件編号組合對任意一次運輸都是唯一的。注意:本書的其餘部分,我将假設qty值總是大于零的。

《視圖更新與關系資料庫理論》——第1章 抛磚引玉

現在讓我們把重心放在表s上。在本章的其餘部分,我們基本上不再關注表p和表sp,隻在個别地方提及。以下是表s的sql定義。

如前所述,雖然表s是基表,但我們仍然可以定義任意數量的“基于”這個基表的視圖。這裡有兩個例子——倫敦供應商ls(“london suppliers”)和非倫敦供應商nls(“non london suppliers”)。

這兩個視圖的樣本值與圖1.1基表的對應關系如圖1.2所示。

《視圖更新與關系資料庫理論》——第1章 抛磚引玉

我将在本章中以視圖ls和nls為基礎來闡述整個範例,以求抛磚引玉。實際上,我相信視圖都是可更新的,這似乎與本領域内的流行說法和最常見的認知格格不入,但在這裡我将向大家展示一些關于這個問題基本的理念,以及為什麼我會這樣想。(不過請注意:在現階段我隻會對這個吸引眼球的想法做必要的說明,詳細的探讨我們放到後面的章節再來進行。)