天天看點

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

本節書摘來自華章計算機《計算機系統:核心概念及軟硬體實作(原書第4版)》一書中的第1章,第1.4節,作者:[美] j. 斯坦利·沃法德(j. stanley warford)著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

資料庫系統是app7層最常見的應用之一。資料庫(database)是包括相關聯資訊的檔案彙集,而資料庫系統(database system)(也稱作資料庫管理系統,dbms)是一個讓使用者在資料庫中添加、删除和修改記錄的程式,它也允許對資料庫進行查詢。查詢(query)是對資訊的請求,所請求的資訊通常來自資料庫的不同部分。

這裡有一個資料庫的例子,一個家具制造商利用資料庫維護有關它的庫存、零件供應商和貨運的資訊。查詢可能是請求一個報告,顯示倉庫中制造某一款沙發所需部件的數量。為了生成這個報告,資料庫系統将來自資料庫中不同部分的資訊組合起來,在這個例子中資訊來自庫存檔案和制造該沙發所需原料的檔案。

資料庫系統主要分為3類:層次型系統、網狀型系統和關系型系統。在這3種類型的資料庫系統中,層次型系統是最快的,但對使用者來說是最受限制的。如果你能自然地把資料庫中的資訊組織成像層次圖那樣的結構,這個系統就是很适合的。網狀型系統比層次型系統更靈活,但是對使用者來說,它比關系型資料庫系統更難一些。

關系型系統是三者中最常見的,它是app7層上最靈活也最容易使用的。但是在計算機系統中,沒有免費的午餐,它獲得高靈活性的代價是,相比于其他資料庫系統,它的速度更低。這一節描述關系型dbms背後的基本思想。

1.4.1關系

關系型資料庫系統(relational database system)把資訊存儲在檔案中,對外呈現表結構。每個表有固定的列數和可變的行數。圖1-21是一個關系型資料庫中資訊的示例。每個表有一個名字。名為sor的表包含姐妹會成員的資訊,名為frat的表包含兄弟會成員的資訊。位于app7層的使用者先固定每個表中垂直的列數,再在表體中輸入資訊。水準方向的行數是可變的,這樣能夠在表中增加或者删除人員。

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

在關系型資料庫術語中,表稱作關系(relation),列為屬性(attribute),行叫元組(tuple,與couple同韻)。在圖1-21中,sor和frat是關系,(nancy,jr,math,ny)是sor的一個四元組,因為它有4個元素,而f.major是frat的一個屬性。屬性的域(domain)是該屬性所有可能值的集合。s.major和f.major的域是集合{hist,math,compsci,polysci,english}。

edgar codd

edgar codd于1923年出生在英格蘭多塞特郡波特蘭市,是7個孩子中最小的一個。他曾經就讀于牛津大學,主修數學和化學專業。第二次世界大戰期間他是皇家空軍的飛行員。1948年,他移居紐約,就職于ibm。不滿于參議院約瑟夫·麥卡錫對所謂的共産主義同情者的攻擊,他搬到渥太華居住,20世紀50年代早期生活在這裡。

codd最終在密歇根大學安娜堡分校獲得了計算機科學專業博士學位,然後遷居加利福尼亞州聖何塞市,就職于ibm研究實驗室。1970年,他寫出了裡程碑式的論文“a relational model of data for large shared data banks”(大型共享資料庫的關系資料模型)。在該論文發表時,資料庫系統的使用者接口是在較低的抽象層次上。要執行一個查詢,使用者不得不使用複雜的查詢語言,該語言依賴于資料在磁盤上存儲方式的細節。codd的關系型資料庫語言把使用者放在了較高的抽象層次上,隐藏了原有語言中使用者進行查詢所需要知道的細節。codd、don chamberlin和ray boyce一起發明了結構化查詢語言(structured query language,sql),sql語言已經成為關系型資料庫查詢的标準語言。

對codd來說不幸的是,ibm并沒有像它的競争對手那樣迅速認識到codd工作的商業價值。直到larry ellison以codd的研究為基礎建立了一家公司,就是後來的oracle(甲骨文)。1973年,ibm開始了system r計劃,驗證codd的關系型理論。最終在1978年,codd論文發表整整8年後,ibm開始建構商用關系型資料庫産品。

edgar codd被廣泛認為是關系型資料庫的發明者。1981年,由于他在資料庫管理系統理論和實踐方面基礎而持續的貢獻,他被授予圖靈獎。codd于2003年在佛羅裡達州威廉姆斯島的家中逝世,享年79歲。

