《數據庫系統概念》學習筆記——第一章 引言

目錄

第一章 引言

1.1 數據庫系統的應用

1.2 數據庫系統的目標

1.3 數據視圖

1.3.1 數據抽象

1.3.2 實例和模式

1.3.3 數據模型

1.4 數據庫語言

1.4.1 數據操縱語言 DML

1.4.2 數據定義語言 DDL

1.5 關係數據庫

1.5.1 表

1.5.2 數據操縱語言

1.5.3 數據定義語言

1.5.4 來自應用程序的數據庫訪問

1.6 數據庫設計

1.6.1 設計過程

1.6.2 大學機構的數據庫設計

1.6.3 E-R模型

1.6.4 規範化

1.7 數據存儲和查詢

1.7.1 存儲管理器

1.7.2 查詢處理器

1.8 事務管理

1.9 數據庫體系結構

1.10 數據挖掘和信息檢索

1.11 特種數據庫

1.11.1 基於對象的數據模型(object-oriented data model)

1.11.2 半結構化數據模型

1.12 數據庫用戶和管理員

1.12.1 數據庫用戶和用戶界面

1.12.2 數據庫管理員

總結

實踐習題

習題


第一章 引言

1.1 數據庫系統的應用

數據庫管理系統 Database Management System - DBMS: 由一個互相關聯的數據的集合和一組用以訪問這些數據的程序組成。這些數據的集合通常叫做數據庫(Database)。

數據庫系統的目的:

  • 管理大量信息:信息存儲結構的定義 + 信息操作機制的提供
  • 存儲信息的安全性保證:系統崩潰或者有人企圖越權訪問時也能保障信息的安全性。
  • 避免數據被多用戶共享時可能的異常結果

1.2 數據庫系統的目標

  • 文件處理系統 file processing system: (DBMS未出現之前的存儲方式)
    • 永久記錄被存儲在不同的文件中,人們編寫不同的應用程序來將記錄從有關文件中取出或者加入到適當的文件中。
    • 缺點:
      • 數據的冗餘和不一致(data redundancy and inconsistency):不同的文件可能會有不同的結構;相同的信息可能在幾個地方重複存儲導致冗餘;冗餘導致存儲和訪問開銷增大,還可能導致數據不一致性
      • 數據不一致性(data inconsistency):即統一數據的不同副本不一致
      • 數據訪問困難(difficulty in accessing data):無法方便而高效的獲取所需數據
      • 數據孤立(difficulty in accessing data):數據分散在各個文件中,文件的格式可能不同,編寫新的程序來檢索適當數據是困難的。
      • 完整性問題(integrity problem):數據中存儲的數據需要滿足特定的一致性約束(consistency constraint)。傳統的文件處理系統維護數據的一致性約束非常困難。
        • 例如:A轉賬給B,A和B的賬戶的總勁兒要保證不變。
      • 原子性問題(atomicity problem):保證在發生故障時,數據能夠被恢復到故障發生以前的一致的狀態是非常重要的。
        • 原子性:指的是一組操作,要麼都發生,要麼都不發生。而傳統的文件處理系統很難保持原子性。
      • 併發訪問異常 (concurrent-access anomaly):爲了提高系統的總體性能及加快響應速度,許多系統允許多個用戶同時更新數據。這種情況下,併發的更新操作可能會相互影響,導致數據不一致。如何管理協調不同的應用程序訪問,對傳統的文件處理系統而言很困難。
        • 例如:A賬戶餘額100元,用戶1和用戶2同時分別從中取出50和10元,這時如果併發執行就可能導致賬戶A處於一種錯誤的狀態。假設每個取款操作對應執行的程序讀取的是原始賬戶餘額,在其上減去取款的金額再寫會結果。那麼,如果是併發執行,可能它們讀到的餘額都是100元,最後寫會結果可能是50或90元,而不是正確的40元。
      • 安全性問題(security problem):不同的用戶對不同的數據有不同的權限。並非所有用戶都可以訪問你所有數據。傳統的文件系統很難實現管理權限和安全性約束。

1.3 數據視圖

數據庫系統的一個主要目的就是:給用戶提供數據的抽象視圖,即系統隱藏關於數據存儲和維護的某些細節。

1.3.1 數據抽象

數據庫系統通過如下三個層次的抽象,來向數據庫系統用戶屏蔽複雜性: 

 

