廣州微信網站建設哪家好經典軟文案例或軟文案例
第一章
數(shù)據庫系統(tǒng)概述
數(shù)據庫的4個基本概念
數(shù)據、數(shù)據庫、數(shù)據庫管理系統(tǒng)、數(shù)據庫系統(tǒng)是與數(shù)據庫技術密切相關的4個基本概念
數(shù)據
數(shù)據是數(shù)據庫中存儲的基本對象,描述事物的符號記錄稱為數(shù)據,數(shù)據的表現(xiàn)形式還不能完全表達其內容,需要經過解釋,數(shù)據和關于數(shù)據的解釋是不可分的,數(shù)據的解釋是指對數(shù)據含義的說明,數(shù)據的含義稱為數(shù)據的語義,數(shù)據與其語義是不可分的。
數(shù)據庫
存放數(shù)據的倉庫。嚴格來說,數(shù)據庫是長期儲存在計算機內、有組織的、可共享的大量數(shù)據的集合。數(shù)據庫中的數(shù)據按一定的數(shù)據模型組織、描述和儲存,具有較小的冗余度、較高的數(shù)據獨立性和易擴展性,并可為各種用戶共享。
數(shù)據庫數(shù)據具有永久存儲、有組織和可共享三個特點。
數(shù)據庫管理系統(tǒng)
數(shù)據庫管理系統(tǒng)是位于用戶和操作系統(tǒng)之間的一層數(shù)據管理軟件,數(shù)據庫管理系統(tǒng)和操作系統(tǒng)一樣是計算機的基礎軟件,主要功能包括:
1.數(shù)據定義功能
2.數(shù)據組織、存儲和管理
3.數(shù)據操縱功能
4.數(shù)據庫的事務管理和運行管理
5.數(shù)據庫的建立和維護功能
6.其他功能
數(shù)據庫系統(tǒng)
數(shù)據庫系統(tǒng)是由數(shù)據庫、數(shù)據庫管理系統(tǒng)(及其應用開發(fā)工具)、應用程序和數(shù)據庫管理員組成的存儲、管理、處理和維護數(shù)據的系統(tǒng)
數(shù)據管理技術的產生和發(fā)展
數(shù)據管理是指對數(shù)據進行分類、組織、編碼、存儲、檢索和位數(shù),它是數(shù)據處理的中心問題,而數(shù)據的處理是指對各種數(shù)據進行收集、存儲、加工和傳播的一系列活動的總和。在應用需求的推動下,在計算機硬件、軟件發(fā)展的基礎上,數(shù)據管理技術經歷了人工管理、文件系統(tǒng)、數(shù)據庫系統(tǒng)三個階段。
人工管理階段
特點:
1.數(shù)據不保存
2.應用程序管理數(shù)據
3.數(shù)據不共享
4.數(shù)據不具有獨立性
文件管理階段
特點:
1.數(shù)據可以長期保存
2.由文件系統(tǒng)管理數(shù)據
3.數(shù)據共享性差,冗余度大
4.數(shù)據的獨立性差
數(shù)據庫系統(tǒng)階段
用數(shù)據庫系統(tǒng)來管理數(shù)據比文件系統(tǒng)具有更明顯的優(yōu)點,從文件系統(tǒng)到數(shù)據庫系統(tǒng)標志著數(shù)據管理技術的飛躍
人工管理階段 | 文件系統(tǒng)階段 | 數(shù)據庫系統(tǒng)階段 | ||
---|---|---|---|---|
背景 | 應用背景 | 科學計算 | 科學計算、數(shù)據管理 | 大規(guī)模數(shù)據管理 |
硬件背景 | 無直接存儲設備 | 磁盤、磁鼓 | 大容量磁盤、磁盤陣列 | |
軟件背景 | 沒有操作系統(tǒng) | 有文件系統(tǒng) | 有數(shù)據庫管理系統(tǒng) | |
處理方式 | 批處理 | 聯(lián)機實時處理、批處理 | 聯(lián)機實時處理、分布處理、批處理 | |
特點 | 數(shù)據的管理者 | 用戶(程序員) | 文件系統(tǒng) | 數(shù)據庫管理系統(tǒng) |
數(shù)據面向的對象 | 某一應用程序 | 某一應用 | 現(xiàn)實世界(一個部門、企業(yè)、跨國組織等) | |
數(shù)據的共享程度 | 無共享、冗余度極大 | 共享性差,冗余度大 | 共享性高,冗余度小 | |
數(shù)據的獨立性 | 不獨立、完全依賴于程序 | 獨立性差 | 具有高度的物理獨立性和一定的邏輯獨立性 | |
數(shù)據的結構化 | 無結構 | 記錄內有結構,整體無結構 | 整體結構化,用數(shù)據模型描述 | |
數(shù)據控制能力 | 應用程序自己控制 | 應用程序自己控制 | 由數(shù)據庫管理系統(tǒng)提供數(shù)據安全性、完整性、并發(fā)控制和恢復能力 |
數(shù)據庫系統(tǒng)的特點
1.數(shù)據結構化
數(shù)據庫系統(tǒng)實現(xiàn)整體數(shù)據的結構化,這是數(shù)據庫的主要特征之一,也是數(shù)據庫系統(tǒng)與文件系統(tǒng)的本質區(qū)別。所謂“整體”結構化是指數(shù)據庫中的數(shù)據不再僅僅針對某一個應用,而是面向整個組織和企業(yè);不僅數(shù)據內部是結構化的,而且整體式結構化的,數(shù)據之間是有聯(lián)系的。
2.數(shù)據的共享性高、冗余度低且易擴充
數(shù)據共享可以大大減少數(shù)據冗余,節(jié)約存儲空間。數(shù)據共享還能夠避免數(shù)據之間的不相容性與不一致性。由于數(shù)據面向整個系統(tǒng),是有結構的數(shù)據,不僅可以被多個應用共享使用,而且容易增加新的應用,這就使得數(shù)據庫系統(tǒng)彈性大、易擴充。
3.數(shù)據獨立性高
數(shù)據獨立性是借助數(shù)據庫管理數(shù)據的一個顯著優(yōu)點,它已經成為數(shù)據庫領域中一個常用的術語和重要概念,包括數(shù)據的物理獨立性和邏輯獨立性。
物理獨立性是指用戶的應用程序與數(shù)據庫中數(shù)據的物理存儲是相互獨立的。
邏輯獨立性是指用戶的應用程序與數(shù)據庫的邏輯結構是相互獨立的。
數(shù)據獨立性是由數(shù)據庫管理系統(tǒng)提供的二級映像功能來保證的。
4.數(shù)據由數(shù)據庫管理系統(tǒng)統(tǒng)一管理和控制
1.數(shù)據的安全性保護
數(shù)據的安全性保護是指保護數(shù)據防止不合法使用造成數(shù)據泄密和破壞
2.數(shù)據的完成性檢查
數(shù)據的完整性指數(shù)據的正確性、有效性和相容性
3.并發(fā)控制
4.數(shù)據庫恢復
綜上所述,數(shù)據庫是長期儲存在計算機內,有組織的、可共享的大量數(shù)據的集合。它可以供各種用戶共享,具有最小冗余度和較高的數(shù)據獨立性。數(shù)據庫系統(tǒng)在數(shù)據庫建立、運用和維護時對數(shù)據進行統(tǒng)一控制,以保證數(shù)據的完整性和安全性,并在多用戶同時使用數(shù)據庫時進行并發(fā)控制,在發(fā)生故障后對數(shù)據庫進行恢復。
數(shù)據庫系統(tǒng)的出現(xiàn)使信息系統(tǒng)從以加工數(shù)據的程序為中心轉向圍繞共享的數(shù)據庫為中心的新階段,這樣既便于數(shù)據的集中管理,又能簡化應用程序的研制和維護,提高了數(shù)據的利用率和相容性,提高了決策的可靠性。
數(shù)據模型
數(shù)據模型也是一種模型,它是對現(xiàn)實世界的數(shù)據特征的抽象。數(shù)據模型是數(shù)據庫系統(tǒng)的核心和基礎。
兩類數(shù)據模型
數(shù)據模型應該滿足三方面要求:一是能夠比較真實地模擬現(xiàn)實世界,而是容易為人所理解,三是便于在計算機上實現(xiàn)。分為概念模型,邏輯模型和物理模型。
其中第一類是概念模型,第二類是邏輯模型和物理模型。
第一類邏輯模型,也成為信息模型,它是按用戶的觀點來對數(shù)據和信息建模,主要用于數(shù)據庫設計。
第二類中的邏輯模型主要包括層次模型、網狀模型、關系模型、面向對象數(shù)據模型、對象關系數(shù)據模型、半結構化數(shù)據模型等。它是按計算機系統(tǒng)的觀點對數(shù)據建模,主要用于數(shù)據庫管理系統(tǒng)的實現(xiàn)。
第二類中的物理模型是對數(shù)據最底層的抽象,它描述數(shù)據在系統(tǒng)內部的表示方式和存取方法,或在磁盤或磁帶上的存儲方式和存取方法,是面向計算機系統(tǒng)的。物理模型的具體實現(xiàn)是數(shù)據庫管理系統(tǒng)的任務,數(shù)據庫設計人員要了解和選擇物理模型,最終用戶則不必考慮物理級的細節(jié)。
數(shù)據模型是數(shù)據庫系統(tǒng)的核心和基礎。
建立步驟為:首先將現(xiàn)實世界抽象為信息世界,然后將信息世界轉換為機器世界
從現(xiàn)實世界到概念模型的轉換是由數(shù)據庫設計人員完成的;從概念模型到邏輯模型的轉換可以由數(shù)據庫設計人員完成,也可以用數(shù)據庫設計工具協(xié)助設計人員完成;從邏輯模型到物理模型的轉換主要是由數(shù)據庫管理系統(tǒng)完成的。
概念模型
信息世界中的基本概念
1.實體
客觀存在并可相互區(qū)別的事物稱為實體。
2.屬性
實體所具有的某一特性稱為屬性。
3.碼
唯一標識實體的屬性集稱為碼。
4.實體型
用實體名及其屬性名集合來抽象和刻畫同類實體,稱為實體型。
5.實體集
同一類型實體的集合稱為實體集。
6.聯(lián)系
實體之間的聯(lián)系通常指不同實體集之間的聯(lián)系。實體之間的聯(lián)系有一對一、一對多和多對多等多種類型。
概念模型的一種表示方法:實體-聯(lián)系方法
數(shù)據模型的組成要素
一般地講,數(shù)據模型是嚴格定義的一組概念的集合,這些概念精確地描述了系統(tǒng)的靜態(tài)特性、動態(tài)特性和完整性約束條件。因此數(shù)據模型通常由數(shù)據結構、數(shù)據操作和數(shù)據的完整性約束條件三部分組成。
數(shù)據結構
數(shù)據結構描述數(shù)據庫的組成對象以及對象之間的聯(lián)系。數(shù)據結構是所描述的對象類型的集合,是對系統(tǒng)靜態(tài)特征的描述。
數(shù)據操作
數(shù)據操作是指對數(shù)據庫中各種對象(型)的實例(值)允許執(zhí)行的操作的集合,包括操作及有關的操作規(guī)則。數(shù)據庫主要有查詢和更新(包括插入、刪除、修改)兩大類操作,數(shù)據操作是對系統(tǒng)動態(tài)特征的描述。
數(shù)據的完整性約束條件
數(shù)據的完整性約束條件是一組完整性規(guī)則。完整性規(guī)則則是給定的數(shù)據模型中數(shù)據及其聯(lián)系所具有的制約和依存規(guī)則,用以限定符合數(shù)據模型的數(shù)據庫狀態(tài)以及狀態(tài)的變化,以保證數(shù)據的正確、有效和相容。
數(shù)據模型應該反映和規(guī)定其必須遵守的基本的和通用的完整性約束條件。
數(shù)據模型還應該提供定義完整性約束條件的機制,以反映具體應用所牽涉的數(shù)據必須遵守的特定的語義約束條件。
常用的數(shù)據類型
層次模型
網狀模型
關系模型
面向對象數(shù)據模型
對象關系數(shù)據模型
半結構化數(shù)據模型
其中,層次模型和網狀模型統(tǒng)稱為格式化模型。
層次模型
層次模型用樹形結構來表示各類實體以及實體間的聯(lián)系。
1.層次模型的數(shù)據結構
在數(shù)據庫中定義滿足下面兩個條件的基本層次聯(lián)系的集合為層次模型:
(1)有且只有一個節(jié)點沒有雙親結點,這個節(jié)點稱為根節(jié)點。
(2)根以外的其他節(jié)點有且只有一個雙親節(jié)點。
每個記錄類型可包含若干個字段,這里記錄類型描述的是實體,字段描述實體的屬性。各個記錄類型及其字段都必須命名。各個記錄類型,同一記錄類型中各個字段不能同名。每個記錄類型可以定義一個排序字段,也成為碼字段,如果定義該排序字段的值是唯一的,則它能唯一地標識一個記錄值。
一個層次模型在理論上可以包含任意有限個記錄類型和字段,但實際的系統(tǒng)都會因為存儲容量或實現(xiàn)復雜度而限制層次模型中包含的記錄類型個數(shù)和字段的個數(shù)。
在層次模型中,同一雙親的子女節(jié)點稱為兄弟節(jié)點,沒有子女節(jié)點的節(jié)點稱為葉節(jié)點。
層次模型像一顆倒立的樹,節(jié)點的雙親是唯一的。
層次模型的一個基本特點是,任何一個給定的記錄值只能按其層次路徑查看,沒有一個子女記錄值能夠脫離雙親記錄值而獨立存在。
2.層次模型的數(shù)據操縱與完整性約束
層次模型的操縱主要有查詢、插入、刪除和更新。進行插入、刪除、更新操作時要滿足層次模型的完整性約束條件,進行插入操作時,如果沒有相應的雙親結點值就不能插入它的子女節(jié)點值,進行刪除操作時,如果刪除雙親節(jié)點值,則相應的子女節(jié)點值也將被同時刪除。
3.層次模型的優(yōu)缺點
優(yōu)點:
1.層次模型的數(shù)據結構比較簡單清晰。
2.層次數(shù)據庫的查詢效率高,其性能由于關系數(shù)據庫,不低于網狀數(shù)據庫。
3.層次數(shù)據模型提供了良好的完整性支持。
缺點:
1.現(xiàn)實世界有很多聯(lián)系是非層次性的
2.如果一個節(jié)點具有多個雙親結點,用層次模型表示這類關系就很笨拙,只能通過引入冗余數(shù)據或創(chuàng)建非自然的數(shù)據結構來解決,對插入和刪除的限制比較多,因此應用程序的編寫比較復雜。
3.查詢子女節(jié)點必須通過雙親節(jié)點。
4.由于結構嚴密,層次命令趨于程序化。
網狀模型
網狀模型的典型代表是DETG系統(tǒng),亦稱CODASYL系統(tǒng)。
1.網狀模型的數(shù)據結構
在數(shù)據庫中,把滿足以下兩個條件的基本層次聯(lián)系集合稱為網狀模型:
(1)允許一個以上的節(jié)點無雙親。
(2)一個節(jié)點可以有多于一個的雙親。
網狀模型是一種比層次模型更具普遍性的結構。它去掉了層次模型的兩個限制,允許多個節(jié)點沒有雙親節(jié)點,允許節(jié)點有多個雙親節(jié)點;此外它還允許兩個節(jié)點之間有多種聯(lián)系(稱之為復合聯(lián)系)。因此,網狀模型可以更直接地去描述現(xiàn)實世界,而層次模型實際上是網狀模型的一個特例。
層次模型中子女節(jié)點與雙親節(jié)點的聯(lián)系是唯一的,而在網狀模型中這種聯(lián)系可以不唯一。
2.網狀模型的數(shù)據操縱與完整性約束
網狀模型一般來說沒有層次模型那樣嚴格的完整性約束條件,但具體的網狀數(shù)據庫系統(tǒng)對數(shù)據操縱都加了一些限制,提供了一定的完整性約束。
3.網狀模型的優(yōu)缺點
優(yōu)點:
1.能夠更為直接地描述現(xiàn)實世界。
2.具有良好的性能,存取效率高。
缺點:
1.結構比較復雜,而且隨著應用環(huán)境的擴大,數(shù)據庫的結構就變得越來越復雜,不利于用戶最終掌握。
2.網狀模型的DDL,DML復雜并且要嵌入某一種高級語言中,用戶不易掌握,不容易使用。
3.由于記錄之間的聯(lián)系是通過存取路徑實現(xiàn)的,應用程序在訪問數(shù)據時必須選擇適當?shù)拇嫒÷窂?#xff0c;因此用戶必須了解系統(tǒng)結構的細節(jié),加重了編寫應用程序的負擔。
關系模型
1.關系模型的數(shù)據結構
關系模型與以往模型不同的是,它是建立在嚴格的數(shù)學概念的基礎上的。從用戶觀點看,關系模型由一組關系組成,每個關系的數(shù)據結構只是一張規(guī)范的二維表。
**關系:**一個關系對應通常說的一張表。
**元組:**表中的一行即為一個元組。
**屬性:**表中的一列即為一個屬性,給每一個屬性起一個名稱即屬性名。
**碼:**也成為碼鍵,表中的某個屬性組,它可以唯一確定一個元組。
**域:**域是一組具有相同數(shù)據類型的值的集合。
**分量:**元組中的一個屬性值。
**關系模式:**對關系的描述,一般表示為:
關系名(屬性1,屬性2,…,屬性n)
2.關系模型的數(shù)組操縱與完整性約束
關系模型的數(shù)據操縱主要包括查詢、插入、刪除和更新數(shù)據,這些操作必須滿足關系的完整性約束條件。關系的完整性約束條件包括三大類:實體完整性、參照完整性和用戶定義的完整性。
3.關系模型的優(yōu)缺點
優(yōu)點:
1.關系模型與格式化模型不同,它是建立在嚴格的數(shù)學概念的基礎上的。
2.關系模型的概念單一。無論是實體還是實體之間的關系都用關系來表示。對數(shù)據的檢索和更新結果也是關系。所以其數(shù)據結構簡單、清晰,用戶易懂易用。
3.關系模型的存取路徑對用戶透明,從而具有更高的數(shù)據獨立性、更好的安全保密性,也簡化了程序員的工作和數(shù)據庫開發(fā)建立的工作。
缺點:
由于存取路徑對用戶是隱蔽的,查詢效率往往不如格式化數(shù)據模型,為了提高性能,數(shù)據庫管理系統(tǒng)必須對用戶的查詢請求進行優(yōu)化,因此增加了開發(fā)數(shù)據庫管理系統(tǒng)的難度。
數(shù)據庫系統(tǒng)的結構
從數(shù)據庫應用開發(fā)人員角度看,數(shù)據庫系統(tǒng)通常采用三級模式結構,這是數(shù)據庫系統(tǒng)內部的系統(tǒng)結構。從數(shù)據最終用戶角度看,數(shù)據庫系統(tǒng)的結構分為單用戶結構、主從式結構、分布式結構、客戶-服務器結構、瀏覽器-應用服務器/數(shù)據服務器多層結構等。這是數(shù)據庫系統(tǒng)外部的體系結構。
數(shù)據庫系統(tǒng)模式的概念
在數(shù)據模型中有“型”和“值”的概念。型是指對某一類數(shù)據的結構和屬性的說明,值是型的一個具體賦值。
模式是數(shù)據庫中全體數(shù)據的邏輯結構和特征的描述,它僅僅涉及型的描述,不牽涉具體的值。模式的一個具體值稱為模式的一個實例。同一個模式可以有很多實例。
模式是相對穩(wěn)定的,而實例是相對變動的。模式反映的是數(shù)據的結構及其聯(lián)系,而實例反映的是數(shù)據庫某一時刻的狀態(tài)。
數(shù)據庫系統(tǒng)的三級模式結構
數(shù)據庫系統(tǒng)的三級模式結構是指數(shù)據庫是由外模式、模式、內模式三級構成。
模式
模式也稱邏輯模式,是數(shù)據庫中全體數(shù)據的邏輯結構和特征的描述,是所有用戶的公共數(shù)據視圖。它是數(shù)據庫系統(tǒng)模式結構的中間層,既不涉及數(shù)據的物理存儲細節(jié)和硬件環(huán)境,又與具體的應用開發(fā)工具及高級程序涉及語言無關。
模式實際上是數(shù)據庫在邏輯級上的視圖。一個數(shù)據庫只有一個模式。數(shù)據庫模式以某一種數(shù)據模型為基礎,同一綜合地考慮了所有用戶的需求,并將這些需求有機地結合成一個邏輯整體。定義模式時不僅要定義數(shù)據的邏輯結構,還要定義數(shù)據之間的關系。
數(shù)據庫管理系統(tǒng)提供模式數(shù)據定義語言來嚴格定義模式。
外模式
外模式也稱子模式或用戶模式,它是數(shù)據庫用戶能夠看見和使用的局部數(shù)據的邏輯結構和特征的描述,是數(shù)據庫用戶的數(shù)據視圖,是與某一應用有關的數(shù)據的邏輯表示。
一個數(shù)據庫可以有多個外模式,同一外模式也可以為某一用戶的多個應用系統(tǒng)所使用,但是一個應用程序只能使用一個外模式。
外模式是保證數(shù)據庫安全性的一個有力措施,每個用戶只能看見和訪問所對應的外模式中的數(shù)據,數(shù)據庫中的其余的數(shù)據是不可見的。
數(shù)據庫管理系統(tǒng)提供外模式數(shù)據定義語言來嚴格定義外模式。
內模式
內模式也稱存儲模式,一個數(shù)據庫只有一個內模式。它是數(shù)據物理結構和存儲方式的描述,是數(shù)據在數(shù)據庫內部的組織方式。
數(shù)據庫的二級映像功能與數(shù)據獨立性
數(shù)據庫系統(tǒng)的三級模式是數(shù)據的三個抽象級別,它把數(shù)據的具體組織留給數(shù)據庫管理系統(tǒng)管理,使用戶能邏輯地、抽象地處理數(shù)據,而不必關心數(shù)據在計算機中的具體表示方式與存儲方式。
外模式/模式映像
模式描述的是數(shù)據的全局邏輯結構,外模式描述的是數(shù)據的局部邏輯結構。對應于同一個模式可以有任意多個外模式,對于每一個外模式,數(shù)據庫系統(tǒng)都有一個外模式/模式映像,它定義了該外模式與模式之間的對應關系,這些映像定義通常包含在各自外模式的描述中。
當模式改變時,由數(shù)據庫管理員對各個外模式/模式映像作相應改變,可以使外模式保持不變。應用程序是依據數(shù)據的外模式編寫的,從而應用程序不必修改,保證了數(shù)據與程序的邏輯獨立性,簡稱數(shù)據的邏輯獨立性。
模式/內模式映像
數(shù)據庫中只有一個模式,也只有一個內模式。內模式定義了數(shù)據全局邏輯結構與存儲結構之間的對應關系。當數(shù)據的存儲結構改變時,由數(shù)據庫管理員對模式/內模式作相應改變,可以使模式保持不變,從而應用程序也不必改變,保證了數(shù)據與程序的物理獨立性,簡稱數(shù)據的物理獨立性。
數(shù)據與程序之間的獨立性使得數(shù)據的定義和描述可以從應用程序分離出去。由于數(shù)據的存取由數(shù)據庫管理系統(tǒng)管理,從而簡化了應用程序的編制,大大減少了應用程序的維護和修改。
數(shù)據庫系統(tǒng)的組成
數(shù)據庫系統(tǒng)由數(shù)據庫、數(shù)據庫管理系統(tǒng)、應用程序和數(shù)據庫管理員組成,下面分別介紹這幾部分內容
硬件平臺及數(shù)據庫
1.要有足夠大的內存,存放操作系統(tǒng)、數(shù)據庫管理系統(tǒng)的核心模塊、數(shù)據緩沖區(qū)和應用程序。
2.由足夠大的硬盤或磁盤陣列等設備存放數(shù)據庫,有足夠大的磁盤(或光盤)作數(shù)據備份。
3.要求系統(tǒng)有較高的通道能力,以提高數(shù)據傳送率。
軟件
1.數(shù)據庫管理系統(tǒng)。
2.支持數(shù)據庫管理系統(tǒng)運行的操作系統(tǒng)。
3.具有與數(shù)據庫接口的高級語言及其編譯系統(tǒng),便于開發(fā)應用程序。
4.以數(shù)據庫管理系統(tǒng)為核心的應用開發(fā)工具。
5.為特定應用環(huán)境開發(fā)的數(shù)據庫應用系統(tǒng)。
人員
數(shù)據庫管理員
1.決定數(shù)據庫中的信息內容和結構。
2.決定數(shù)據庫的存儲結構和存儲策略。
3.定義數(shù)據的安全性要求和完整性約束條件。
4.檢控官數(shù)據庫的使用和運行。
(1)周期性轉儲數(shù)據庫:數(shù)據文件、日志文件。
(2)系統(tǒng)故障修復。
(3)介質故障修復。
(4)監(jiān)視審計文件。
5.數(shù)據庫的改建和重構、重組
(1)性能監(jiān)控和調優(yōu)。
(2)定期對數(shù)據庫進行重組織,以提高數(shù)據庫的性能。
(3)需求增加和改變時,數(shù)據庫需重構造。
系統(tǒng)分析員和數(shù)據庫設計人員
系統(tǒng)分析員
1.負責應用系統(tǒng)的需求分析和規(guī)范說明。
2.要和用戶及數(shù)據庫管理員相結合,確定系統(tǒng)的硬件軟件配置。
3.參與數(shù)據庫系統(tǒng)的概要設計。
數(shù)據庫設計人員
1.參加用戶需求調查和系統(tǒng)分析。
2.確定數(shù)據庫中的數(shù)據。
3.設計數(shù)據庫各級模式。
應用程序員
1.設計和編寫應用系統(tǒng)的程序模塊。
2.進行調試和安裝。
用戶
這里用戶指最終用戶,最終用戶通過應用系統(tǒng)的用戶接口使用數(shù)據庫。
1.偶然用戶
這類用戶不經常訪問數(shù)據庫,但每次訪問數(shù)據庫時往往需要不同的數(shù)據庫信息,這類用戶一般是企業(yè)或機構的高中級管理人員。
2.簡單用戶
主要工作是查詢和更新數(shù)據庫。銀行的職員,航空公司的機票預定工作人員、賓館總臺服務員等。
3.復雜用戶
工程師、科學家、經濟學家、科學技術工作者。直接使用數(shù)據庫語言訪問數(shù)據庫,甚至能夠基于數(shù)據庫管理系統(tǒng)的應用程序接口編制自己的應用程序。
第二章
關系數(shù)據結構及其形式化定義
關系數(shù)據庫系統(tǒng)是支持關系模型的數(shù)據庫系統(tǒng)。按照數(shù)據模型的三個要素,關系模型有關系數(shù)據結構、關系操作集合和關系完整性約束三部分組成
關系
關系模型的數(shù)據結構非常簡單,只包含單一的數(shù)據結構—關系。在用戶看來,關系模型中數(shù)據的邏輯結構是一張扁平的二維表
在關系模型中,現(xiàn)實世界的實體以及實體間的各種聯(lián)系均用單一的結構類型,即關系表示
關系模型是建立在集合代數(shù)的基礎之上的
域
域是一組具有相同數(shù)據類型的值的集合
笛卡爾積
定義一組域,允許其中的某些域是相同的,
的笛卡爾積為
其中,每一個元素叫做一個元組,或簡稱元組,元組中的每一個值
叫做一個分量
一個域允許的不同的取值個數(shù)稱為這個域的基數(shù)
若為有限集,其基數(shù)為
,則
的基數(shù)M為
關系
定義的子集叫做在域上的關系,表示為
,這里R表示關系的名字,n是關系的目或者度
關系中的每個元素是關系中的元組,通常用t來表示:
當n = 1時,稱該關系為單元關系,或一元關系
當n = 2時,稱該關系為二元關系
關系是笛卡爾積的有限子集,n木關系必有n個屬性
若關系中的某一屬性組的值能唯一地標識一個元組,而其子集不能,則稱該屬性組為候選碼。候選碼的諸屬性稱為主屬性,不包含任何候選碼中的屬性稱為非主屬性或者非碼屬性
在最簡單的情況下,候選碼只包含一個屬性。在最極端的情況下,關系模式的所有屬性是這個關系模式的候選碼,稱為全碼
一般來說,的笛卡爾積是沒有實際語義的,只有它的某個真子集才有實際含義
關系可以有三種類型
1.基本關系(通常又稱為基本表或基表)
它是實際存在的表,是實際存儲數(shù)據的邏輯表示
2.查詢表
它是結果查詢對應的表
3.視圖表
它是由基本表或其他視圖導出的表,是虛表,不對應實際存儲的數(shù)據
由于笛卡爾積不滿足交換律,所以
當關系作為關系數(shù)據模型的數(shù)據結構時,需要給予如下的限定和擴充
1.無限關系在數(shù)據庫系統(tǒng)之中是無意義的。因此,限定關系數(shù)據模型中的關系必須是有限集合
2.通過為關系的每個列附加一個屬性名的方法取消關系屬性的有序性
因此,基本關系具有以下6條性質:
1.列是同質的,即每一列中的分量是同一類型的數(shù)據,來自同一個域
2.不同的列可出自同一個域,稱其中的每一列為一個屬性,不同的屬性要給予不同的屬性名
3.列的順序無所謂,即列的次序可以任意交換
4.任意兩個元組的候選碼不能取相同的值
5.行的順序無所謂,即行的次序可以任意交換
6.分量必須取原子值,即每一個分量都必須是不可分的數(shù)據項
關系模型要求關系必須是規(guī)范化的,即要求關系必須滿足一定的規(guī)范條件,這些規(guī)范條件中最基本的一條就是,關系的每一個分量必須是一個不可分的數(shù)據項,規(guī)范化的關系簡稱為范式
關系模式
關系數(shù)據庫中,關系模式是型,關系是值,關系模式是對關系的描述
關系是元組的集合,因此關系模式必須指出這個元組集合的結構,即它由哪兒些屬性構成,這些屬性來自哪兒些域,以及屬性與域之間的映像關系
如果兩個元組的主碼相等,那么元組的其他值也一定相等,因為主碼唯一標識一個元組,住嗎相等就表示這是同一個元組
關系的描述稱為關系模式,可以形象化的表示為
R為關系名
U為組成該關系名的屬性名的集合
D為U中屬性所來自的域
DOM為屬性向域的映像集合
F為屬性間數(shù)據的依賴關系集合
關系是關系模式在某一時刻的狀態(tài)或內容。關系模式是靜態(tài)的、穩(wěn)定的,而關系是動態(tài)的、隨時間不斷變化的,因為關系操作在不斷更新著數(shù)據庫中的數(shù)據
關系數(shù)據庫
在關系模型中,實體與實體間的聯(lián)系都是可以用關系來表示的。在一個給定的應用領域中,所有關系的集合構成一個關系數(shù)據庫,關系數(shù)據庫也有型的值之分,關系數(shù)據庫的型稱為關系模式,關系數(shù)據庫的值是這些關系模式在某一時刻對應的關系的集合
關系模型的存儲結構
我們已經知道,在關系數(shù)據模型中實體及實體間的聯(lián)系都用表來表示,但表是關系數(shù)據的邏輯模型。在關系數(shù)據庫的物理組織中,有的關系數(shù)據庫管理系統(tǒng)中一個表對應一個操作文件,將物理組織交給操作系統(tǒng)完成;有的關系數(shù)據庫管理系統(tǒng)從操作系統(tǒng)那里申請若干個大的文件,自己劃分文件空間,組織表、索引等存儲結構,并進行存儲管理
關系操作
基本的關系操作
關系模型中常用的關系操作包括查詢操作和插入、刪除、修改操作兩大部分
關系的查詢表達能力很強,是關系操作中最主要的部分。查詢操作又可以分為選擇、投影、連接、除、并、差、交、笛卡爾積等,其中選擇、投影、并、差、笛卡爾積是5中基本操作
關系操作的特點是集合操作方式,即操作對象和結果都是集合,這種操作方式也成為一次一集合的方式,相應地,非關系數(shù)據模型的數(shù)據操作方式則為一次一記錄的方式
關系數(shù)據的語言分類
關系數(shù)據語言
1.關系代數(shù)語言(ISBL)
2.關系演算語言
元組的關系演算語言(ALPHA、QUEL)
域關系演算語言(QBE)
3.具有關系代數(shù)和關系演算雙重特點的語言(SQL)
早期的關系操作能力通常用代數(shù)方式或邏輯方式來表示,分別稱為關系代數(shù)和邏輯演算。關系代數(shù)用對關系的運算來表達查詢要求,關系演算則用謂詞來表達查詢要求。關系演算又可按謂詞變元的基本對象是元組變量還是域變量分為元組關系演算和域關系演算
關系代數(shù)、元素關系演算和域關系演算均是抽象的結構化查詢語言,這些抽象的語言與具體的關系數(shù)據庫管理系統(tǒng)中實現(xiàn)的實際語言并不完全一樣。但他們能用作評估實際系統(tǒng)中查詢語言能力的標準或基礎
另外,還有一種介于關系代數(shù)和關系演算之間的結構化查詢語言。SQL不僅具有豐富的拆線呢功能,而且具有數(shù)據定義和數(shù)據控制功能,是集查詢、數(shù)據定義語言、數(shù)據操縱語言和數(shù)據控制語言于一體的關系數(shù)據語言
SQL是一種高度非過程化的語言,用戶不必請求數(shù)據庫管理員為其建立的特殊存取路徑,存取路徑的選擇由關系數(shù)據庫管理系統(tǒng)的優(yōu)化機制來完成
關系數(shù)據庫管理系統(tǒng)中研究和開發(fā)了查詢優(yōu)化方法,系統(tǒng)可以自動選擇較優(yōu)的存取路徑,提高查詢效率
關系的完整性
關系模型的完整性規(guī)則是對關系的某種約束條件,也就是說關系的值隨著時間變化時應該滿足一些約束條件。這些約束條件實際上是現(xiàn)實世界的要求。任何關系在任何時刻都要滿足這些語義約束
關系模型有三類完整性約束:實體完整性、參照完整性和用戶自定義完整性。其中實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,被稱作是關系的兩個不變性,用戶定義的完整性是應用領域需要遵循的約束條件按,體現(xiàn)了具體領域中的語義約束
實體完整性
若屬性(指一個或一組屬性)A是基本關系R的主屬性,則A不能取空值,所謂的空值就是“不知道”或“不存在”或“無意義”的值
1.實體完整性是針對基本關系而言的
2.現(xiàn)實世界中的實體是可區(qū)分的,即他們具有某種唯一性標識
3.相應地,關系模型中以住嗎作為唯一性標識
4.主碼中的屬性即主屬性不能取空值
參照完整性
設F是基本關系R的一個或一組屬性,但不是關系R的碼,是基本關系S的主碼,如果F與
翔對應,則稱F是R的外碼,并稱基本關系R為參照關系,基本關系S為被參照關系或目標關系
外碼不一定要與相應的主碼同名,不過在實際應用中為了方便識別,當外碼與相應的主碼屬于不同關系時,往往給他們取相同的名字
參照完整性規(guī)則
若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須
1.或者取空值(F的每個屬性值均為空值)
2.或者等于S中某個元素在主碼值
用戶自定義完整性
用戶定義的完整性就是針對某一具體關系數(shù)據庫的約束條件,它反映某一具體應用所設計的數(shù)據必須滿足的語義要求
關系代數(shù)
關系代數(shù)是一種抽象的查詢語言,它用對關系的運算來表達查詢
關系代數(shù)常用的運算符包含兩大類:集合運算符和專門的關系運算符
運算符 | 含義 | |
---|---|---|
集合運算符 | ∪ | 并 |
- | 差 | |
∩ | 交 | |
× | 笛卡爾積 | |
專門的關系運算符 | σ | 選擇 |
π | 投影 | |
? | 連接 | |
÷ | 除 |
傳統(tǒng)的集合運算
傳統(tǒng)的集合運算是二目運算,包括并、差、交、笛卡爾積4種運算
設關系R和關系S具有相同的目n(即兩個關系都有n個屬性),且相應的屬性取自同一個域,t是元組變量,t∈R表示t是R的一個元組
1.并
2.差
3.交
4.笛卡爾積
專門的關系運算
專門的關系運算包括選擇、投影、鏈接、除運算等
選擇
選擇又稱為限制,它是在關系R種選擇滿足給定條件的諸元組,是從行的角度進行的運算
投影
關系R上的投影是從R種選擇出若干屬性列組成新的關系,是從列的角度進行的運算
投影之后不僅取消了原屬性種的某些列,而且還可能取消某些元組,因為取消了某些屬性列之后,就可能出現(xiàn)重復行,應取消這些完全相同的行
連接
連接是從兩個關系的笛卡爾積種選取屬性間滿足一定條件的元組
連接運算中有兩種最為重要也最為常用的連接,一種是等值連接,另一種是自然連接
等值連接是從關系R與S的廣義笛卡爾積中選取A、B屬性值相等的那些元組
自然連接是一種特殊的等值連接,它要求兩個關系中進行比較的分量必須是同名的屬性組,并且在結果中八重復的屬性列去掉
一般的連接操作是從行的角度進行運算,但自然連接還需要取消重復列
兩個關系R和S在做自然連接時,選擇兩個關系在公共屬性上值相等的元組構成新的關系。此時,關系R中某些元組有可能在S中不存在公共屬性上值相等的元組,從而造成R中這些元組在操作時被舍棄的,同樣,S中某些元組也可能被舍棄。這些被舍棄的元組稱為懸浮元組
如果把懸浮元組也保存在結果關系中,而在其他屬性上填空值,那么這種連接就叫做外連接;如果只保留左邊關系R中的懸浮元組就叫做左外連接;如果只保留右邊關系S中的懸浮元組就叫做右外連接
除運算
設關系R除以關系S的結果為T,則T包含所有在R但不再S中的屬性及其值,且T的元組與S的元組的所有組合都在R中
除操作是從行和列的角度進行計算
關系代數(shù)中,這些運算經有限次復合形成的表達式稱為關系表達式關系代數(shù)表達式
第三章
結構化查詢語言是關系數(shù)據庫的標準語言,也是一個通用的、功能極強的關系數(shù)據庫語言。其功能不僅僅是查詢,而是包括數(shù)據庫模式創(chuàng)建、數(shù)據庫數(shù)據的插入與修改、數(shù)據庫安全性完整性定義與控制等一系列功能。
SQL概述
SQL的產生與發(fā)展
目前,沒有一個數(shù)據庫系統(tǒng)能夠支持SQL標準的所有概念和特性。同時,許多軟件廠商對SQL的基本命令集還進行了不同程度的擴充和修改,又可以支持標準以外的一些功能特性。
SQL的特點
SQL集數(shù)據查詢、數(shù)據操縱、數(shù)據定義和數(shù)據控制功能與一體,主要包括以下幾個部分:
綜合統(tǒng)一
1.模式數(shù)據定義語言
2.外模式數(shù)據定義語言
3.數(shù)據存儲有關的描述語言
4.數(shù)據操縱語言
高度非過程化
用SQL進行數(shù)據操作是,只要提出“做什么”,而無需指出“怎么做”,因此無需了解存取路徑。存取路徑的選擇以及SQL的操作過程由系統(tǒng)自動完成。大大減輕了用戶負擔,有利于提高數(shù)據獨立性。
面向集合的操作方式
以同一種語法結構提供多種使用方式
語言簡潔、易學易用
SQL的基本概念
支持SQL的關系數(shù)據庫管理系統(tǒng)同樣支持關系數(shù)據庫三級模式結構。
用戶可以用SQL對基本表和視圖進行查詢或其他操作,基本表和視圖一樣,都是關系。
基本表是本身獨立存在的表,在關系數(shù)據庫管理系統(tǒng)中一個關系就對應一個基本表,一個或多個基本表對應一個存儲文件,一個表可以帶若干索引,索引也存放在存儲文件中。
存儲文件的邏輯結構組成了關系數(shù)據可以的內模式。存儲文件的物理結構對最終用戶是隱蔽的。
視圖是從一個或幾個基本表導出的表。它本身不獨立存儲在數(shù)據庫中,即數(shù)據庫中只存放視圖的定義而不存放視圖對應的數(shù)據。這些數(shù)據仍存放在導出視圖的基本表中,因此視圖是一個虛表。
學生-課程數(shù)據庫
Student
學號 Sno | 姓名 Sname | 性別 Sex | 年齡 Sage | 所在系 Sdept |
---|---|---|---|---|
202115121 | 李勇 | 男 | 20 | CS |
202115122 | 劉晨 | 女 | 19 | CS |
202115123 | 王敏 | 女 | 18 | MA |
202115125 | 張立 | 男 | 19 | IS |
Course
課程號 Cno | 課程名 Cname | 先行課 Cpno | 學分 Ccredit |
---|---|---|---|
1 | 數(shù)據庫 | 5 | 4 |
2 | 數(shù)學 | 2 | |
3 | 信息系統(tǒng) | 4 | 4 |
4 | 操作系統(tǒng) | 6 | 3 |
5 | 數(shù)據結構 | 7 | 4 |
6 | 數(shù)據處理 | 2 | |
7 | PASCAL語言 | 6 | 4 |
SC
學號 Sno | 課程號 Cno | 成績 Grade |
---|---|---|
201215121 | 1 | 92 |
201215121 | 2 | 85 |
201215121 | 3 | 88 |
201215122 | 2 | 90 |
201215122 | 3 | 80 |
數(shù)據定義
關系數(shù)據庫系統(tǒng)支持三級模式結構,其模式、外模式和內模式中的基本對象有模式、表、視圖和索引等。
操作對象 | 操作方式 | ||
---|---|---|---|
創(chuàng)建 | 刪除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
視圖 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
一個關系數(shù)據庫管理系統(tǒng)的實例中可以建立多個數(shù)據庫,一個數(shù)據庫中可以建立多個模式,一個默模式下通常包括多個表、視圖和索引等數(shù)據庫對象。
模式的定義與刪除
定義模式
CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>
如果沒有指定<模式名>,那么<模式名>隱含為<用戶名> ,要創(chuàng)建模式,調用該命令的用戶必須擁有數(shù)據庫管理員權限,或者獲得了數(shù)據庫管理員授予的CREATE SCHEMA的權限。
定義模式實際上定義了一個命名空間,在這個空間中可以進一步定義該模式包含的數(shù)據庫對象,例如基本表、視圖、索引等。
目前在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句,也就是說用戶可以在創(chuàng)建模式的同時在這個模式定義中進一步創(chuàng)建基本表、視圖,定義授權。
CREATE SCHEMA <模式名> AUTHORIZATION <用戶名> [<表定義子句>|<視圖定義子句>|<授權定義子句>]
刪除模式
DROP SCHEMA <模式名>[<CASCADE>|<RESTRICT>]
其中CASCADE和RESTRICT兩者必選起義,選擇CASCADE(級聯(lián)),表示在刪除模式的同時把該模式中所有的數(shù)據庫對象全部刪除;選擇RESTRICT(限制),表示如果該模式中已經定義了下屬的數(shù)據庫對象(如表、視圖等),則拒絕該刪除語句的執(zhí)行。只有當該模式中沒有任何下屬對象時才能執(zhí)行DROP SCHEMA語句
基本表的定義、刪除與修改
定義基本表
CREATE TABLE <表名> (<列名><數(shù)據類型>[列級完整性約束條件],[,<列名><數(shù)據類型>[列級完整性約束條件]],...[,<表級完整性約束條件>])
建表的同時通常還可以定義與該表有關的完整性約束條件,這些完整性約束條件被存入系統(tǒng)的數(shù)據字典中,當用戶操作表中數(shù)據時由關系數(shù)據庫管理系統(tǒng)自動檢查該操作是否違背這些完整性約束條件。如果完整性約束條件設計該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。
參照表和被參照表可以是同一個表
數(shù)據類型
數(shù)據類型 | 含義 |
---|---|
CHAR(n),CHARACTER(n) | 長度為n的定長字符串 |
VARCHAR(n),CHARACTERVARYING(n) | 最大長度為n的變長字符串 |
CLOB | 字符串大對象 |
BLOL | 二進制大對象 |
INT,INTEGER | 長整數(shù)(4字節(jié)) |
SMALLINT | 短整數(shù)(2字節(jié)) |
BIGINT | 大整數(shù)(8字節(jié)) |
NUMERIC(p,d) | 定點數(shù),由p位數(shù)字(不包括符號、小數(shù)點)組成,小數(shù)點后面有d位數(shù)字 |
DECIMAL(p,d),DEC(p,d) | 同NUMERIC |
REAL | 取決于機器精度的單精度浮點數(shù) |
DOUBLE PRECITION | 取決于機器精度的雙精度浮點數(shù) |
FLOAT(n) | 可選精度的浮點數(shù),精度至少為n位數(shù)字 |
BOOLEAN | 邏輯布爾量 |
DATE | 日期,包含年、月、日,格式為YYYY-MM-DD |
TIME | 時間,包含一日的時、分、秒,格式為HH:MM:SS |
TIMESTAMP | 時間戳類型 |
INTERVAL | 時間間隔類型 |
模式與表
每一個基本表都屬于某一個模式,一個模式包含多個基本表。定義基本表時一般可以有三種方法定義它所屬的模式:
1.在表名中明顯地給出模式名
CREATE TABLE "S-T".Student(...);/*Student所屬的模式是S-T*/
2.在創(chuàng)建模式語句中同時創(chuàng)建表
3.設置所屬的模式,這樣在創(chuàng)建表時不必給出模式名
當用戶創(chuàng)建基本表(其他數(shù)據庫對象也一樣)時若沒有指定模式,系統(tǒng)根據搜索路徑來確定該對象所屬的模式,搜索路徑包含一組模式列表,關系數(shù)據庫管理系統(tǒng)會使用模式列表中第一個存在的模式作為數(shù)據庫對象的模式名。若搜索路徑中的模式名都不存在,系統(tǒng)將給出錯誤。
修改基本表
ALTER TABLE <表名>
[ADD [COLUMN] <新列名><數(shù)據類型>[完整性約束]]
[ADD <表級完整性約束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT <完整性約束名> [CASCADE|RESTRICT]]
[ALTER COLUMN <列名><數(shù)據類型>];
刪除基本表
DROP TABLE [CASCADE|RESTRICT];
若選擇RESTRICT,則該表的刪除是有限制條件的。欲刪除的基本表不能被其他表的約束所引用(如CHECK、FOREIGN KEY等約束),不能有視圖,不能由觸發(fā)器,不能有存儲過程或函數(shù)等。如果存在這些依賴該表的對象,則此表不能被刪除。
若選擇CASCADE,則該表的刪除沒有限制條件,在刪除基本表的同時,相關的依賴對象,例如視圖,都將被一起刪除。
索引的建立和刪除
順序文件上的索引是針對按指定屬性值升序或降序的存儲關系,在該屬性上建立一個順序索引文件,索引文件由屬性值和相應的元組指針組成。
B+樹索引是將索引屬性組織成B+樹形式,B+樹的葉節(jié)點為屬性值和相應的元素指針。B+樹索引具有動態(tài)平衡的優(yōu)點。
散列索引是建立若干個桶,將索引屬性按照其散列函數(shù)映射到相應的桶中,同種存放索引屬性值和相應的元素指針。散列索引具有查找速度快的特點。
位圖索引是用位向量記錄索引屬性中可能出現(xiàn)的值,每個位向量對應一個可能值。
索引雖然能夠加速數(shù)據庫的查詢,但需要占用一定的存儲空間,當基本表更新時,索引要進行相應的維護,這些都會增加數(shù)據庫的負擔,因此要根據實際應用的需要有選擇的創(chuàng)建索引。
一般說來,建立與刪除索引由數(shù)據庫管理員或者表的屬主負責完成。關系數(shù)據庫管理系統(tǒng)在執(zhí)行查詢時會自動選擇合適的索引作為存儲路徑,用戶不必也不能顯式地選擇索引。索引時關系數(shù)據庫管理系統(tǒng)的內部實現(xiàn)技術,屬于內模式的范疇。
建立索引
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
<表名>是要建索引的基本表的名字。索引可以建立在該表的一列或多列上,各列之間用逗號分隔。每個<列名>后面還可以用<次序>指定索引值的排列次序,可選ASC或者DESC,默認為ASC。
UNQIUE表明此索引的每一個索引值只對應唯一的數(shù)據記錄。
CLUSTER表示要建立的索引是聚簇索引。
修改索引
ALTER INDEX <舊索引名> RENAME TO <新索引名>
刪除索引
DROP INDEX <索引名>
數(shù)據字典
數(shù)據字典是關系數(shù)據庫管理系統(tǒng)內部的一組系統(tǒng)表,它記錄了數(shù)據庫中所有的定義信息,包括關系模式定義、視圖定義、索引定義、完整性約束定義、各類用戶對數(shù)據庫的操作權限、統(tǒng)計信息等。關系數(shù)據庫管理系統(tǒng)在執(zhí)行SQL的數(shù)據定義語句時,實際上就是在更新數(shù)據字典表中的相應信息。在查詢優(yōu)化和查詢處理時,數(shù)據字典中的信息是其重要依據。
數(shù)據查詢
SELECT [ALL|DISTINCT] <目標列表達式> [,<目標列表達式>]...
FROM <表名或視圖名> [,<表名或視圖名>]|(SELECT語句)[AS]<別名>
[WHERE <條件表達式>]
[GROUP BY<列名1>[HAVING <條件表達式>]]
[GROUP BY<列名2>[ASC|DESC]]
如果GROUP BY子句帶HAVING語句,則只有滿足指定條件的組才予以輸出。
如果有ORDERED BY子句,則結果表還要按<列名2>的值進行升序或者降序排序
單表查詢
單表查詢是指僅涉及一個表的查詢。
查詢表中的若干列
1.查詢指定列
2.查詢全部列(<目標列表達式>為*或者全部列名)
3.查詢經過計算的值(<目標列表達式>也可以是算術表達式、字符串常量、函數(shù)等)
選擇表中的若干元組
1.消除取值重復的行(DISTINCT)
2.查詢滿足條件的元組
查詢條件 | 謂詞 |
---|---|
比較 | >、<、=、>=、<=、!=、<>、!>、!<;NOT加上述比較運算符 |
確定范圍 | BETWEEN AND、NOT BETWEEN AND |
確定集合 | IN、NOT IN |
字符匹配 | LIKE、NOT、LIKE |
空值 | IS NULL、NOT NULL |
多重條件(邏輯運算) | AND、OR、NOT |
BETWEEN后面是范圍的下限,AND后是范圍的上限
字符串的匹配
[NOT] LIKE '<匹配串>' [ESCAPE '<換碼字符>']
其含義是查找指定的屬性列值與<匹配串>相匹配的元組。<匹配串>可以是一個完整的字符串,也可以含有通配符%和_,%代表任意長度(長度可以為0的字符串)的字符串,例如a%b表示以a開頭,b結尾的任意長度的字符串。_表示任意單個字符。
OEDERED BY子句
用戶可以用OEDERED BY子句對查詢結果按照一個或者多個屬性列的升序(ASC)或降序(DESC)排列,默認值為升序。
對于空值,排序時顯示的次序由具體系統(tǒng)實現(xiàn)來決定。例如按升序排序,含空值的元組最后顯示;按降序排,空值的元組則最先顯示。
聚集函數(shù)
COUNT(*)
COUNT([DISTINCT|ALL] <列名>)
SUM([DISTINCT|ALL] <列名>)
AVG([DISTINCT|ALL] <列名>)
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
如果指定DISTINCT短語,則表示在計算時要取消指定列中的重復值。如果不指定DISTINCT短語或指定ALL短語(ALL為默認值),則表示不取消重復列。
當聚集函數(shù)遇到空值時,除COUNT(*)外,都要跳過空值只處理非空值。
聚集函數(shù)只能用于SELECT子句和GROUP BY中的HAVING子句。
GROUP BY子句
將查詢結果按某一列或多列的值分組,值相等的為一組。分組后聚集函數(shù)將作用于每一個組,即每一組都有一個函數(shù)值。
WHERE子句與HAVING短語的區(qū)別在于作用對象不同。WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組。HAVING短語作用于組,從中選擇滿足條件的組。
連接查詢
若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。
等值于非等值連接查詢
連接查詢的WHERE子句中用來連接兩個表的條件稱為連接條件或連接謂詞,當連接條件為=時,為等值連接,否則為非等值連接。連接謂詞中的列名為連接字段,連接條件中的各連接字段類型必須是可比的,但名字不必相同。
若在等值連接中把目標列中重復的屬性去掉則為自然連接。
自身鏈接
連接操作不僅可以在兩個表之間進行,也可以是一個表與其自己進行連接,稱為表的自身鏈接。
外連接
左外連接列出左邊關系中所有的元組,右外連接列出右邊關系中所有的元組。
多表連接
連接操作除了可以是兩表連接、一個表與其自身連接,還可以是兩個以上的表進行連接,后者稱為多表連接。
嵌套查詢
在SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或者HAVING短語的條件中的查詢稱為嵌套查詢。
上層的查詢塊稱為外查詢或父查詢,下層的查詢塊稱為內層查詢或者子查詢。
子查詢的SELECT語句中不能使用ORDERED BY子句,ORDERED BY子句只能對最終查詢結果排序。
嵌套查詢使用戶可以用多個簡單查詢構成復雜的查詢,從而增強SQL的查詢能力,以層層嵌套的方式來構造程序正式SQL中"結構化"的含義所在。
帶有IN謂詞的子查詢
子查詢的查詢條件依賴于父查詢稱為相關子查詢,子查詢的查詢條件不依賴于父查詢稱為不相關子查詢,整個查詢語句稱為相關嵌套查詢語句。
有些嵌套查詢可以用連接運算代替,有些是不能代替的。
帶有比較運算符的子查詢
帶有比較運算符的子查詢是指父查詢于子查詢之間用比較運算符進行連接。當用戶能確切知道內層查詢返回的是單個值時,可以用>、<、=、>=、<=、!=或<>等比較運算符。
帶有ANY(SOME)或ALL謂詞的子查詢
>ANY | 大于子查詢結果中的某個值 |
---|---|
>ALL | 大于子查詢結果中的所有值 |
<ANY | 小于子查詢結果中的某個值 |
<ALL | 小于子查詢結果中的所有值 |
>=ANY | 大于等于子查詢結果中的某個值 |
>=ALL | 大于等于子查詢結果中的所有值 |
<=ANY | 小于等于子查詢結果中的某個值 |
<=ALL | 小于等于子查詢結果中的所有值 |
=ANY | 等于子查詢結果中的某個值 |
=ALL | 等于子查詢結果中的所有值 |
!=(或<>)ANY | 不等于子查詢結果中的某個值 |
!=(或<>)ALL | 不等于子查詢結果中的所有值 |
事實上,用聚集函數(shù)實現(xiàn)子查詢通常比直接用ANY或ALL查詢效率要高。=ANY等價于IN,<ANY等價于<MAX,<>ALL等價于NOT IN,<ALL等價于<MIN。
帶有EXISTS謂詞的子查詢
EXISTS代表存在量詞?。帶有EXISTS謂詞的子查詢不返回任何數(shù)據,只產生邏輯真值“true”或邏輯假值“false”。
一些帶EXISTS或NOT EXISTS謂詞的子查詢不能被其他形式的子查詢等價替換,但所有帶IN謂詞、比較運算符、ANY和ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價替換。
集合查詢
集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。注意:參加集合操作的各查詢結果的列數(shù)必須相同,對應項的數(shù)據類型也必須相同。
使用UNION將多個查詢結果合并起來時,系統(tǒng)會自動去掉重復元組,如果要保留重復元組則用UNION ALL操作。
基于派生表的查詢
子查詢不僅可以出現(xiàn)在WHERE子句中,還可以出現(xiàn)在FROM子句中,這時子查詢生成的臨時派生表稱為主查詢的查詢對象。
需要說明的是,通過FROM子句生成派生表時,AS關鍵字可以省略,但必須為派生關系指定一個別名。而對于基本表,別名是可選擇項。
SELECT語句的一般格式
SELECT [ALL|DISTINCT] <目標列表達式> [,<目標列表達式>]...
FROM <表名或視圖名> [,<表名或視圖名>]|(SELECT語句)[AS]<別名>
[WHERE <條件表達式>]
[GROUP BY<列名1>[HAVING <條件表達式>]]
[GROUP BY<列名2>[ASC|DESC]]
目標列表達式的可選格式
1.*
2.<表命>.*
3.COUNT([DISTINCT|ALL] * )
4.[<表名>.]<屬性列名表達式>[,[<表名>.]<屬性列名表達式>]...
其中,<屬性名表達式>可以是由屬性列、作用于屬性列的聚集函數(shù)和常量的任意算數(shù)運算(+,-,*,/)組成的運算公式。
聚集函數(shù)的一般格式
COUNT [DISTINCT|ALL] <列名>
SUM [DISTINCT|ALL] <列名>
AVG [DISTINCT|ALL] <列名>
MAX [DISTINCT|ALL] <列名>
MIN [DISTINCT|ALL] <列名>
WHERE子句的條件表達式的可選格式
1.<屬性列名>θ<屬性列名><屬性列名>θ<常量><屬性列名>θ[ANY|ALL](SELECT語句)
2.<屬性列名> [NOT] BETWEEN <屬性列名> AND <屬性列名><屬性列名> [NOT] BETWEEN <常量> AND <常量><屬性列名> [NOT] BETWEEN (SELECT語句) AND (SELECT語句)
3.<屬性列名> [NOT] IN (<值1>,[,<值2>]...)<屬性列名> [NOT] IN (SELECT語句)
4.<屬性列名> [NOT] LIKE <字符串>
5.<屬性列名> IS [NOT] NULL
6.[NOT] EXISTS (SELECT語句)
7.<條件表達式> AND <條件表達式> AND <條件表達式>...<條件表達式> OR <條件表達式> OR <條件表達式>...
數(shù)據更新
插入數(shù)據
1.插入元組
INSERT
INTO <表名> [(<屬性列1> [,<屬性列2>]...)]
VALUES(<常量1> [,<常量2>]...);
INTO子句中沒有出現(xiàn)的屬性列,心猿族在這些列上將取空值。但必須注意的是,在表定義時說明了NOT NULL的屬性列不能取空值,否則會出錯。
如果INTO子句中沒有指明任何屬性列名,則新插入的元組必須在每個屬性列上均有值。
字符串常熟 要用單引號(英文符號)括起來。
2.插入子查詢結果
INSERT
INTO <表名> [(<屬性列1> [,<屬性列2>...])
子查詢;
修改數(shù)據
UPDATE <表名>
SET <列名>=<表達式> [,<列名>=<表達式>]...
[WHERE<條件>];
1.修改某一個元組的值
2.修改多個元組的值
3.帶子查詢的修改語句
刪除數(shù)據
DELETE
FROM <表名>
[WHERE <條件>];
1.刪除某一個元組的值
2.刪除多個元組的值
3.帶子查詢的刪除語句
空值的處理
所謂空值就是“不知道”或“不存在”或“無意義”的值。
1.空值的產生
外連接也會產生空值,空值的關系運算也會產生空值。
2.空值的判斷
用IS NULL和IS NOT NULL來表示。
3.空值的約束條件
屬性定義(或者域定義)中有NOT NULL約束條件的不能取空值,加了UNIQUE限制的屬性不能取空值。
4.空值的算數(shù)運算、比較運算和邏輯運算
x | y | x AND y | x OR y | NOT x |
---|---|---|---|---|
T | T | T | T | F |
T | U | U | T | F |
T | F | F | T | F |
U | T | U | T | U |
U | U | U | U | U |
U | F | F | U | U |
F | T | F | T | T |
F | U | F | U | T |
F | F | F | F | T |
視圖
視圖是從一個或幾個基本表(或視圖)導出的表。它與基本表不同,是一個虛表。數(shù)據庫中只存放視圖的定義,而不存放視圖對應的數(shù)據,這些數(shù)據仍存放在原來的基本表中。所以一旦基本表中的數(shù)據發(fā)生變化,從視圖中查詢出的數(shù)據也就隨之改變了。從這個意義上講,視圖就像一個窗口,透過它可以看到數(shù)據庫中自己感興趣的數(shù)據及其變化。
視圖一經定義,就和基本表一樣被查詢、被刪除。也可以在一個視圖之上再定義新的視圖,但對視圖的更新(增、刪、改)操作則有一定的限制。
定義視圖
建立視圖
CTRATE VIEW <視圖名> [(<列名> [,<列名>])]
AS <子查詢>
[WITH CHECK OPTION];
WITH CHECK OPTION表示對視圖進行UPDATE、INSERT和DELETE操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)。
組成視圖的屬性列名或者全部省略或者全部指定,沒有第三種選擇。如果省略了視圖的各個屬性名,則隱含該視圖由子查詢中SELECT子句目標列中的諸字段組成,但在下列三種情況下必須明確指定組成視圖的所有列名:
1.某個目標列不是單純的屬性名,而是聚集函數(shù)或列表達式
2.多表連接是選出了幾個同名列作為視圖的字段
3.需要在視圖中為某個列啟用新的更合適的名字
關系數(shù)據庫管理系統(tǒng)執(zhí)行CREATE VIEW語句的結果只是把視圖的定義存入數(shù)據字典,并不執(zhí)行其中的SELECT語句,只是在對視圖查詢時,才按視圖的定義從基本表中將數(shù)據查出。
若一個視圖是從單個基本表導出的,并且只是去掉了基本表的某些行和列,且保留了主碼,則稱這類視圖為行列子集視圖。
視圖不僅可以建立在單個基本表上,也可以建立在多個基本表上。
視圖不僅可以建在一個或多個基本表上,也可以建立在一個或多個已經定義好的視圖上,或建立在基本表與視圖上。
定義基本表時,為了減少數(shù)據庫中的冗余數(shù)據,表中只存放基本數(shù)據,由基本數(shù)據通過各種計算派生出的數(shù)據一般是不存儲的。帶虛擬列的視圖也稱為帶表達式的視圖。
帶有聚集函數(shù)和GROUP BY子句的查詢來定義視圖,這種視圖稱為分組視圖。
修改視圖的方式為:為了避免映像關系被破壞,最好在修改基本表之后刪除由該基本表導出的視圖,然后重建這個視圖。
刪除視圖
DROP VIEW <視圖名> [CASCADE];
視圖刪除后視圖的定義將從數(shù)據字典中刪除。如果該視圖上還導出了其他視圖,則使用CASCADE級聯(lián)刪除語句把該視圖和由它導出的所有視圖一起刪除了。
基本表刪除后,由該基本表導出的所有視圖均無法使用了,但是視圖的定義沒有從字典中清除,刪除這些視圖定義需要顯式地使用DROP VIEW語句。
查詢視圖
關系數(shù)據庫管理系統(tǒng)執(zhí)行對視圖的查詢時,首先進行有效性檢查,檢查查詢中涉及的表、視圖等是否存在。如果存在,則總數(shù)據字典中取出視圖的定義,把定義中的子查詢 和用戶的查詢結合起來,轉換稱等價的對基本表的查詢,然后再執(zhí)行修正了的查詢。這一轉換過程稱為視圖消解。
在一般情況下,視圖查詢的轉換是直截了當?shù)?。但有些情況下,這種轉換不能直接進行,查詢時會出現(xiàn)問題,例如:WHERE子句中是不能用聚集函數(shù)作為條件表達式的,此種無法轉換。
目前多數(shù)關系數(shù)據庫系統(tǒng)對行列子集視圖的查詢均能進行正確轉換,但對非行列子集視圖的查詢就不一定能做轉換了。
但定義視圖并查詢視圖與基于派生表的查詢是有區(qū)別的。視圖一旦定義,其定義將永久保存在數(shù)據字典中,之后的所有查詢都可以直接引用該視圖。而派生表只是在語句執(zhí)行時臨時定義,語句執(zhí)行后該定義即被刪除。
更新視圖
更新視圖是指通過視圖來插入、刪除和修改數(shù)據。
由于視圖是不實際存儲數(shù)據的虛表,因此對視圖的更新最終要轉換為對基本表的更新。像查詢視圖那樣,對視圖的更新操作也是通過視圖消解,轉換為對基本表的更新操作。
為防止用戶通過視圖對數(shù)據進行增加、刪除、修改時,有意無意的對不屬于視圖范圍內的基本表數(shù)據進行操作,可在定義視圖時加上WITH CHEKC OPTION子句。這樣在視圖上增、刪、改數(shù)據時,關系數(shù)據庫管理系統(tǒng)會檢查視圖定義中的條件,若不能滿足條件則拒絕執(zhí)行該操作。
在關系數(shù)據庫中,并不是所有的視圖都是可更新的,因為有些視圖的更新不能唯一地有意義地轉換成對相應基本表的更新。
一般地,行列子集視圖是可更新的。除行列子集視圖外,有些視圖理論上是可更新的,但它們的確切特征還是尚待研究的課題,還有些視圖從理論上就是不可更新的。
目前,各個關系數(shù)據庫管理系統(tǒng)一般都只允許對行列子集視圖進行更新,而且各個系統(tǒng)對視圖的更新還有更進一步的規(guī)定。
應該指出的是:不可更新的視圖與不允許更新的視圖是兩個不同的概念。前者指理論上已經證明其是不可更新的視圖,后者指實際系統(tǒng)中不支持其更新,但它本身可能是可更新的視圖。
視圖的作用
1.視圖能夠簡化用戶的操作
2.視圖時用戶能以多種角度看待統(tǒng)一數(shù)據
3.視圖對重構數(shù)據庫提供了一定程度的邏輯獨立性
4.視圖能夠對機密數(shù)據提供安全保護
5.適當利用視圖可以更清晰的表達查詢