1.4.2查詢

請求ron的家鄉州、請求姐妹會中所有二年級學生的名字,這些都是從該資料庫進行查詢的例子。請求一個清單、列出所有具有相同專業的兄弟會和姐妹會成員以及該專業的名字,是另一個查詢的例。

在這個小例子中,你可以手工搜尋資料庫來确定每個查詢的結果。ron的家鄉州是or,beth和allison是姐妹會中二年級學生。第三個查詢制成表格稍微有點難度:beth和jeff是曆史專業;nancy和ron是數學專業,nancy和mehdi也是;robin和jeff是曆史專業等。

有趣的是,每個查詢結果都可以以表格的形式列出來(見圖1-22)。第一個查詢的結果是一個1列1行的表格,第二個查詢的結果是一個1列2行的表格,而第三個查詢的結果是一個3列8行的表格。關系型資料庫是關系的彙集,而一個對關系型資料庫查詢的結果本身也是一個關系!

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

查詢結果本身就是關系這一事實是關系型資料庫系統一個強大的理念。apps7層的使用者把資料庫看作關系的彙集,使用者的查詢就是請求從資料庫現有的關系中衍生出另一個關系。

記住每層都有自己的語言。apps7層關系型dbms的語言是一組對現有關系進行組合或者修改并産生新關系的指令。apps7層的使用者使用這些指令生成想要的結果。圖1-23展示了資料庫、查詢和結果之間的關系。資料庫是輸入,查詢是一組apps7層語言寫的指令。就像在計算機系統中所有層上一樣,三者之間的關系都是一樣的形式:輸入、處理和輸出。

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

本章不描述市場上每種關系型資料庫系統的每種語言,而是描述一種具備這樣一些系統典型特征的簡化語言。大多數關系型dbms語言有許多強大的指令,但是3個指令是最基礎的—select、project和join。

select和project語句類似,因為它們都是對單個關系進行操作,生成一個修改的關系。select語句是從一個特定的表中提取滿足語句中指定條件的行。project語句是根據語句中指定的屬性從一個特定的表中提取一組列。圖1-24說明了語句

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

的結果。

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

project語句可以指定多列,此時屬性用圓括号括起來,并用逗号分隔。例如,

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

從sor關系中選出兩個屬性。

注意,在圖1-24c中(sr, ca)對是關系sor(見圖1-21)中的四元組(robin, sr, hist, ca)和(lulwa, sr, compsci, ca)都有的,但是這一對在關系temp3中不重複出現。關系的一個基本性質就是在任何表中不能有重複的行。project操作符會檢測重複行,不允許它們存在。從數學上說,關系就是元組的集合,集合中的元素不能有重複。

join與select和project不同,它的輸入是兩個表,而不是一個。第一個表的一列和第二個表的一列被指定作為join列。每個表的join列必須有相同的域。兩個表join的結果是一個更寬的表,除了join列隻出現一次以外,它的列和兩個表中原始的列完全相同;結果表的行就是在兩個原始表中在join列有相同元素的那些行。

例如,在圖1-21中,s.major列和f.major有相同的域。語句

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

指定major作為join列,關系sor和frat在這一列上進行合并。圖1-25顯示了兩個表join後的行是那些專業相同的行。sor的四元組(robin, sr, hist, ca)和frat的三元組(jeff, hist, tx)合并在temp4中,因為它們的專業(hist)是一樣的。

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

1.4.3語言結構

app7層語言的語句有如下格式:

select 關系 where 條件 giving 關系

project 關系 over 屬性 giving 關系

join 關系 and 關系 over 屬性 giving 關系

語言的保留字包括

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

正如前面的例子展示的那樣,每個保留字在語言中都有特定的含義。在語言中識别對象的單詞,例如sor和temp2用于辨別關系,而f.state用于辨別屬性,都不是保留字。它們是app7層的使用者随意生成的,稱為辨別符(identifier)。保留字和使用者定義的辨別符在典型計算機系統的所有層語言中都是很常見的。

你知道怎樣用select、project和join語句來生成圖1-22中的查詢結果嗎?第一個詢問ron的家鄉州的查詢語句是

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

第二個詢問姐妹會中所有二年級學生名字的查詢語句是

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統

第三個請求查詢一個清單,表中列出專業一樣的兄弟會和姐妹會的成員以及他們共同的專業,該查詢的語句是

《計算機系統:核心概念及軟硬體實作(原書第4版)》——1.4資料庫系統