1.3.2 實例和模式

實例(instance):特定時刻存儲在數據庫中信息的集合稱作數據庫的一個實例。

模式(schema):數據庫的總體設計稱爲數據庫schema。數據庫模式即使發生變化,也不頻繁。

根據前面所探討的不同的抽象層次,數據庫系統可以分爲幾種不同的模式:

  • 物理模式(physical schema):在物理層描述數據庫的設計
  • 邏輯模式(logical schema):邏輯層描述數據庫的設計。程序員使用邏輯模式來構造數據庫應用程序。
  • 數據庫在視圖層也可以有幾種模式,有時稱爲子模式(subschema),它描述了數據庫的不同視圖。

應用程序如果不依賴於物理模式,他們就被稱作具有物理數據獨立性(physical data independence),因此即使物理模式放生改變也不會影響它們。

1.3.3 數據模型

數據模型(data model): 數據模型是數據庫的基礎。數據模型是一個描述數據、數據聯繫、數據語義和一致性約束的概念工具的集合。數據模型提供了一種描述物理層,邏輯層和視圖層數據庫設計的方式。

數據模型的種類:

  • 關係模型(relational model): 關係模型用表的結合來表示數據和數據間的聯繫。關係模型是使用最廣泛的數據模型,當今大量數據庫系統都基於這種關係模型。(第2-8章)

表、列、記錄。

每個表有多個列,每列有唯一的列名。

關係模型是一種基於記錄的模型。基於記錄的模型指的是數據庫是由若干種固定格式的記錄構成的。

每個表包括某種特定類型的記錄。每個記錄類型定義了固定數目的字段(或屬性)。表的列對應於記錄類型的屬性。

  • 實體-聯繫模型(entity-relationship model):E-R模型被廣泛的用於數據庫設計。E-R數據模型基於對現實世界的這樣的一種認識:現實世界由一組稱作實體的基本對象以及這些對象間的聯繫構成。實體是現實世界中可區別於其他對象的一件”事情“或”物體“。(第7章)
  • 基於對象的數據模型(object-based data model):面向對象的數據模型可以看成是對E-R模型增加了封裝、方法(函數)和對象標識等概念後的擴展。它結合了面向對象的數據模型和關係數據模型的特徵。(第22章)
  • 半結構化數據模型(semistructured data model):半結構化數據模型允許那些相同類型的數據項含有不同的屬性集的數據定義。這與前面的數據模型形成對比:在前面數據模型中所有特定類型的數據項必須具有相同額屬性集。可擴展標記語言(eXtensible Markup Language, XML)被廣泛的用於表示半結構化數據結構。(第23章)

1.4 數據庫語言

數據定義語言(data-definition language,DDL):定義數據庫模式。

數據操縱語言 (data-manipulation language,DML):來表達數據庫的查詢和更新。

1.4.1 數據操縱語言 DML

數據操縱語言(DML)使得用戶可以訪問或操縱那些按照某種適當的數據模型組織起來的數據。

訪問類型包括:增刪改查。

兩種基本的數據操縱語言:

  • 過程化DML(procedural DML):要求用戶指定需要什麼數據以及如果獲得這些數據。
  • 聲明式DML(declarative DML,也稱非過程化DML):只要求用戶指定需要獲得什麼數據,而不需要指定如何獲得這些數據。

查詢(Query)是要求對信息進行檢索的語句。DML中涉及信息檢索的部分稱爲查詢語言(query language)。

1.3節中的抽象層次不僅可以用於定義或構造數據,還可以用於操縱數據。

  • 在物理層我們必須定義可高效訪問的算法
  • 在更高的層次,我們則更強調易用性,目標是使得用戶能夠高效的和系統交互。

1.4.2 數據定義語言 DDL

數據定義語言(DDL)用來定義數據庫模式。

DDL以一些指令(語句)作爲輸入,生成一些輸出。

DDL的輸出放在數據字典(data dictionary)中,數據字典包含了元數據(metadata),元數據是關於數據的數據。

可以將數據字典看成一種特殊的表,該表只能由數據庫系統本身來訪問和修改。

在讀取和修改數據前,數據系統要參考數據字典。

數據存儲和定義語言(data storage and definition)是一種特殊的DDL,用來定義數據庫系統所使用的存儲結構和訪問方式。

 

一致性約束(consistency constraint):存儲在數據庫中的數據需要滿足一致性約束。

如:假設大學要求一個系的賬戶餘額不能爲負值。

DDL語言提供了指定這樣的約束的工具,每當數據庫被更新時,數據庫系統都會自動檢查這些約束。

  • 常見的完整性約束有:
  • 域約束(domain constraint):每個屬性都必須對應於一個所有可能的取值構成的域(如:整數型、字符型等)。每當有新數據插入到數據庫中,數據庫系統就能方便的進行域約束的檢測。
  • 參照完整性(referential integrity):一個關係中給定的屬性集上的取值必須也在另一關係的某一屬性集的取值中出現(參照完整性)。數據庫的修改會導致參照完整性的破壞,當參照完整性被破壞時,通常的處理是拒絕執行該操作。例如:每門課程列出的系必須是實際存在department表的dept_name屬性中。
  • 斷言(assertion):一個斷言就是數據庫需要時刻滿足的某一條件。域約束和參照完整性是斷言的特殊形式。
  • 授權(Authorization):授權可以實現不同的用戶在數據庫中不同的數據上允許不同的訪問類型。
  • 讀權限 (read authorization):允許讀取數據,但是不能修改數據
  • 插入權限(insert authorization):允許插入數據,但是不能修改已有數據
  • 更新權限(update authorization):允許修改數據,但是不能刪除數據
  • 刪除權限(delete authorization):允許刪除數據

1.5 關係數據庫

1.5.1 表

表、列、記錄。

每個表有多個列,每列有唯一的列名。

關係模型是一種基於記錄的模型。基於記錄的模型指的是數據庫是由若干種固定格式的記錄構成的。

每個表包括某種特定類型的記錄。每個記錄類型定義了固定數目的字段(或屬性)。表的列對應於記錄類型的屬性。

1.5.2 數據操縱語言

SQL查詢語言是非過程化的。

1.5.3 數據定義語言

通過DDL,可以定義表、完整性約束、斷言等。

1.5.4 來自應用程序的數據庫訪問

爲了訪問數據庫,DML語句需要由宿主語言來執行。有兩種途徑:

  • 通過應用程序接口(過程集),它可以將DML和DDL的語句發送給數據庫,再取回結果。

與C語言一起使用的開放數據庫連接是ODBC標準,是一種常用的應用程序接口標準。

Java數據庫連接(JDBC)標準爲Java語言提供了相應的特性。

  • 通過擴展宿主語言的語法,在宿主語言的程序中嵌入DML調用。通常用一個特殊字符作爲DML調用的開始,並且通過預處理器,稱爲DML預編譯器(DML precompiler),來將DML語句轉變成宿主語言中的過程調用。

1.6 數據庫設計

數據庫設計的主要內容是數據庫模式的設計。

1.6.1 設計過程

  • 全面刻畫預期的數據庫用戶的數據需求

輸出: 用戶需求的規格文檔

參與者:數據庫設計者,領域專家,數據庫用戶

  • 概念設計( conceptual-design)階段

設計者選擇一個數據模型,並運用選定的數據模型的概念,將那些需求轉換成一個數據庫的概念模式。

生成的概念模式提供了企業的詳細概述。

設計者再複審這個模式,確保無衝突,也可以去掉一些冗餘。

概念設計階段需要:

  • 決定數據庫中包括那些屬性,並將這些屬性組織到多個表中;
  • 指出企業的功能需求(功能需求說明書 specification of functional requirement)

解決方案有:

  • E-R模型
  • 規範化
  • 邏輯設計(logical-design)階段:設計者將高層的概念模式映射到要使用的數據庫系統的實現數據模型上
  • 物理設計(physical-design)階段

設計者將邏輯設計階段生成的基於特定於系統的數據庫模式用到物理設計階段。

在該階段中指定數據庫的物理特性,包括:文件組織的形式以及內部的存儲結構。

1.6.2 大學機構的數據庫設計

初始的用戶需求說明可以通過與數據庫用戶交流以及設計者自己對大學機構的分析得到。例如:

  • 大學有多個系,每個繫有自己唯一的名字(dept_name),坐落在特定的建築物(building)中,有自己的經費預算(budget)
  • 每個繫有課程列表.......

1.6.3 E-R模型

E-R模型使用一組稱作實體的基本對象,以及這些對象之間的聯繫。

實體(entity):代表一個物體或一件事情。例如:每個人是一個實體。

實體集(entity set):同一類型的所有實體構成一個實體集。

數據庫中的實體通過屬性(attribute)集合來描述,如:dept_name,building,budget等可以描述大學中的一個系。

聯繫(Relationship)是幾個實體之間的關聯。例如:member將老師和他所在的系關聯起來。

數據庫的邏輯結構(模式)可以使用E-R圖進行圖形化表示。

最常用的繪製E-R圖的方法是採用同意建模語言(Unified Modeling Language, UML)。

UML中,E-R圖如下表示:

  • 實體集 用 矩形框表示,實體名在頭部,屬性名稱在下部
  • 聯繫集用連接一對相關的實體集的菱形表示,聯繫名放在菱形內部。
  • E-R模型還能描繪數據庫必須遵守的對其內容的一些約束。例如:映射基數(mapping cardinality),表示通過某個聯繫集能與一實體進行關聯的實體數目。

1.6.4 規範化

規範化過程:目標是生成一個關係模式集合,使得我們存儲信息時沒有不必要的冗餘,同時又能很輕易的檢索數據。它是設計關係數據庫時常用到的另外一種方法。涉及:

  • 範式(normal form)
  • 函數依賴(functional dependency)

一個不好的設計將包括如下不良特性:

  • 信息重複 ===> 導致浪費存儲空間,更新代價加大
  • 缺乏表達某些信息的能力 ===> 無法直接表達一些信息/概念

空值(null):表示這個值不存在或者未知。未知值可能是缺失(該值存在,但是我們沒有得到)或者不知道(我們不知道該值存不存在)

1.7 數據存儲和查詢

數據庫系統的功能部件大致可分爲:存儲管理器和查詢處理部件。

1.7.1 存儲管理器

存儲管理器是數據庫中負責在數據庫中存儲的低層數據 與 應用程序 以及 向系統提交的查詢 之間 提供接口的部件。

存儲管理器負責與文件管理器進行交互。原始數據通過操作系統提供的文件系統存儲在磁盤上。

存儲管理器將各種DML語句翻譯爲底層文件系統命令。

因此,存儲管理器負責數據庫中數據的存儲、檢索與更新。

 

存儲管理部件包括:

  • 權限及完整性管理器(authorization and integrity manager):檢測是否滿足完整性約束,並檢查試圖訪問數據的用戶的權限。
  • 事務管理器(transaction manager):保證即使發生了故障,數據庫也保持在一致的狀態,並保證併發事務不會發生衝突。事務管理器包括恢復管理器(recovery manager)和併發控制管理器(concurrency-control manager)。
  • 文件管理器(file manager):管理磁盤存儲空間的分配,管理用於表示磁盤上所存儲信息的數據結構
  • 緩衝區管理器(buffer manager):負責將數據從磁盤讀取到內存中來,並決定哪些數據應被緩衝存儲到內存中。緩衝區管理器是數據庫系統中的一個關鍵部分,因爲它使得數據庫能夠處理比內存更大的數據。

 

存儲管理器實現了幾種數據結構,作爲物理實現的一部分:

  • 數據文件(data files):存儲數據庫自身
  • 數據字典(data dictionary):存儲關於數據庫結構的元數據,尤其是數據庫模式。
  • 索引(index):提供數據項的快速訪問。數據庫索引提供了指向包含特定值的數據的指針。

 

1.7.2 查詢處理器

查詢處理器組件包括:

  • DDL解釋器(DDL Integrator):解釋DDL語句並將這些定義記錄在數據字典中。
  • DML編譯器(DML compiler):將查詢語言中的DML語句翻譯成一個執行方案,包括一系列查詢執行引擎能夠理解的低級命令。DML編譯器還能進行查詢優化(query optimization),就是從多個執行方案中找出代價最小的
  • 查詢執行引擎(query evaluation engine):執行有DML編譯器生成的低級命令。

 

1.8 事務管理

事務(transaction):是數據庫應用中完成單一邏輯功能的操作集合。每一個事務是一個既具有原子性,也具有一致性的單元。

ACID: 數據庫管理系統(DBMS)在寫入或更新資料的過程中,為保證事務是正確可靠的,所必須具備的四個特性:

  • 原子性(atomicity):一個事務(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。即,事務不可分割、不可約簡。
  • 一致性(consistency):在事務開始之前和事務結束以後,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設約束觸發器級聯回滾等。
  • 隔離性(Isolation):數據庫允許多個併發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致數據的不一致。事務隔離分爲不同級別,包括未提交讀(Read uncommitted)、提交讀(read committed)、可重複讀(repeatable read)和串行化(Serializable)。
  • 持久性(durability):事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。

 

事務管理器包括的組件有:

  • 恢復管理器(recovery manager)需要保持數據庫的原子性+持久性:

沒有故障發生==》所有事務均成功完成 ===》保持原子性很容易

有故障發生==》事務不總能成功執行 ===》爲了保證原子性,失敗的事務必須對數據庫狀態不產生任何影響===》數據庫需要恢復到該失敗事務開始執行前的狀態===》因此,需要進行故障恢復(failure recovery),即:檢查系統故障並將數據庫恢復到故障發生以前的狀態。

  • 併發管理控制器(concurrency-control manager):

控制併發事物間的相互影響,保證數據庫的一致性

1.9 數據庫體系結構

兩層體系結構:客戶-數據庫系統

三層體系結構:客戶-應用服務器-數據庫系統

 

1.10 數據挖掘和信息檢索

數據挖掘(Data mining):半自動的分析大型數據庫並從中找出有用的模式/知識的過程。

規則(Rule):從數據庫中發現的某些類型的知識可以用一套規則表示。

 

數據倉庫(Data warehouse):從多個數據來源收集數據,建立統一的模式,駐留在單個節點上。

 

信息檢索(Information Retrieval):查詢非結構化的文本數據稱爲信息檢索。

 

信息檢索系統與數據庫系統的異同?

  • 他們都是基於輔助存儲器的數據存儲和檢索。
  • 區別在於他們強調的重點不同。信息檢索系統重點強調:基於關鍵詞的查詢,文檔與查詢的相似度,以及文檔的分析、分類和索引。

 

1.11 特種數據庫

1.11.1 基於對象的數據模型(object-oriented data model)

面向對象模型:在E-R模型的基礎上,增加了封裝、方法(函數)和對象標識。它支持豐富的類型系統,包括集合和結構類型。

面向對象程序設計的關鍵概念:繼承、對象標識、信息封裝、以及對外提供方法作爲訪問對象的接口。

 

現在主流的數據庫廠商都支持對象-關係數據模型(object-relational data model):將面向對象數據模型和關係數據模型的特點結合在一起的數據模型。它擴展了傳統的關係模型,增加了新的特徵如:結構和集合類型,以及面向對象特徵。

1.11.2 半結構化數據模型

半結構化數據模型允許具有相同類型的數據項有不同的屬性集的數據說明。

XML語言在數據交換中的應用非常重要。

 

1.12 數據庫用戶和管理員

使用數據庫的人包括:數據庫用戶 和 數據庫管理員

1.12.1 數據庫用戶和用戶界面

數據庫系統的用戶可分爲四類:

  • 無經驗的用戶(naive user):通過激活事先已經寫好的應用程序同數據庫系統進行交互,如表格界面。
  • 應用程序員(application programmer):百姓捏應用程序的計算機人員。快速應用開發(Rapid Application Development,APD)工具。
  • 老練的用戶(sophisticated user):不通過編程來與系統交互,而是用數據庫查詢語言或者數據分析軟件來實現目的。分析員屬於這一類用戶。
  • 專門的用戶(specialized user):編寫專門的、不適合與傳統數據處理框架的數據庫應用的富有經驗的用戶。這樣的應用包括:計算機輔助設計系統,知識庫和專家系統等。

1.12.2 數據庫管理員

數據庫管理員(database administrator, DBA)對數據庫系統進行集中控制。

DBA的作用包括:

  • 模式定義(schema definition):DBA通過DDL定義數據庫模式
  • 存儲結構及存取方法定義(storage structure and access-method definition)
  • 模式及物理組織的修改(schema and physical-organization modification),以反映需求變化,或爲提高性能而選擇不同的物理組織。
  • 數據訪問授權(granting of authorization for data access): 規定不同用戶可以訪問的數據
  • 日常維護(routine maintenance),包括:
    • 定期備份數據庫
    • 確保正常運轉時所需的空餘磁盤空間,並且在需要時升級磁盤空間
    • 監視數據庫的運行,並確保數據庫的性能不因一些用戶提交了花費時間較多的任務就下降很多。

總結

  • 數據庫管理系統(DBMS):由相互關聯的數據集合 及 一組用於訪問這些數據的程序組成。
  • DBMS的主要目標:爲人們提供方便、高效的環境來存儲和檢索數據
  • 數據庫系統設計用來存儲大量的信息。數據的管理包括:
    • 信息存儲結構的定義,
    • 提供處理信息的機制,
    • 提供存儲信息的安全性保證,以應對系統崩潰或者非授權訪問企圖,以及併發訪問數據可能導致的異常結果。
  • 數據庫系統的一個主要目的:是爲用戶提供數據的抽象視圖,隱藏數據存儲和維護的細節。
  • 數據庫結構的基礎是數據模型(data model)。它是一個用於描述數據、數據之間的聯繫、數據語義和數據約束的概念工具的集合。
  • 數據模型的種類:關係數據模型,面向對象模型、對象-關係模型、半結構化的數據模型
  • 數據操縱語言DML,使得用戶可以訪問和操縱數據的語言。目前廣泛使用的是非過程化的DML,用戶只需要知道需要什麼數據,而不需要知道如何獲得數據
  • 數據定義語言DDL:定義數據庫模式 和 數據的其他特性的語言
  • 數據庫設計主要包括數據庫模式的設計。E-R模型廣泛用於數據庫設計,它提供了一種方便的圖形化方式來觀察數據、聯繫和約束
  • 數據庫由幾個子系統構成:
    • 存儲管理器(storage manager):在數據庫中存儲的低層數據與應用程序和向系統提交的查詢之間提供接口。包括:
      • 事務管理器
        • 故障恢復器
        • 併發管理控制器。
      • 緩衝區管理器
      • 文件管理器
      • 權限及完整性管理器。
    • 查詢處理器(query processor):編譯和執行DDL和DML。包括
      • DDL解釋器
      • DML編譯器
      • 查詢執行引擎。
  • 事務管理(transaction management):保證不管是否有故障發生,數據庫都是處於一致狀態。並保證併發事務的執行不會互相沖突。
  • 數據庫系統的體系結構:集中式/分佈式。
  • 兩層結構/三層體系結構
  • 數據挖掘、信息檢索
  • 四類數據庫用戶 + DBA

 

實踐習題

  • 1. 陳述數據庫系統的兩個缺點

答案:

(a)安裝和配置數據庫系統需要相關知識,金錢,技能和時間

(b)數據庫的複雜性節能會導致性能較差

  • 2. 列舉出Java和C++之類的語言中的類型說明系統和數據庫系統中使用的數據定義語言的5個不同之處。

答案:

(a)DDL語句的執行結果是在數據庫創建一個對象;而編程語言類型聲明只是程序中使用的抽象。

(b)DDL允許指定一致性約束,而編程語言通常不支持這點。約束包括域約束(domain constraint)和參考完整性(referential integrity)

(c)DDL能夠給用戶授權,而編程語言則不支持,最多可以限制屬性和方法是否能夠被其他類訪問。

(d)編程語言的類型說明系統通常包含更豐富的類型;而DDL通常只支持一些基本類型(如:數字和字符串),雖然有一些也能夠支持複雜類型,如:數組和對象。

(e)DDL還能夠指定特定類型的屬性之間的關係;而編程語言允許創建對象的集合。

  • 3. 列出一個企業創建數據庫的6個步驟

答案:

  • 定義一個high-level的企業需求說明書==》指定需求規格文檔
  • 定義屬性,和屬性之間的關係
  • 定義數據的完整性約束
  • 物理層設計
  • 對於需要定期解決的每個已知需求(例如,由職員或Web用戶執行的任務),定義一個用戶界面來執行任務,並編寫必要的應用程序來實現用戶界面。
  • 創建和實現數據庫
  • 6. 在web查找中使用的關鍵字和數據庫查詢很不一樣,列出二者在查詢表達式和查詢結果之間的主要差異。

答案:

web查找是通過一組關鍵字進行查找,其結果通常是一組排序過的URL,以及一些URL相關的消息嫖斷。而數據庫查找支持複雜查詢,其結果通常是一個table。

習題

  • 8. 列出文件處理系統和DBMS的主要差異。

答案:

  • 文件處理系統和DBMS都是由相互關聯的數據集合 及 一組用於訪問這些數據的程序組成。但是DBMS可以向用戶隱藏了物理層和邏輯層的數據訪問;而文件處理系統只隱藏了物理層。
  • DBMS能夠確保一個物理數據片段對所有有權訪問它的程序可用,從而減少數據重複的數量;由文件處理系統中,一個程序編寫的數據可能無法被另一個程序讀取。
  • DBMS能夠允許靈活的訪問數據;而文件處理系統只能允許預先確定的數據訪問
  • DBMS能夠授權不同的用戶不同的訪問權限,並且可以協調不同用戶的併發訪問;而文件處理系統通常設計成允許一個或多個程序同時訪問不同的數據文件,只有當兩個程序對文件具有隻讀訪問權限時,兩個程序才能同時訪問文件。
  • 9. 解釋物理數據獨立性的概念,以及它在數據庫系統中的重要性。

答案:

物理數據獨立性是指修改物理層schema而不必重寫應用程序的能力。這些修改包括從未阻塞的記錄存儲更改爲阻塞的記錄存儲,或者從順序訪問文件更改爲隨機訪問文件。這樣的修改可能是向記錄添加一個字段; 應用程序的視圖層對程序隱藏了此更改。

  • 10. 列出DBMS的五個職責,並說明如果職責沒有被履行會有哪些問題。

答案:

  • 與文件管理器的交互interaction with the file manager.
    • 如果沒有與文件管理器的交互,那麼存儲的文件將不能被訪問
  • 完整性保障integrity enforcement.
    • 如果無法保證一致性約束,那麼將會導致存儲錯誤的信息
  • 安全性保障security enforcement.
    • 如果無法保證安全性,那麼非授權用戶可能能夠訪問數據庫,授權用戶可能訪問到不應該被訪問的數據。
  • 備份和恢復backup and recovery.
    • 如果不能備份和恢復,那麼可能會導致數據永遠地丟失,而不是將數據回滾到故障前的上一個一致的狀態。
  • 併發控制concurrency control.
    • 如果沒有併發控制,多個事務併發執行時,可能會導致不一致的狀態。
  • 11. 給出至少兩個理由說明爲什麼DBMS使用聲明式查詢語言,如SQL,而不是隻提供C或者C++的函數庫來執行數據操作。

答案:

  • 聲明式語言更容易學習
  • 程序員不必擔心如何編寫查詢來確保它們能夠高效地執行,數據庫系統能夠選擇高效的執行計劃。聲明性規範使數據庫系統更容易正確選擇執行技術。
  • 12. 解釋用圖1-4中的表來設計會導致哪些問題

答案:

  • 數據冗餘:如果一個department有多個instructor,那麼building和budget就會重複很多次。更新是需要更新全部的相關數據,否則會導致不一致的狀態。
  • 缺乏表達某些信息的能力:一個department必須有至少一位instructor,否則將無法保留department的building和budget信息。如果沒有instructor時,也可以使用null,但是null的引入會導致額外的操作和處理
  • 如果department中所有的instructor都被刪除,那麼我們也會丟失department的信息。
  • 13. 數據庫管理員的5種主要作用是什麼?

答案:

  • 模式定義(schema definition):DBA通過DDL定義數據庫模式
  • 存儲結構及存取方法定義(storage structure and access-method definition)
  • 模式及物理組織的修改(schema and physical-organization modification),以反映需求變化,或爲提高性能而選擇不同的物理組織。
  • 數據訪問授權(granting of authorization for data access): 規定不同用戶可以訪問的數據
  • 日常維護(routine maintenance),包括:
    • 定期備份數據庫
    • 確保正常運轉時所需的空餘磁盤空間,並且在需要時升級磁盤空間
    • 監視數據庫的運行,並確保數據庫的性能不因一些用戶提交了花費時間較多的任務就下降很多。
  • 14. 解釋兩層和三層體系結構之間的區別。對Web應用來說哪一種更合適?爲什麼?

答案:

在兩層的體系結構中,應用程序運行在client machine上,並直接與服務器上的數據庫系統進行交互;

在三層的體系結構中,應用程序運行在client machine上,與application server進行交互,而不和數據庫系統直接交互。application server與數據庫系統進行通信。

三層體系結構更適合web應用。因爲可以將業務邏輯封裝在application server上,而進行解耦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章