數據庫基礎

title: 數據三級考試

date: 2019-2-23算法

前言

考試環境介紹:sql

​ 考試範圍類型: 選擇題【40分40道】 ,應用題(填空題【30分10題】), 設計題【30分3題】數據庫

​ 應用題: 在多空題上加頓號。express

​ 分值主要集中於數據庫的操做上,數據庫的概念很充要編程

考試要求:瀏覽器

​ 一、掌握數據庫技術的基本概念、原理、方法和技術。 ​ 二、可以使用SQL語言實現數據庫操做。 ​ 三、具有數據庫系統安裝、配置及數據庫管理與維護的基本技能。 ​ 四、掌握數據庫管理與維護的基本方法。 ​ 五、掌握數據庫性能優化的基本方法。 ​ 六、瞭解數據庫應用系統的生命週期及其設計、開發過程。 ​ 七、熟悉經常使用的數據庫管理和開發工具,具有用指定的工具管理和開發簡單數據庫應用系統的能力。 ​ 八、瞭解數據庫技術的最新發展。安全

1 數據庫基本概念

1 數據庫的基本概念

1.1.1 數據

定義:描述事物的符號序列性能優化

種類:數字、文字、圖形、圖像聲音及其餘特殊符號服務器

計算機中數據分爲兩部分:網絡

臨時性數據(內存),計算機關機後將所有丟失, 具體易失性。

非易失性 持久性數據(硬盤) ,計算機關機後沒必要丟失

graph LR F[數據,是描述事物的符號序列]==>A A((計算機中數據)) ==> B[臨時性數據,計算機關機後將所有丟失] A ==> C[非易失性數據,計算關機後不丟失]

數據有型(Type)與值(Value)之分:

型:數據表示的類型,如整型、字符型等

值:給出了符合給定型的值

graph TD A((數據))--> B[型 Type] A-->C[值 Value] B-->D[數據表表示的類型] C-->E[給出了符合給定型的值]

1.1.2 數據庫 Database

簡稱 DB

數據的集合,具備統一的結構形式並存放於統一的存儲介質內,是多種應用數據的集成,並可被各個應用程序所共享 按數據所提供的數據模式存放的

1.1.3 數據庫系統 Datebase System

簡稱DBS 簡稱爲數據庫

組成:

​ 數據庫(數據)

​ 數據庫管理系統 DBMS(軟件)

​ 數據庫管理員(人員)DBA

​ 硬件平臺:計算機和網絡

​ 軟件平臺:操做系統、數據庫系統開發工具、接口軟件

graph TD A((數據庫))--> B(數據庫 數據) A((數據庫))--> C("數據庫管理系統(軟件)") A((數據庫))--> D(數據庫管理員) A((數據庫))--> E[硬件平臺和軟件平臺]

1.1.4 數據庫應用系統 (Datebase Application System)

簡稱DBAS ,列如信息管理系統

組成:數據庫系統+應用軟件+應用界面

硬件(裸機)->操做系統->數據庫管理系統->應用開發工具軟件(IDE)->應用軟件

graph LR F(數據庫應用系統) 硬件--> 操做系統 操做系統 --> 數據庫管理系統 數據庫管理系統 --> 應用開發工具軟件IDE 應用開發工具軟件IDE --> 應用軟件

1.2 軟件工程與數據庫技術

1.2.1 軟件工程和數據庫工程的基本概念

軟件工程:用工程、科學和數學的原則與方法,來開發軟件

軟件生存週期:軟件產品從定義開始,通過開發、使用與維護,直到退役

數據庫工程:屬於軟件工程,數據庫工程

1.數據庫設計 2.相應的應用的設計與實現

數據庫應用系統的設計開發必須有軟件過程模型做爲指導

1.2.2 軟件開發模型

瀑布模型(從上到下)

快速設計模型(按照樣品的形式,快速的開發第一代產品)

螺旋模型(引入風險控制)

graph TD A((軟件開發模型))==自上而下==>B[瀑布模式] A((軟件開發模型))==快速的開發第一代產品==>C[快速設計模型] A((軟件開發模型))==引入風險控制==>D[螺旋模型]

1.2.3 總結

軟件工程包括數據庫系統開發,並且數據應用系統的設計開發必須有軟件過程模型做爲指導。

軟件開發模型中主要使用瀑布模型,採用自上而下的方式開發。

1.3 DBAS 生命週期模型【瀑布模型】

1.3.1 規劃與分析

是DBAS生命週期的第一步,目標是面向實際應用和需求,肯定整個數據庫應用系統的目標和任務

技術、操做和經濟三個方面進行可行性分析,並制定合理的項目開發計劃。

主要工做內容:

​ 系統規劃與定義:任務陳述、肯定任務目標、肯定範圍和邊界、肯定用戶視圖

​ 可行性分析:技術、經濟、操做可行性及開發方案選擇

​ 項目規劃:項目團隊、環境、活動、成本、預算,進度計劃(時間要求)

1.3.2 需求分析(目標)

準確瞭解與分析用戶需求(包括數據與處理)是最困難、最耗費時間的一步。

需求分析過程由需求獲取、需求分析、需求描述與規範說明、需求驗證等步驟組成。

各類需求的主要工做:

​ 數據需求分析:描述用戶須要組織的信息內容 ==》造成數據字典

​ ==功能需求分析:描述系統作什麼 功能建模

​ 數據處理需求分析、業務規則需求分析 ==》知足用戶的功能性需求,同時也要分析用戶的非功能性需求。

性能需求分析:描述系統應當作到什麼程度 ==》 數據操做響應時間、系統吞吐量、硬件資源等等

​ 其餘需求:存儲需求、安全性需求、備份與恢復等需求

1.3.3 系統設計【過程】——數據庫設計

若是需求分析階段的任務是解決「幹什麼」的問題,那麼系統設計階段的任務是肯定「怎麼幹」

系統設計包括:

a.概念模式設計:數據庫概念模型設計、系統整體設計

b.邏輯模式設計(理論上):數據庫邏輯結構設計、應用程序概要設計、數據庫事物概要設計

c.物理設計(真實上):數據庫物理結構設計、數據庫事務詳細設計、應用程序詳細設計

1.3.4 實現與部署

也稱爲DBAS的實施。須要根據設計結果創建數據庫,編寫應用程序,集成DBAS軟硬件,組成完整的DBAS

創建數據庫結構,數據加載,事務和應用程序的代碼及測試,系統集成 、測試與運行,系統部署。

1.3.5運行管理與維護

DBAS生命週期模型中時間最長,具備不可預知性

主要包括平常維護、系統監控與分析、系統性能優化調整、系統進化升級等。

這些工做主要由數據庫管理員DBA負責

graph LR A(("DBAS生命週期(瀑布模型)"))-->B[規劃與設計] B-->從技術經濟可操做性上判斷 A-->C[需求分析] Z[目標]-.->C C-->Q(功能需求分析) Q-->數據庫概念模型設計 Q-->系統整體設計 C-->性能需求分析 C-->非功能性需求 A-->D[系統設計] X[過程]-.->D D-->概念設計 D-->邏輯設計 D-->物理設計 A-->E[實現與部署] A-->F[運行與維護] F-->G["DBAS生命週期模型中時間最長,具備不可預知性"]

2 需求分析

2.1.需求分析的概念與意義

需求是指用戶對軟件的功能和性能的要求

就是用戶但願軟件能作什麼事情,完成什麼樣的功能,達到什麼性能。

需求分析是在計算機系統的軟件功能分配和軟件設計之間起重要橋樑做用的一項軟件工程活動。

1 描述待開發的系統所要完成的功能。

2 需求分析使系統工程師可以刻畫出軟件的功能和性能

3 指明軟件和系統其它元素的接口並創建軟件必須知足的約束。

需求分析的目標是深刻描述軟件的功能和性能

肯定軟件設計的約束和軟件同其它系統元素的接口細節,定義軟件的其餘有效性需求。

2.2.需求分析的難點

a.軟件功能複雜

b.需求的可變性 用戶的不明確性

c.軟件產品的不可見性 軟件必須運行才能知道

2.3 需求獲取的方法(重點)

a.面談 系統分析員與用戶方的專家和業務人員進行知識交流、與他們會談,得到需求

b.實地觀察 實地觀察用戶的操做過程。對比現有的系統,思考如何採起更高效的方式

c.問卷調查 若需訪談的個體太多,且須要回答容易肯定的細節問題,可採起問卷調查方式

d.查閱資料 收集和查閱相關的文獻資料,如組織機構圖、規章制度、相關文檔、圖表及報告等。

a.面談 對象——負責當前業務的核心人員

​ 準備訪談

​ 計劃和安排訪談日程

​ 訪談開始和結束

​ 引導訪談——技巧 如:數據的值的精確度

​ 訪談整理工做 ——文檔

b.實地考察

​ 現場觀察法

​ 詢問法

​ 直接訪問、堵截訪問、電話訪談

c.問卷調查——細節

​ 適合使用狀況:

​ 需訪談的個體太多

​ 須要問答容易肯定的細節問題

​ 但願有詳細的結果

注意事項:

​ 使用問卷表儘量的簡短

​ 估計回答問題須要時間,並在問卷表開頭標註

​ 制定問題前,要肯定你須要的答案

d.查閱資料

​ 收集用戶如下材料:

​ 書面需求文檔

​ 如今的業務操做流程及其改進意見

​ 如今使用的數據表和文件及其格式,並肯定數據的來源

2.4 需求分析的過程

a.標識問題: 需求分析的第一步,經過對問題和標識得到對全部求解問題及其運行環境的理解

b.創建需求模型: 目前在信息系統的需求分析中可以使用結構化分析模型或面向對象分析模型

c.描述需求:需求、功能、信息、性能、環境、其餘需求

  1. 肯定需求:需求確認及評審。審覈功能需求、數據需求、性能、數據管理及其餘需求

2.4.1 需求分析的方法

目前在信息系統的需求分析中可以使用以下方法:

結構化分析與建模方法 SAD 如:DFD建模、IDEFO建模

面向對象分析與建模方法OOA(第五章介紹) 如:UML用例建模 OOAD

結構化設計(Stuctured Design,SD) 結構化分析(Structured Analysis,SA)

結構化分析與設計方法(SAD)

結構分析與設計方法是瀑布模型的首次實踐

結構化分析任務

  1. 創建分析模型。SA模型是描述軟件需求的一組模型,主要包括功能模型、數據模型和行爲模型。

  2. 編寫需求規格說明書(沒有固定的模式,每一個公司都不同)。

SRS是分析階段編寫的以文字爲主的文檔,

主要內容包括:引言、信息描述功能描述、行爲描述、質量保證、接口描述以及其餘需求等。

​ 結構化分析的指導思想。抽象與分解是結構化分析的主要指導思想。

DFD需求建模方法

I -> P ->O

數據流圖(Data Flow Diagram,DFD):

DFD建模方法的核心是數據流,從應用系統的數據流着手以圖形方法刻畫和標識

一個具體業務系統的數據處理過程和數據流

img

1 DFD建模的基本元素

a.數據流

數據流是數據在系統內傳播的路徑,所以有一組成分固定的數據組成。

如訂票單有旅客姓名、年齡、單位、身份證號、日期、目的等數據項組成。

因爲數據流是流動中的數據,因此必須有流向

除了與數據存儲之間的數據流不用命名外,數據流應該用名詞或名詞短語命名。

b.數據源(源點)

表明系統以外的實體,能夠是人、吳或其餘軟件系統。

c.對數據的加工(處理)

​ 加工時對數據進行處理的單元,它接受必定的數據輸入,對其進行處理,併產生輸出

d.數據存儲:

​ 表示信息的靜態存儲,能夠表明文件、文件的一部分、數據庫的元素等。

2.DFD建模過程 DFD功能建模 業務流程 Database Flow Diagram

具體建模過程及步驟:

1.明確目標,肯定系統範圍。

​ 將用戶對目標系統的功能需求完整、準確、一致地描述出來。

2.創建頂層DFD圖。

​ 說明系統邊界,即系統的輸入和輸出數據流,頂層DFD只有一張

3.構建第一層DFD分解圖。

​ 中間層DFD,描述了某個過程的分解,而它的組成部分又要進一步分解

4.開發DFD層次結構圖(源則:保持均勻的模型深度,按困難程度選擇)。

​ 底層DFD,由一些不可再分解的過程組成

5.檢查確認DFD圖
5條規則

父圖中描述過的數據流必須在相應子圖出現。

一個處理至少有一個輸入流和輸出流

一個存儲一定有流入的數據流和流出的數據流

一個數據流至少有一端是處理框。

表達描述的信息是全面、完整、正確和一致的。

3.IDEFO需求建模方法

最常使用的是IDEF0~IDEF4:

IDEF0:描述系統功能及其相互關係

IDEF1:系統信息及其數據之間聯繫

IDEF2:系統模擬,動態建模

IDEF3:過程描述及獲取方法

IDEF4 :面向對象設計

4.UML用例建模方法

UML方法採用面向對象思想建模,使用用例圖來描述系統功能需求。

用例圖由系統、角(jue)色、用例三種模型元素及其之間的 關係構成。

3 數據庫概念設計

概念設計是數據庫設計的核心環節。

經過對用戶需求進行綜合、概括與抽象,造成一個獨立與具體DBMS的概念模型。

3.1 數據庫概念設計的目標

定義和描述應用領域設計的數據範圍

獲取信息模型

描述數據的屬性特徵

描述數據之間的關係

定義和描述數據的約束

說明數據的安全性要求

支持用戶的各類數據處理需求

保證信息模型能轉化成數據庫的邏輯結構(即數據庫模式)。

3.2 概念設計的依據及過程

概念設計是DB設計的核心環節。概念數據模型是對現實世界的抽象和模擬。

依據:

​ 數據庫概念設計以需求分析的結果爲依據,即需求說明書、DFD圖以及需求階段收集到的應用領域

​ 中的各種報表等。

結果:

​ 概念設計的結果是概念模型(ER)與概念設計說明書。

過程:

​ 1.明確建模目標(模型覆蓋範圍)

​ 2.定義實體集(自底向上標識和定義實體集)

​ 3.定義聯繫(實體間關聯關係)

​ 4.創建信息模型(構造ER模型)

​ 5.肯定實體集屬性(屬性描述一個實體集的特徵或性質)

​ 6.對信息模型進行集成與優化(檢查和消除命名不一致、結構不一致等)

3. 3概念模型設計-ER圖

ER建模方法,用E-R圖來描述數據庫的概念模型

觀點:世界是由一組稱做實體的基本對象

這些對象之間的聯繫構成的與E-R模型有關的概念

3.3.1 E-R 模型的概念

實體(Entity)或實例(Instance)

客觀存在並可相互區分的事物叫實體

實體集(Entity Set)

同型實體的集合稱爲實體集。如全體學生

屬性(Attibute)

實體所具備的某一特性。一個實體能夠由若干屬性來刻畫。每一個屬性範圍稱爲域。

注意:

一個屬性的值必須屬於惟一的域,域在這裏至關於數據類型的子集,屬性的取值必須爲同一域。

標識屬性的值不能重複且不能夠爲空。

例如:學生可由學號、姓名、年齡、系、年紀等組成。

碼(key):鍵

實體集中惟一標識每個實體的屬性或屬性組合。

用來區別同一實體集中的不一樣實體的稱做主碼。 主鍵

一個實體集中任意兩個實體在主碼上的取值不能相同如:學號是學生實體的主碼

聯繫(Relationshi)

描述實體之間的相互關係

如學生與老師間的授課關係,學生與學生間有班長關係。

聯繫也能夠有屬性,如學生與課程之間有選課聯繫,

每一個選課聯繫都有一個成績做爲其屬性

同類聯繫的集合稱爲聯繫集

實體間的聯繫有三類:

實體之間的聯繫的數量,即一個實體經過一個聯繫集能與另外一實體集相關聯的實體的數目

一對一聯繫(1:1)

​ 如:「系」與「系主任」(一個系只有一個系主任,一個系主任只負責管理一個系)

一對多聯繫(1:n)

​ 如:「系」與「學生」(一個系招收若干學生,一個學生只屬於一個系)

多對多聯繫(m:n)

​ 如:「學生」與「課程」(一名學生可選修多門課程,每門課程可被多名學生選修)

graph TB B((用戶編號))--- A[用戶] C((用戶名))--- A D((密碼))--- A E((真實姓名))--- A F((角色))--- A A--- R{擔任} R--- J[角色] J--- H((角色編號)) J---I((角色名稱)) J--- K((角色描述))

img

4 數據庫邏輯設計

4.1 邏輯設計的任務:

將概念模型(如ER圖)轉化爲DBMS支持的數據模型(如關係模型),並對其進行優化。

4.2 邏輯設計的依據和階段目標:

img

4.3數據模型

數據模型是對現實世界的抽象,是用來表示實體與實體之間聯繫的模型。

graph TB A((數據模型))==>層次模型 A==>B["關係數據模型(若干個關係模式組成的集合)"] A==>網狀模型 關係是關係模式的實例-.->B B-->數據結構 B-->C[關係的完整性約束] C-->|實體完整性|主碼不能爲空 C-->|參照完整性|外碼不能爲空 C-->|用戶參照完整性|針對某一具體的關係數據庫約束條件 style B fill:red,font:white

4.3.1 關係數據模型

關係數據模型就是用二維表格結構來表示實體及實體之間聯繫的模型。

特色:簡單靈活

注意:

關係模式描述關係的靜態結構,它是靜態、穩定

而關係是動態、隨用戶對數據庫的操做而變化的

4.3.1.1 關係模式

關係的描述稱爲關係模式(Relation Scheme)。

關係模式由五部分組成即它是一個五元組:R(U,D,DOM,F)

R:關係名

U:組成該關係的屬性名集合

D:屬性組U中屬性所來自的域(取值範圍)

DOM:屬性到域的映射

F:屬性組U上一組數據依賴

因爲D、DOM對模式設計的關係不大,這裏把關係迷失簡化爲一個三元組:

R<U,F>,當且僅當U上的一個關係R知足F時,R稱爲關係模式R<U,F>的一個關係

img

1 關係模式設計的要求

一、關係數據庫設計的核心: 關係模式的設計。

二、關係模式的設計目標:

按照必定的原則從數量衆多而又相互關聯的數據中,構造出一組既能較好地反映現實世界

而又有良好的操做性能的關係模式。

2 數據庫設計步驟

新奧爾良法,數據庫設計步驟:

需求分析 -> 概念結構設計 -> 邏輯結構設計-> 物理結構設計

​ E-R圖 關係模式設計

4.3.2 數據依賴

數據依賴是關係內部屬性與屬性之間的一種約束關係

一、 現實解釋屬性間相互聯繫的抽象

二、 數據的內在性質

三、 語義的體現

完整性約束的表現形式

限定屬性的取值範圍,如年齡<60

定義屬性間值得相互關聯(主要體現於值得相等與否),這就是數據依賴

1 函數依賴

(Functional Dependency,FD ) 惟一肯定

\[若是 X \to Y,且Y \notin X,則 X \to Y 稱爲非平凡函數依賴。\\\ 若是 Y \subseteq X,則稱 X \to Y 爲平凡函數依賴。\\\ 因爲 Y \subseteq x時,必定有 X \to Y,平凡函數依賴必然成立,沒有意義\\\ 全部通常所說的函數依賴老是值非平凡函數依賴 \]

)img

img

img

)img

2 多值依賴

(Multivalued Dependency,MD) 不是惟一肯定

教師號可能多值依賴課程號,由於給定一個(課程號,參考書號)的組合,可能有對

應多個教師號。這是由於多個老師可使用相同或不一樣的參考書上同一門課。

簡單點講,函數就是惟一肯定的關係;多值依賴卻不能惟一肯定

4.3.4 候選碼主碼外碼

若是某屬性組的值能惟一肯定整個元組的值,則稱該屬性組爲候選碼或候選關鍵字。

例如:(學號,姓名,性別,年齡)中,學號是關鍵字,(學號,姓名)不是關鍵字,性別不是關鍵字。

候選碼若是有多個,能夠選其中的一個做爲主碼(Primary Key)。

4.3.5 數據規範化

關係數據庫的設計主要是關係模式設計。關係模式設計的好壞直接影響到數據

庫設計的成敗。將關係模式規範化,是設計較好的關係模式的唯一途徑。  

關係模式的規範化主要是由關係範式來完成的。  

關係模式的規範化:把一個低一級的關係模式分解爲高一級關係模式的過程。

目的:儘可能消除插入、刪除異常,修改複雜,數據冗餘的問題

4.3.6 範式(約束)

範式:關係模式知足的約束條件稱爲範式。根據知足規範化的程度不一樣

範式由低到高分爲 1NF,2NF,3NF,BCNF,4NF,5NF。

做用:用於消除數據庫中的多餘數據,改進數據庫總體組織,加強數據的一致性,增長數據庫設計的靈活性

1 NF:若是關係模式R,其全部屬性都是不可再分的基本數據項,則稱R屬於第一範式,

R∈1NF

img

2NF:若是關係模式R∈1NF,且每一個非主屬性徹底函數依賴於主碼

則稱R屬於第二範式 ,R屬於2NF

列如:判斷R(學號,姓名,年齡,課程名稱,成績,學分)是否屬於第二範式

主碼(學號,課程名稱)

非主屬性:姓名,年齡,成績,學分

存在以下決定關係:

學號,課程名稱)->(姓名,年齡,成績,學分)

但(課程名稱)->(學分) R不屬於2NF

學號)->(姓名,年齡)

3NF:若是關係模式R爲2NF,而且中的每一個非主屬性不傳遞依賴於R的主碼

則稱關係R是屬於第3範式的,R屬於3NF.

例如:判斷R(學號,姓名,年齡,所在學院,學院地點,學院電話)是否屬於第三範式。

主碼:(學號)

非主屬性:姓名,年齡,所在學院,學院地點,學院電話

存在非關鍵字段"學院地點"、「學院電話」對關鍵字段「學號」的傳遞函數依賴

3NF要求實體的屬性不能存在傳遞依賴 R不屬於3NF

img

4.4 數據庫邏輯設計方法

E-R圖 -> 關係模型

設計邏輯結構分分三步:

a.將概念結構轉化爲通常的關係模型

b.將轉化來的關係模型向特D定DBMS支持下得數據模型轉換

c.對數據模型進行優化

若是是關係型數據庫管理系統,就應將概念模型轉換爲關係模型,即將E-R圖中的實體

聯繫轉換爲關係模式。

數據庫邏輯模型的產生,即概念模型按必定規則能夠轉換成數據模型。

這種轉換的原則以下:

一、一個實體轉換成一個關係模式

二、一個1:1聯繫能夠轉換爲一個獨立的關係模型 也能夠與任意一端對應的關係模式合併。

三、一個1:n聯繫能夠轉換爲一個獨立的關係模式,也能夠與n端對應的關係模式合併。

四、一個m:n聯繫轉換爲一個關係模型

五、三個或三個以上實體間的一個多元聯繫轉換爲一個關係模式。

六、同一實體集的實體間的聯繫,也能夠按1:一、1:n和m:n三種狀況分別處理

5 數據庫物理設計1

5.1 物理設計概述

物理數據庫設計是設計數據庫的存儲結構和物理實現方法

目的:將數據的邏輯描述轉換爲實現技術規範,設計數據存儲方案,

以便提供足夠好的性能並確保數據庫數據的完整性、安全性、可靠性。

5.2 數據庫的物理結構

物理設備上的存儲結構存取方法稱爲數據庫的物理結構

數據庫中的數據以文件形式存儲在外設存儲介質上。

一個文件在物理上可看作是存放記錄的一列磁盤塊組成的,成爲物理文件。

文件組織、文件結構、文件存取、索引技術

5.3 索引

索引(Index)是數據庫中獨立的存儲結構

做用是提供一種無須掃描每一個頁面(存儲表格數據的物理塊)而快速訪問數據頁的方案

索引技術(Indexing)是一種快速數據訪問技術。

索引技術的關鍵:創建記錄域取值到記錄的物理地址(如頁碼)間的映射關係

即索引索引能提升性能,可是有代價的。

設計和建立索引是,應確保對性能的提升程度大於在存儲空間和處理資源方面的代價

img

1 有序索引

索引文件機制:

利用索引文件(索引記錄組成)實現記錄域(查找碼,排序域)取值到記錄物理地址間的映射關係。

數據文件(主文件)和索引文件(索引記錄或索引項的集合)是

有序索引技術中的兩個主數據文件常採用順序文件結構。

幾種主要的有序索引:

1**.彙集索引**(索引項與數據記錄順序一致,索引順序文件)和非彙集索引。

一個數據文件只可創建一個彙集索引,但可創建多個非彙集索引。邏輯地址和物理地址相同

2.稠密索引(數據文件中每一個查找碼都對應索引記錄)和稀疏索引(部分查找碼的值對應索引記錄)。

3.主索引(主碼屬性集上創建的索引)與輔索引(非主屬性上創建的索引)。

4.惟一索引(索引列不包含重複值)

5.單層索引(線性索引,每一個索引項順序排列直接指向數據文件中的數據記錄)和多層索引(大數據量文件中的採用多層樹型(B,B+樹)索引快速定位)。

2 散列索引

哈希(Hash)索引機制,利用散列函數實現記錄域取值到記錄物理地址間的直接映射關係。

6 數據庫的物理設計2

目標是獲得存儲空間佔用少,數據訪問效率高和維護代價低的數據庫物理模式。

數據庫底層物理存儲與存取,與DBS所依賴的硬件環境、操做系統和DBMS密切相關。

目前大部分DBS都是關係數據庫系統。

6.1 數據庫邏輯模型描述

根據數據庫邏輯結構信息設計目標DBMS可支持的關係表(這裏稱爲基本表)的模式信息

這個過程稱爲數據庫邏輯模式描述關係模式及其視圖轉換基本表和視圖,

利用完整性機制(如觸發器)設計面向應用的業務規則。

SQL Server 採用T-SQL語言。

爲基本表選擇合適的文件結構(堆文件、順序文件、彙集文件、索引文件和散列文件)

6.2 文件組織與存取設計

基本原則:

根據應用狀況將易變部分與穩定部分、存取頻率較高部分與存取頻率較低部分分開存放以提升系統性能。

分析理解數據庫事務訪問特性:

  • 使用事務-基本表交叉引用矩陣;
  • 估計各事務執行頻率;
  • 彙總每基本表各事務操做頻率信息;
  • 根據結果設計文件結構能夠考慮將表和索引分別放在不一樣的磁盤上。

在查詢時,因爲兩個磁盤驅動器分別在工做,於是能夠保證物理讀寫速度比較快。

6.2.1 影響數據文件存儲結構的因素

  • 存取時間
  • 存儲空間利用率
  • 維護代價

這三個方面經常是相互矛盾的

解決辦法

  • 適當冗餘  
  • 增長聚簇功能  
  • 必須進行權衡,選擇一個折中方案

6.2.2 存取路徑

在關係數據庫中,選擇存取路徑主要指肯定如何創建索引。

對同一個關係要創建多條存取路徑才能知足多用戶的多種應用要求。

物理設計的第一個任務就是要肯定選擇那些存取方法

6.2.3 DBMS經常使用存取方法

索引方法,目前主要是B+樹索引方法、聚簇(Cluster)方法、 HASH方法

創建索引原則

  • 一個(組)屬性常常在操做條件中出現
  • 一個(組)屬性常常在鏈接操做的鏈接條件中出現
  • 一個(組)屬性常常做爲彙集函數的參數。

創建彙集索引

檢索數據時,常以某個(組)屬性做爲排序、分組條件。

檢索數據時,常以某個(組)屬性做爲檢索限制條件,並返回大量數據。

表中某個(組)的值重複性較大。

6.2.4 數據分佈設計

不一樣類型數據的物理分佈將應用數據(基本表)、索引、日誌、數據庫備份數據等合理安排在不一樣介質中。

應用數據的劃分與分佈

根據數據的使用特徵劃分(頻繁使用分區和非頻繁使用分區)

根據時間、地點劃分(時間或地點相同的屬於同一分區)

分佈式數據庫系統(DDBS)中的數據劃分(水平劃分或垂直劃分)

派生屬性數據分佈(增長派生列或不定義派生屬性)

關係模式的去規範化(下降規範化提升查詢效率)

  • 水平劃分

將基本表劃分爲多張具備相同屬性、結構徹底相同的子表,子表包含的元

組是基本表中元組的子集。

例如,對商品按照商品的生產年份進行劃分就屬於水平劃分。

  • 垂直劃分

將基本表劃分爲多張子表,每張子表包含的屬性是原基本表的子集。

例如:商品表(商品編號、品名、單價、庫存量、銷售單件、備註)

可垂直劃分爲兩張子表:

商品表(商品編號、品名、銷售單價)

商品表(商品編號、單價、庫存量、備註)

6.3 肯定系統配置

DBMS產品通常都提供了一些存儲分配參數

同時使用數據庫的用戶數

同時打開的數據庫對象數

使用的緩衝區長度、個數

時間片大小

數據庫的大小

裝填因子

鎖的數目.........

須要根據應用環境肯定這些參數值

系統都爲這些變量賦予了合理的缺省值。

但不必定適合每一種應用環境。

根據具體狀況肯定這些參數值以使系統性能最優。

6.4 物理模式評估

對數據庫物理設計結構從存取時間、存儲空間、維護代價等方面進行評估,

重點是時間和空間效率。

若是評價結果知足原設計要求則可進入到物理實施階段,不然,就須要從新設計或修改

物理結構,有是甚至要返回邏輯設計階段修改數據模型。

7 功能設計與實施

DBAS功能設計包括應用軟件中的數據庫事務設計和應用程序設計

功能設計過程通常被劃分爲整體設計、概要設計和詳細設計。

而具體到數據庫事務設計部分,又可分紅事務概要設計和事務詳細設計。

完成系統設計工做以後,就進入系統實現與部署階段

7.1 軟件架構與設計過程

一、軟件體系結構與設計過程 DBAS

軟件體系結構又稱軟件架構,軟件體系結構={構件,鏈接件,約束}

軟件體系結構是軟件系統中最本質的東西。良好的體系結構 必須是普適、高效和穩定的。

軟件體系結構有多種風格和類型,

如分層體系結構、模型-視圖-控制器(MVC)體系結構客戶端/服務器體系結構等。

二、軟件設計過程

軟件開發由設計、實現、測試三個環節組成,設計又包含概要設計和詳細設計。

a .概要設計的任務是進行軟件整體結構設計,可採用層次結構圖創建軟件整體結構圖

b .詳細設計的任務是進行數據設計、過程設計及人機界面設計。

設計原則:模塊化、信息隱藏、抽象與逐步求精。

軟件設計可選用結構化設計方法、面向對象設計方法或面向數據設計方法等。

7.2 DBAS 整體設計

DBAS整體設計的任務是肯定系統整體框架,主要內容包括

DBAS體系結構設計

軟件體系結構設計

軟件硬件選型與配置設計

業務規則初步設計

一、DBAS體系結構設計

將系統從功能、層次/結構、地理分佈等角度進行分解,劃分爲各子系統,定義個子系統功能;

設計系統的全局控制,明確各子系統間的交互和接口關係。

兩種常見的DBAS體系結構:

客戶/服務器體系結構 (C/S) Client/Server

瀏覽器/服務器體系結構(B/S) Brower/Server

img

二、軟件體系結構設計

DBAS軟件包括操做系統、數據庫管理系統、開發環境、、中間件、應用軟件(數據庫事務和應用程序)

從需求分析出發分解成各子系統,分配相應功能,定義相互間交互機制,完成子系統結構設計,將各子系統從

功能上分紅數據庫事務模塊(事務自身處理邏輯)與粒度大的應用該程序模塊(業務規則),肯定全局控制和調

用關係,可用模塊結構圖(模塊+調用+數據+控制+轉接)表示系統整體結構和分層模塊結構。

三、軟硬件選型與配置設計

規劃分析階段提出系統功能、性能及實現的約束對軟硬件作了評估和選擇建議;需求對系統功能性能提出了具體要求。爲保證DBAS功能性能順利實現,整體設計階段須要對軟硬件設備作出合理選擇,並進行初步配置設計。

軟硬件選型涉及的內容:

網絡及設備選型;數據存儲及備份方案;服務器選型;

終端軟件環境;軟件開發平臺和語言、工具;

系統中間件及第三方軟件選型。

四、業務規則初步設計

任務:從系統的角度,規劃DBAS的業務流程,使之符合客戶的實際業務須要。

DBAS的各項業務活動具備邏輯上的前後關係,可將它們表示成一個操做序列並用業務流程圖表示。

7.3 DBAS功能概要設計

在整體設計結果基礎上,將DBAS應用軟件進一步細化爲模塊/子模塊

組成應用軟件的系統-子系統-模塊-子模 塊層次結構,並從結構、行爲、數據三方面進行設計。

從功能角度,DBAS系統一般劃分爲四個層次實現:

表示層

業務邏輯層

數據訪問層

數據持久層 索引設計

graph LR F[按照功能角度劃分]-.-A A(("DBAS系統功能概要"))-->|表示層|人機界面設計 A-->|業務邏輯層|高內聚低耦合 A-->|數據訪問層|事務概要設計 A-->|數據持久層|索引設計

一、表示層概要設計

人機界面設計,影響系統易用性。目前第四代是WIMP(窗口、圖標、菜單、指示器)

與Web技術、多任務處理技術相結合。

設計原則:‘用戶自主控制’;反饋及時上下文感知;容錯與錯誤恢復;界面標準常規;輸入靈活;

界面簡潔交互及時... 簡潔友好 容錯率低

二、業務邏輯層概要設計

耦合是模塊之間的,高內是模塊內的

設計原則:高內聚低(鬆)耦合,即構件單一原則;構建獨立功能;接口簡單明確;

構件間關係簡單,過於複雜,就細化,分解。

設計內容:結構,行爲,數據,接口,故障處理、安全設計,系統維護和保障等。

三、數據訪問層概要設計

任務:針對DBAS的數據處理需求設計用於操做數據庫的各種事務。

事務概要設計核心在與辨識和設計事務自身處理邏輯,注重流程,不考慮與平臺相關、具體操做方法和事

事務實現機制。

一個完整的事務概要設計包括事務名稱、訪問的關係表及其數據項、事務邏輯(事務描述)、事務用戶

使用,啓動、調用該事務的軟件模塊和系統)。

事務:事務(Transaction)是訪問並多是更新數據庫中各類數據項的一個程序執行單元(unit)

事務的特性:原子性、一致性、隔離性、持續性。稱爲ACID特性。

  • 原子性(atomicity)一個不可分割的工做單位。 要麼所有執行,要麼全不執行
  • 一致性(consisitency)從一個一致性狀態變成另外一個一致性狀態。
  • 隔離性(isolation)執行不能被其餘事務干擾。
  • 持久性(durability)永久性(permanence)指一個事務一旦提交,對數據庫中數據的改變就應該是永久性的。

四、數據持久層概要設計

屬於數據組織與存儲方面的設計內容,

7.4 DBAS功能詳細設計

一、表示層詳細設計

人機界面採用原型迭代法合適,三個步驟:

a.初步設計:設計人機交互命令系統並優化。(整體設計)

  1. 用戶界面細節設計。如組織形式、風格、彩色,操做方式。(概要設計)

c.原型設計與改進(詳細設計)

二、業務邏輯層詳細設計

設計各模塊內部處理流程和算法、具體數據結構、對外詳細結構等。

7.5 應用系統安全架構設計

7.5.1 數據安全設計

安全性保護:防止非法用戶對數據庫的非法使用,避免數據泄露、篡改或破壞。

完整性保護:保證數據源的正確性、一致性和相容性。

併發性控制:保證多個用戶能共享數據庫,並維護數據一致性。

數據備份與恢復:系統失效後的數據恢復,配合定時備份數據庫,不丟失數據。

數據加密傳輸:將一些高級的敏感數據經過必定的加密算法後傳輸。

a.數據庫的安全性保護

主要保護方式:

用戶身份鑑別: Windows身份驗證、SQL身份驗證。

權限控制

對後臺數據庫是不一樣用戶對數據的不一樣存取需求設置不一樣權限;

對前臺程序是爲每一個合法用戶設定權限登記,外部用戶設置有限查詢功能。

視圖機制: 經過視圖機制把保密數據對無權用戶隱藏。

b . 數據庫的完整性保護

數據庫的完整性指數據庫中數據的正確性、一致性及相容性。

方法:設置完整性檢查

即對數據設置一些約束條件(如實體完整性、參考完整性、用戶自定義完整性)

完整性約束條件做用對象:列(類型、範圍、精度、排序)、元組(記錄中各屬性之間的聯繫

約束) 、關係(若干記錄間、關係集合與集合之間的聯繫)三種級別。

DBAS中,完整性約束功能包括完整性約束條件設置和檢查。

c.數據庫的併發性控制

併發訪問(Concurrent Access):事務在時間上重疊執行。

對多用戶併發存取同一數據的操做可能致使數據不一致,並破壞事務的隔離性,

所以DBMS必須提供併發控制機制,併發控制機制是衡量一個DBMS性能的重要標誌之一。

實現數據庫併發控制的經常使用方法是封鎖技術。

所謂封鎖,是指事務T在對某個數據對象(例如表、記錄等)操做以前,先向系統發出請

求, 對其加鎖,加鎖後,事務T就對該數據對象有了必定的控制,在事務T釋放它的鎖以前,

其它的事務不能更新此數據對象

基本鎖類型

排它鎖(eXclusive lock,簡記爲X鎖),寫鎖,若事務T對數據對象A加上X鎖,則只容許

T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖.

排它鎖保證了其它事務在T釋放A上的鎖以前不能再讀取和修改A

共享鎖(Share lock,簡記爲S鎖),讀鎖,若事務T對數據對象A加上S鎖,則其它事務

只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。

共享鎖保證了其它事務能夠讀A,但在T釋放A上的S鎖以前不能對A作任何修改

避免死鎖

死鎖是兩個或兩個以上的事務之間的循環等待。

設計避免死鎖的原則:

(1)按照同一順序訪問資源。(如第一個事務提交或而後第二個事務進行)先來先服務

(2)避免事務交互性

(3)採用小事務模式,縮短長度和佔用時間。 短事務優先

(4)儘可能使用記錄級別的所(行鎖),少用表級別鎖。

(5)使用綁定鏈接,同一用戶打開的兩個或多個鏈接能夠互相合做。

d、數據庫的數據備份與恢復

數據庫恢復的基本原理:利用存儲在系統其餘存儲器上的冗餘數據(即數據備份)來重建。

數據庫備份與恢復策略:

雙機熱備(基於Active/Standby方式的服務器熱備) 有兩臺服務器同時運行,存儲相同的據

數據轉儲(也稱爲數據備份)

數據加密存儲(針對高敏感數據)

e 數據加密

數字安全證書

對稱密鑰加密數字

數字簽名

數字信封

實施購買第三方中間件產品整合是一個快速有效的解決方案。

7.5.2 環境安全設計

環境安全設計漏洞與補丁:按期查找漏洞更新補丁

計算機病毒防禦:殺毒軟件;實時監控 ;

網絡環境安全:防火牆;入侵檢測系統;網絡隔離(邏輯隔離與物理隔離) 防火牆

物理環境安全 :如防盜設施;UPS(電源,防止斷電);溫溼度報警器等

7.5.3 制度安全設計

管理層面安全措施

7.6 DBAS實施

DBAS實施階段主要包括如下工做:

一、建立數據庫考慮因素:

初始空間大小;

數據庫增量大小;訪問性能(如併發數,訪問頻率)

二、數據裝載

步驟:篩選數據—轉換數據格式—輸入數據—校驗數據

三、編寫與調試應用程序

四、數據庫系統試運行(功能測試與性能測試)

8 UML與數據庫應用系統

8.1 DBAS建模

1 統一建模語言(UML)

英文全稱爲 Unified Modeling Language

UML是一種基於面向對象的可視化的通用(General)建模語言

UML只是一種建模語言,不是一種建模方法

  1. 建模語言:
  2. 建模過程

2 UML的組成

語義(天然語言)和**表示法(**可視化標準符號)組成

元元模型 ——抽象

元模型——具體 元元模型與元模型是抽象和具體的關係,相似於類與對象的關係

模型層,UML的模型,類模型或類型模型

用戶模型,UML模型的實例,對象模型或實例模型。

graph LR X((UML組成))-->A[語義定義在一個四層建模概念框架中] X-->Y[表示法] A[語義]-->元元模型 A-->元模型 A-->模型層 A-->用戶模型

UML的五種視圖 結構、實現、行爲、環境和用例視圖

13種圖(UML2.0):靜態結構圖和行爲結構圖

8.2 DBAS業務流程與需求表達

8.2.1 業務流程與活動圖

描述系統或子系統的工做流程

活動圖能夠描述並行

注意:活動圖只能有一個起點,可是能夠有多個終點

8.2.2 系統需求與用例圖

系統需求:用戶心中的真正指望

用例模型是把知足用戶需求的所用功能表示出來的工具

用例模型由用例、角色和系統三部分組成

​ 系統:各類用例的「黑匣子」   角色:與系統交互的人或其餘實體   用例:完整功能全部動做(一次操做)集合

注意:用例圖是用例視圖,不是行爲視圖

graph LR A((用例模型))==>|用例|完整功能全部動做集合 A==>|角色|與系統交互的人或其餘實體 A==>|系統|各類用例的黑匣子

角色之間的關係

通用化關係:指把某些角色的行爲抽取出來做爲通用行爲,這些通用行爲構成超類

用例與角色之間的關係

鏈接關係(關聯,通訊關聯):代表那種角色能與該用例通訊,是雙向的一對一關係。

用例之間的關係

擴展: 一用例增長新內容成爲另外一個用例。 extends

包含(使用): 一個用例使用另外一個用例。 include  

關聯(組合): 把相關用例打成包看成總體

8.3 DBAS 系統內部結構的表達

1 系統結構與類圖

系統內部結構通常分爲靜態結構和動態結構。 在UML中,用類圖來描述系統靜態結構,用順序圖和通訊圖來表示系統動態結構。 類圖主要表達的是問題領域的概念模型。 類圖由類名、屬性及操做組成。

graph LR A((系統內部結構))-->|靜態結構|B[類圖] B-->類名 B-->屬性 B-->D["操做(方法)"] A-->C[動態結構] C-->順序圖 C-->通訊圖

類與類之間的關係

關聯(彙集(共享彙集,組成或組合)),繼承(或叫泛化),依賴,精化(或叫實現)

類名
屬性
操做(方法)

2 系統結構與順序圖

針對每個特定用例,如何利用類圖規範的對象來完成用例交付的任務,必需要利用順序圖 順序圖主要用於描述系統內對象之間的消息發送和接收序列。 順序圖中全部的元素,都必須在類圖中存在。

強調時間上的前後順序

3 系統結構與通訊圖

通訊圖是交互圖的一種,也稱爲協做圖。 通訊圖顯示對象間組織交互關係和連接。不側重交互順序,用序列號來肯定消息及其併發線程的順序。 順序圖強調時間,通訊圖強調空間

8.4 DBAS系統微觀設計的表達

1 微觀設計與對象圖

系統設計中,須要考慮細節部分。

UML中,對於細節方面的內容可用對象圖、狀態機圖及時間圖來表達、分析和

描述某個特定情況下系統的運做狀況。

對象圖是類圖的實例,描述特定時間中全部對象在系統中的結構,是一個快照。

對象名:類名
屬性="屬性值"

2 微觀設計與狀態機圖

狀態圖用來描述有關事件或對象的狀態轉移。 狀態圖只能有一個起始狀態,可有多個結束狀態。 狀態間的轉移由事件驅動

3 微觀設計與時間圖

當狀態的轉換由時間因素決定時,使用時間圖來描述狀態的變化。 描述時間驅動的狀態轉換,即當狀態維持多少時間後轉移。 時間圖中,整個矩形框就是一個生命線。

8.5 DBAS系統宏觀設計的表達

1 宏觀設計與包圖

宏觀設計指將涉及的焦點放在研究比較大範圍中的元素之間的聯繫,如包、命名空間、子系統等。

這裏的包表示盤符,命名空間表示文件夾,子系統表示源代碼

一個良好的命名空間,便於開發人員理解,並使得各個命名空間之間可以鬆耦合

而命名空間內則可知足高內聚的要求

包圖表示系統中不一樣包、命名空間或不一樣項目間的彼此關係。也就是邏輯層次上與實體層次上的關聯性。

2 宏觀設計與交互概述圖

是將活動圖順序圖嫁接在一塊兒的圖 。 以活動圖爲基礎,在控制流間鏈接交互圖,從而將全部交互圖關係呈現出來。 交互概述圖能夠把不一樣的交互圖結合在同一張圖中來表達。

3 宏觀設計與複合結構圖

外部系統的整合關係着項目的成敗。 在項目開始前,最好將待開發的系統與外部系統的關係作一個初步的定義。 複合結構圖適用於系統間的溝通接口,適合作構架師在初期階段評估系統複雜度的工具,也能夠是系統維護的參考圖。

8.6 DBAS系統實現與部署的表達

1 系統實現與組件圖

組件圖用來表示系統的靜態實現視圖。 用來展示一組組件間的組織和依賴,用於對源代碼、可執行的發佈、物理數據庫等的系統建模。 組件是邏輯設計中定義的概念和功能在物理構架中的實現。

2 系統實現與部署圖

部署圖又叫配置圖,描述系統中硬件和軟件的物理配置狀況與系統體系結構。 部署圖說明實體組件,如可執行程序,將如何部署到實際的計算機中。 部署圖要在項目進行集成測試前提供

9 數據庫及數據庫對象

9.1 建立及維護數據庫

SQL Server將數據庫映射爲一組操做系統文件:

1 SQL Server中數據庫的分類

系統數據庫(自動建立)

master :全部系統級信息,元數據、端點、鏈接服務器

msdb:代理服務調度報警和做業、記錄操做員時使用保存

tempdb:用於保存臨時對象和中間結果,每次啓動會重置 備份數據庫是無須保存

model :全部數據庫的模板,存放用戶數據庫公共信息

esource:只讀數據庫。在對象資源管理器中看不到。

用戶數據庫(保存於用戶業務有關的數據)

graph LR A((SQL Server))===B["系統數據庫"] B-->|master|全部系統級信息 B-->|msdb|日誌 B-->|tempdb|保存臨時對象 B-->|model|模板 B-->|esource|只讀數據庫 A==>C[用戶數據庫] C-->用戶業務相關數據
9.2 SQL Server 數據庫的組成

SQL Server 將數據庫映射爲一組操做系統文件【持久】

數據文件

主要數據文件 .mdf :只有一個,大小不得小於3mb,而且必須創建在主文件組

次要數據文件 .ndf :有0個或多個,可在一個或多個磁盤存放

日誌文件 .ldf :事務日誌文件 。 至少有一個日誌文件。

日誌文件的格式: 以記錄爲單位的日誌文件和以數據塊爲單位的日誌文件兩種。

數據庫存儲空間的分配

建立用戶數據庫時,model數據庫被自動複製到新建庫

數據存儲的最小單位,數據頁(Page,簡稱頁 )

1頁是一塊8KB的連續磁盤空間

頁的大小決定了數據庫表中一行數據的最大大小。行不能跨頁存儲。

\[例:一個數據表10000行數據,每行3000字節,計算表須要的存儲空間。\\ 答案:10000/2*8KB=40MB\\ 空間利用率75%\\ \]

9.3 數據庫文件組

兩種類型的文件組

主文件組(PRIMARY)

系統定義,包括主要數據文件和任何沒有明確分配的其餘文件組的其餘數據文件

系統表全部頁均分分配在主文件組中。

用戶定義文件組 在定義或修改數據庫是用FILEGROUP關鍵字指定。

9.4 數據庫文件的屬性

定義數據庫的數據文件和日誌文件所需信息:

文件名及其位置

邏輯文件名,物理文件名(硬盤上)

初始大小 不能小於model數據庫主要數據文件的大小

增加方式

可指定文件是否自增加(默認)

最大大小

文件增加的最大限制。默認無限制

9.5 用T-SQL建立數據庫

建立數據庫通常有兩種方式:

經過SQL Server Managerment Studio 建立數據庫

經過T-SQL語句建立數據庫

CREATE DATABASE databaseName
[ ON             --指定建立的數據庫主文件(mdf)存放的路徑好比 e:\Studentdb.mdf
   [<filespec> [, … n] ]
   [, <filegroup> [,…n] ]
]
[LOG ON {<filespec> [,…n]}] 
[COLLATE collation_name]   --指定建立的數據庫日誌文件(ldf)存放的路徑好比e:\Studentdb_log.ldf
[FOR LOAD| FOR ATTACH]
  • 說明

    PRIMARY :指定爲主要數據庫文件,沒有指定默認第一個文件是主要數據文件。 LOG ON :自動建立日誌文件,大小爲數據文件總和25%或512KB中大的。 NAME :邏輯文件名,惟一。 FILENAME :物理文件名。 SIZE:初始大小,.mdf大小不小於model,.ndf默認爲1MB

    MAXSIZE:最大大小,未指定則文件自動增加到磁盤滿。 UNLIMITED :增加無限制,通常指定爲日誌文件2TB,數據文件16TB. FILEGROWTH:指定文件自動增量,不超過MAXSIZE.默認數據文件1MB,日誌文件爲當前文件的10%。 FILEGROUP :文件組邏輯名,惟一,不能是系統名。 DEFAULE :指定該文件組爲默認文件組。

9.6 修改數據庫

擴大數據庫空間   擴大數據庫中已有文件的大小   爲數據庫添加新的文件

收縮數據庫空間

即釋放數據庫中未使用的空間,文件的收縮從末尾開始

自動收縮:AUTO_SHRINK, 默認false。

手工收縮:收縮數據庫中某個文件大小;

​ 按比例收縮整個數據庫大小。

添加和刪除數據庫文件

-- 修改數據庫
  ALTER DATABASE database

  { ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ] 

  | ADD LOG FILE < filespec > [ ,...n ] 

  | REMOVE FILE logical_file_name 

  | ADD FILEGROUP filegroup_name 

  | REMOVE FILEGROUP filegroup_name 

  | MODIFY FILE < filespec > 

  | MODIFY NAME = new_dbname

  | MODIFY FILEGROUP filegroup_name {filegroup_property 

  | NAME = new_filegroup_name }

  | SET < optionspec > [ ,...n ] [ WITH < termination > ] 

  | COLLATE < collation_name > }

擴大指定文件的大小:

ALTER DATEBASE STU_DB 

MODIFY FILE (NAME=student_data, SIZE=8MB)

添加新的數據文件:

ALTER DATABASE STU_DB 

ADD FILE (NAME=student_data2,

FILENAME = 'E:\Data\student_data2.ndf' ,SIZE=6MB,FILEGROWTH=0)

收縮整個數據庫的大小

DBCC SHRINKDATABASE

收縮指定文件的大小

DBCC SHRINKFILE

例1:DBCC SHRINKDATABASE(students,20)

收縮數據庫,該數據庫所用文件都有20%可用空間

例2:DBCC SHRINKFILE(students_data1,4)

收縮數據庫到4MB大小

刪除數據庫文件:

ALTER DATABASE STU_DB

REMOVE FILE student_log1

注意:

添加文件時,每一個文件組中的數據文件

按比例填充,日誌文件時依次增長的。

文件爲空才能刪除

9.7 分離和附加數據庫

分離數據庫

做用:實現將數據庫從一臺數據庫服務器移到另外一臺,不須要重建。 從實例中刪除,不刪除數據文件和日誌文件,保持了數據文件和日誌文件完整一致。 使用 sp_detach_db 系統存儲過程實現

如:

EXEC sp_detach_db‘student’,‘true’

附加數據庫

將分離的數據庫從新附加到數據庫管理系統中。 必須指定主要數據文件的物理存儲位置和文件名。  

CREATE DATABASE ……
  FOR ATTACH|ATTACH_REBUILD_LOG

例:

CREATE DATABASE students
On(FILENAME=‘F:\Data\Students_data1.mdf’)
FOR ATTACH

9.2 架構

架構(Schema,也稱模式),是數據庫下的一個邏輯命名空間,是數據庫對象的容器,一個數據庫包含一個或多個構架,同一個數據庫內架構名惟一。

定義構架

 CREATE SCHEMA [<構架名>]  --同一個數據庫內架構名惟一
  AUTHORIZATION<用戶名>

刪除構架   

DROP SCHEMA [<構架名>]

9.3 分區表

分區表是將表中的數據按水平分割成不一樣子集,並將數據子集存儲在數據庫一個或多個文件組中。

物理上將大表分紅幾個小表,邏輯上仍是一個大表

合理使用分區能提升數據庫性能

1 建立分區的因素

是否建立分區取決於表當前數據量大小,以及未來數據量,還取決於表中數據的操做特色。

表包含(或將包含)以多種不一樣方式使用的大量數據

數據是分段的,好比以年份分隔。

2 建立分區表

三個步驟: (1)建立分區函數:告訴DBMS以什麼方式進行分區

 CREATE PARTITION FUNCTION

(2)建立分區方案:做用是將分區函數生成的分區映射到文件組中   CREATE PARTITION SCHEME (3)使用分區建立表

實例1:

在分區列coll(int)上建立左側分區函數:

CREATE PARTITION FUCNTION myPF1(int)
AS RANGE LEFT FOR VALUES(1,100,1000);
分區 1 2 3 4
col1<=1 col1>1 AND col1<=100 col1>100 AND col1<=1000 col1>1000

實例2:

先建立分區函數,再建立分區方案,並建立使用分區的表。

CREATE PARTITION FUCNTION myPF1(int) AS RANGE LEFT FOR VALUES(1,100,1000);
GO
CREATE PARTITION SCHEME myPS1 AS PARTITION myPF1 TO (test1fg, test2fg, test3fg, test4fg)
GO
CREATE TABLE PartitionTable(
Coll int,
Col2 char(10)
ON myPS1(coll))

9.4 索引

1 建立索引

--      惟一索引   彙集索引或非彙集索引
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]  
 INDEX   index_name
 ON table_name(column_name…)
 [WITH FILLFACTOR=x]

UNIQUE表示惟一索引,可選 CLUSTERED、NONCLUSTERED表示彙集索引仍是非彙集索引, 可選FILLFACTOR表示填充因子,指定一個0到100之間的值,該值指示索引頁填滿的空間所佔的百分比

2 刪除索引

DROP INDEX
'tablename.indexname|viewtable.indexname'[,...n]

9.5 索引視圖

1 概念

標準視圖也稱虛擬表,返回結果集與基本表一致。標準視圖的結果集不永久存放;

創建惟一彙集索引的視圖,稱爲索引視圖,也稱爲物化視圖。

創建索引後,視圖的結果集存放在數據庫中

對基本表的修改會反映到索引視圖存儲的數據中。

2 適合創建索引視圖的場合

不多更新基礎數據,索引視圖效果更好

若基礎數據以批處理形式按期更新,且主要是做爲只讀數據進行處理,

可考慮在更新前刪除全部索引視圖,而後重建,提升更新性能。

3 創建索引視圖的優勢

在處理多表鏈接方面,具備優點

索引視圖能夠提升這些查詢類型性能

處理大量行的鏈接和聚合

許多查詢常常執行的鏈接和聚合操做

索引視圖一般不會提升這些查詢類型性能

具備大量寫操做的OLTP系統

具備大量更新操做的數據庫

不涉及聚合或鏈接的查詢

GROUP BY具備高基數度的數據聚合。

4 定義索引視圖

建立聚簇索引前視圖必須符合的條件:

定義索引視圖時,視圖只能引用基本表,不能是其餘視圖。

引用的因此基本表和視圖同一數據庫,全部者相同。

必須用SCHEMABINDING選項建視圖。

視圖中表達式引用的全部函數必須肯定。

對視圖創建的第一個索引是惟一聚簇索引,以後在建立其餘。  

 CREATE VIEW;WITH SCHEMABINDING; CREATE 
  UNIQUE CLUSTERED INDEX …

10 高級數據庫查詢

10.1 通常數據庫查詢

1 select 語法

SELECT [DISTINCT] [TOP n] select_list 
[INTO new_table]    --將查詢的結果放入新表中
[FROM table_source]
[WHERE search_conditition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC|DESC]]
[COMPUTE expression]

2 使用 TOP 限制結果集

TOP n [percent][WITH TIES]
 Top n 前n行
 Top n [percent]前n%行
 [WITH TIES]:包括最後一行取值並列的結果

【例1】查詢單價最高的前三種商品的商品名、商品類別和單價,包括並列狀況。

SELECT TOP 3 WITH TIES GoodsName, GoodsClassName,SaleUnitPrice,FORM Table_Goods a JOIN Table_GoodsClass b
ON a.GoodsClassID=b.GoodsClassID ORDER BY SaleUnitPrice DESC

3 使用CASE函數

分狀況顯示不一樣類型的數據。CASE函數是一種多分支表達式。 兩種類型: 簡單CASE函數 搜索CASE函數

語法:

CASE
 WHEN 布爾表達式1 then 結果表達式1
 WHEN 布爾表達式2 then 結果表達式2
 ……
 WHEN 布爾表達式n then 結果表達式n
 [ELSE 結果表達式n+1]
END

例】 分析下列語句的做用(P110)

SELECT a.GoodsID,商品銷售類別=CASE 
WHEN COUNT(b.GoodsID)>10 THEN ‘熱門商品’
WHEN COUNT(b.GoodsID)BETWEEN 5 AND 10 THEN ‘通常商品’
WHEN COUNT(b.GoodsID)BETWEEN 1 AND 4 THEN ‘難銷商品’
ELSE ‘滯銷商品’
END
FROM Table_Goods a LEFT JOIN Table_SaleBillDetail b
ON a.GoodsID=b.GoodsID GROUP BY a.GoodsID

4 將查詢結果保存到新表中

SELECT 查詢列表序列  INTO <新表名>
 FROM 數據源……(其餘行過濾、分組語句)

注意:表名前加#爲局部臨時表,##爲全局臨時表,只有表名爲永久表。 例子:

SELECT * INTO #HD_Customer FROM Table_Customer  WHERE ……

10.2 查詢結果的並、交、差運算

1.並運算

並運算(UNION):將多個查詢結果合併爲一個結果集。

語法:

SELECT 語句1
	UNION [ALL]
     SELECT 語句2
	UNION [ALL]
     ……

使用UNION注意: 要進行合併的查詢,SELECT列數必須相同語義相同

每一個相對應列的數據類型隱式兼容,如char(20)varchar(40)

合併後結果採用第一個SELECT語句的列標題。

若需排序,則GROUP BY語句寫在最後一個SELECT以後,且排序的一句是第一個SELECT中的列名。

SELECT 城市 FROM 旅客表A
union
SELECT 城市 FROM 旅客表B

2.交運算

交運算:返回同時在兩個集合中出現的記錄。

語法:

SELECT 語句1
INTERSECT 
SELECT 語句2
INTERSECT ……
SELECT 語句n
SELECT 商品號 FROM  購買表 WHERE 顧客號 = 'A'
        INTERSECT
SELECT 商品號 FROM  購買表 WHERE 顧客號 = 'B'

3.差運算

差運算:返回第一個集合中有而第二個集合中沒有的的記錄。

語法:

SELECT 語句1
EXCEPT 
SELECT 語句2
EXCEPT……
SELECT 語句n

10.3 相關子查詢

子查詢是一條包含在另外一條SELECT語句裏的SELECT語句。

外層的SELECT語句叫外層查詢,內層的SELECT語句叫內層查詢(或子查詢)。

子查詢老是寫在圓括號中。

包括子查詢的SELECT語句主要採用如下格式中的一種

(1) WHERE expression [NOT] IN (subquery)
(2) WHERE expression comparison_operator [ANY | ALL] 
(3) WHERE [NOT] EXISTS (subquery)

1.使用子查詢進行基於集合的測試

實例:

SELECT Cname,Address FROM Table_Customer
WHERE Address   IN(SELECT Address FROM Table_Customer  WHERE Cname=‘王曉’)
AND Cname!= ‘王曉’

2.使用子查詢進行比較測試

實例: 查詢單價最高的商品的名稱和單價

SELECT Goodname,SaleUnitPrice 
FROM Table_Goods a 
WHERE SaleUnitPrice=(SELECT MAX(SaleUnitPrice) FROM Table_Goods)

3.使用子查詢進行存在性測試

實例: 查詢購買了單價高於2000元商品額顧客的會員卡號。

SELECT DISTINCT CardID FROM Table_SaleBill WHERE EXISTS(SELECT * FROM Table_SaleBillDetail WHERE SaleBillID=Table_SaleBill.SaleBillID AND UnitPrice>2000)

4 其餘形式的子查詢

1.替表明達式的子查詢

  在SELECT的選擇列表中嵌入了一個只返回一個標量值的子查詢。 實例:

SELECT Cname,Address(SELECT COUNT(*) FROM Table_Customer b ON a.CardID=b. CardID WHERE CustomerID=‘C001’)AS TotalTimes FROM Table_Custmer Where CustomerID=‘C001’

2.派生表

也稱爲內聯視圖,是將子查詢做爲一個表處理,產生的新表爲「派生表」。 實例:查詢至少買了C001和C002兩種商品的顧客號和顧客名。

SELECT CustomerID,CName 
FROM (SELECT * FROM Table_SaleBill a 	JOIN Table_SaleBillDetail b ON 	a.SaleBillID=b. SaleBillID WHERE 	GoodsID=‘G001’) AS T1

JOIN (SELECT * FROM Table_SaleBill a                          	JOIN Table_SaleBillDetail b ON 	a.SaleBillID=b. SaleBillID WHERE 	GoodsID=‘G002’) AS T2
ON T1.CardID=T2.CardID
JOIN Table_Customer c ON c.CardID=T1. CardID

5 其餘一些查詢功能

1.開窗函數

在SQL Server 中,一組行被稱爲一個窗口。

與聚合函數同樣,開窗函數也是對行集組進行聚合計算,可是它不像普通聚合函數那樣每組只返回

一個值,開窗函數能夠爲每組返回多個值,由於開窗函數所執行聚合計算的行集組是窗口。

與聚合函數不一樣的是,開窗函數在聚合函數後增長了一個OVER 關鍵字。

開窗函數的調用格式爲:

函數名(列)OVER(選項)

OVER 關鍵字:表示把函數當成開窗函數而不是聚合函數。

SQL 標準容許將全部聚合函數用作開窗函數,使用OVER 關鍵字來區分這兩種用法。

實例1: 將OVER字句與聚合函數結合使用   設有課程表Course(Cno,CName,Credit,Semester)查詢所有課程的Cno,CName,Semester, Credit信息及其該學期開設課程的總、最高、平均、最低Credit 。

SELECT Cno,CName,Semester ,Credit
SUM(Credit) OVER(PARTITION BY Semester) AS ‘Total’,
AVG(Credit) OVER(PARTITION BY Semester) AS ‘Avg’,
MIN(Credit) OVER(PARTITION BY Semester) AS ‘Min’,
MAX(Credit) OVER(PARTITION BY Semester) AS ‘Max’,
FROM Course

實例2:將OVER字句與排名函數一塊兒使用 排名函數RANK() RANK() OVER([<partition_by_clause>,…[n]]<order_by_clause>) 注意: 排名函數具備不肯定性 。 排名從1開始,不必定是連續整數。

SELECT OrderID, ProductID, OrderQty 
	RANK() OVER(PARTITION BY OrderID ORDER  BY  OrderQty DESC ) AS RANK
FROM OrderDetail
ORDER  BY OrderID

其餘排名函數 DENSE_RANK() 排名是連續整數 NTILE() 將有序分區中的行劃分到指定數目的組中,編號從1開始,函數返回此行所屬的組的編號。 ROW_NUMBER() 返回結果集中每一個分區內的序列號,每一個分區的第一行從1開始。

2.公用表表達式

公用表表達式(CommonTableExpression,CTE):將查詢結果集指定一個臨時名字,這些命名的結果集就是公用表表達式。 格式:

WITH <common_table_expression>[,…n]
<common_table_expression>::=
Expression_name[(column_name [,…n])]
AS
(SELECT語句)

例 : 定義一個統計每一個會員購買商品總次數的CTE,並利用CTE查詢會員卡號和購買商品的次數。 定義:

WITH BuyCount(CardID,Counts)AS(SELECT CardID,Count(*) FROM Table_SaleBill GROUP BY CardID )

使用:

AS(SELECT CardID,Counts FROM BuyCount ORDER BY Counts

11 數據庫後臺編程技術

11.1 存儲過程

存儲過程:即存儲在數據庫中供全部用戶程序調用的子程序

1 基本概念

使用T-SQL語言編寫代碼時,有兩種方式存儲和執行代碼:

(1)在客戶端存儲代碼,經過客戶端程序或SQL命令向DBMS發出操做請求,由DBMS將結果返回給用戶程序。

(2)以子程序的形式將程序模塊存儲在數據庫中,供有權限的用戶經過調用反覆執行。

存儲過程分爲三類:

系統存儲過程 用戶自定義存儲過程 擴展存儲過程

用戶自定義存儲過程

用戶自定義存儲過程是由用戶建立並能完成某一特定功能(如查詢用戶所需數據信息)的存儲過程。本節將詳細介紹用戶自定義的存儲過程。   如下三個存儲過程即爲用戶自定義存儲過程:

擴展存儲過程

擴展存儲過程是 SQL Server 能夠動態裝載並執行的動態連接庫 (DLL)。擴展存儲過程使您得以使用象 C 這樣的編程語言建立本身的外部例程。對用戶來講,擴展存儲過程與普通存儲過程同樣,執行方法也相同。

存儲過程的優勢:

① 極高的執行效率。

② 加強代碼的重用性和共享性。

③ 使用存儲過程能夠減小網絡流量。

④ 使用存儲過程保證安全性。

⑤ 在大型數據庫中,應用程序訪問數據庫的最主要方式就是存儲過程。

⑥ 存儲過程能夠在系統啓動時自動執行。

2 建立、執行和刪除存儲過程

存儲過程定義包含兩個主要組成部分: ①過程名稱及其參數的說明; ②過程的主體(其中包含執行過程操做的Transact-SQL語句)。建立存儲過程的語法格式以下:

建立存儲過程

CREATE PROCEDURE procedure_name [;number] /*定義過程名
[{@parameter data_type}                   /*定義參數的類型
[VARYING][ = default][OUTPUT]]            /*定義參數的屬性
[,…n1]
[WITH {RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]                         /*執行的操做
AS sql_statement[,…n2]

執行存儲過程

EXEC[UTE]
{  [@return_status = ]
   { procedure_name[;number] | @procedure_name_var}
   [ @parameter = ] { value | @variable[OUTPUT] | [DEFAULT]}
   [,…n]
   [WITH RECOMPILE]
}

【實例1】創建查詢某個指定地區購買了單價高於指訂價格商品的顧客購買信息,列出顧客姓名,購買商品名,單價,購買日期,會員積分,其中默認地區是「長沙嶽麓區」

CREATE PROCEDURE p_custbuy
@area varchar(20)=‘長沙嶽麓區’,@Price money
AS
SELECT……FROM……JOIN……
WHERE Address=@area AND SaleUnitPrice>@Price

執行:

EXEC  p_custbuy @Price=1000

【實例2】

創建統計某個指定地區和指定性別的顧客人數和平均年齡的存儲過程,

並將統計結果做爲輸出參數返回。

CREATE PROCEDURE p_custcout
@area varchar(20), @sex char @count int output @avg_age int output
AS
SELECT @count=COUNT(*),
@ave_age=AVG(YEAR(GETDATE())-  YEAR(BIRTHDATE))
FROM Table_Customer
WHERE Address=@area AND Sex=@sex
--執行:
DECLARE @x int,@y int
EXEC  p_custcount ‘長沙嶽麓區’,‘F’,@x output,@y output
SELECT @x AS 人數, @y AS 平均年齡

3 刪除存儲過程

DROP PROCEDURE

實例:‘

DROP PROCEDURE p_custbuy
DROP PROCEDURE p_custcout
DROP PROCEDURE p_update

11.2 用戶定義函數

相似於編程語言中的函數,其結構與存儲過程相似,但函數必須有一個RETURN子句,用於返回函數值。 兩類用戶定義函數:   標量函數和表值函數。前者返回單個數據值,表值函數返回一個表。

graph LR A((用戶定義函數))-->標量函數 A-->表值函數

一、建立和調用標量函數

--定義標量函數:
CREATE  FUCTION ……RETURNS return_data_type
AS 
BEGIN
【函數體】
  RETURN scalar_expression
END

【實例】 建立查詢指定商品類別的商品種類數的標量函數。

CREATE FUCTION dbo.f_GoodsCount(@class varchar(10))
   RETURN int
AS 
BEGIN
   DECLARE @x int
   SELECT @x=count(*)FROM Table_GoodsClass a JOIN Table_Goods b
      ON a.GoodsClassID=b. GoodsClassID
      WHERE GoodsClassName= @class 
   RETURN @x
END

調用標量函數: 注意:   調用時須要提供函數擁有者名和函數名;   能夠在任何出現表達式的SQL語句中調用類型一致的標量函數。

【實例】 查詢「服裝」類商品的名稱和種類數量

SELECT GoodsName AS 商品名,dbo.f_GoodsCount(‘服裝’)AS 種類數
FROM……WHERE……

二、建立和調用內嵌表值函數

建立內聯表值函數:

CREATE FUCTION ……RETURNS TABLE
AS 
RETURN [(]select_stmt[)]

參數說明:select_stmt 是定義內聯表值函數返回值的單個SELECT語句;

表值函數沒有返回變量,沒有函數體,只返回一個查詢結果。

調用內聯表值函數:   使用內聯表值函數與視圖相似,其做用至關於帶參數的視圖。

【實例】建立查詢指定類別的商品名和單價的內聯表值函數。

CREATE FUCTION f_GoodsInfo(@class char(10))
   RETURNS TABLE
AS 
   RETURN(
     SELECT GoodName,SaleUnitPrice FROM Table_GoodClass a JOIN Table_Goods b ON a.GoodsClassID= B.GoodsClassID
     WHERE GoodClassName=@class)
調用:SELECT * FROM dbo.f_GoodsInfo(‘服裝’)

三、建立和調用多語句表值函數

CREATE FUCTION ……RETURNS @return_variable TABLE<table_type_definition定義返回的表結構>
AS 
BEGIN
【函數體:SQL語句】
	RETURN 
END

調用建多語句表值函數:在SELECT的FROM子句中使用。

【實例】建立查詢指定類別的商品名、單價、生產日期和商品種類的多語句表值函數。

CREATE FUCTION f_GoodsDatails(@class varchar(20))
    RETURNS @f_GoodsDatails TABLE(
商品名 varchar(50),醃
單價 money,
生產日期 datetime,
種類數 int)
AS 
BEGIN
  INSERT INTO @f_GoodsDatails 
  SELECT GoodName,SaleUnitPrice,ProductionDate,dbo. f_GoodsDatails (@class) FROM      Table_GoodClass a JOIN 	Table_Goods b ON a.GoodsClassID= B.GoodsClassID 	WHERE GoodClassName=@class)
   RETURN
END

調用:SELECT * FROM dbo.f_GoodsDatail(‘服裝’)

四、刪除用戶自定義函數

DROP FUNCTION

實例

DROP FUNCTION f_GoodsCount
DROP FUNCTION f_GoodsInfo
DROP FUNCTION f_GoodsDatails

11.3 觸發器

觸發器:特殊存儲過程,在對錶中的數據進行UPDATE、INSERT、DELETE操做時自動觸發執行

經常使用於保證業務規則和數據完整性,加強數據完整性約束能力。

SQL Server 2008支持三種類型的觸發器: DML、DDL、登陸觸發器。

適用場合:   完成比CHECK(只能實現同一表列之間取值約束)約束更復雜的數據約束。

  保證數據庫性能而維護的非規範化數據。

  可實現複雜的商業規則。

  評估數據修改先後的表狀態,並採起對策。

1 建立觸發器

CREATE TRIGGER trigger_name ON 
{ table | view }
[WITH ENCRYPTION]
{ FOR | AFTER | INSTEAD OF } 
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] 
[ DELETE ] }
AS 
sql_statement[…n]

參數說明:

FOR或AFTER:後觸發型,操做、約束檢查完成後觸發。

INSTEAD OF :前觸發型,數據操做語句最多定義一個觸發器。

執行觸發器而非引起語句。若知足完整性約束則須要從新執行這些數據操做。

insert觸發器 會在inserted表中添加一條剛插入的記錄

update觸發器 會在更新數據後將更新前的數據保存在deleted表中,更新後的數據保存在inserted表中

注意 一個表可建多個觸發器,每一個觸發器可由三個操做觸發。

ALTER類型同一操做上創建多個觸發器,INSTEAD OF類型同一操做上創建一個觸發器。

全部創建和更改數據庫以及數據庫對象的語句、DROP語句不容許砸在觸發器中用。

觸發器不要返回任何結果。

【實例1】維護不一樣列的取值完整性的觸發器。保證「商品表」中單價列值與「商品價格變更表」中單價列值一致。

CREATE TRIGGER UnitPriceConsistent
ON Table_PriceHistory FOR INSERT,UPDATE
AS
   DECLARE @NewPrice money
   SELECT @NewPrice=SaleUnitPrice FROM inserted   UPDATE Table_Goods SET SaleUnitPrice=@NewPrice 
    WHERE GoodsID IN (SELECT GoodsID FROM inserted)

--【實例2】建立只容許刪除會員卡積分低於500分的顧客記錄的觸發器。

CREATE TRIGGER DeleteCust
ON Table_Customer INSTEAD OF DELETE 
AS
   IF NOT EXISTS(SELECT * FROM deleted WHERE CardID IN (SELECT CardID FROM Table_Card WHERE Score>=500))
   DELETE FROM Table_Customer WHERE CardID IN (SELECT CardID FROM deleted)

2 刪除觸發器

DROP TRIGGER

實例

DROP TRIGGER OperateCon
DROP TRIGGER UnitPriceConsistent
DROP TRIGGER DeleteCust

11.4 遊標

遊標:實現對SELECT結果集的逐行處理。

在SQL Server 2008中,用於判斷遊標數據提取狀態的全局變量是 @@FETCH_STATUS

一、遊標的組成

遊標結果集(SELECT返回結果集)與遊標當前行指針(指向結果集中某一行) 特色:

定位特定行;

從當前位置檢索一行或多行;

支持當前行數據修改;

對修改結果提供不一樣級別的可見性支持

二、使用遊標

(1)聲明遊標 ISO標準語法:DECLARE cursor_name[1] CURSOR FOR select_statement[2]

參數說明:

[1]INSENSTITIVE:建立臨時副本,對臨時表操做,不然對基本表;SCROLL:範圍,不然只支持NEXT;

[2]READ ONLY:禁止更新 UPDATE 更新列指定列或全部。

(2)打開遊標   OPEN cursor_name

(3)提取數據   FETCH [1]FROM cursor_name [INTO @ variable_name[,…n]] (4)關閉遊標   CLOSE cursor_name    能夠再次打開。 (5)釋放遊標   DEALLOCATE cursor_name   釋放分配給遊標的全部資源。

三、遊標示例

  對Table_Customer表,定義一個查詢「長沙嶽麓區」姓「王」的顧客姓名和郵箱的遊標,並輸出遊標結果。

DECLARE @cn VARCHAR(10 @cn VARCHAR(50)
DECLARE Cname_cursor CURSOR FOR
  SELECT Cname,Email FROM Table_Customer
  WHERE Cname LIKE ‘王%’AND Address LIKE ‘長沙嶽麓區’
OPEN Cname_cursor

FETCH NEXT FROM Cname_cursor INTO @cn , @Email
WHILE @@ FETCH_STATUS=0
BEGIN
  PRINT’顧客姓名’+@cn +‘,郵箱:’+ @Email
  FETCH NEXT FROM Cname_cursor INTO @cn , @Email
END
CLOSE Cname_cursor
DEALLOCATE Cname_cursor

例題

在SQL Server 2008中,對於更新操做的觸發器,系統將產生2張邏輯工做表,

其中存放更新前數據的邏輯工做表是 delete

更新:1. 刪除源數據,2. 插入新數據

12 安全管理

數據庫安全性不一樣於數據的完整性。 安全性:保護數據以防止不合法用戶故意形成破壞。(確保用戶被容許作其想作的事情。) 完整性:保護數據以防止合法用戶無心中形成的破壞。(確保用戶作的事情是正確的。)

1.數據庫安全控制的目標   保護數據免受意外或故意的丟失、破壞或濫用。 2.數據庫安全的威脅   安全計劃須要考慮:可用性損失,機密性數據損失,私密性數據損失,偷竊和欺詐,意外的損害。

3.安全控制模型 包括四階段: 身份驗證(用戶) 操做權限控制(數據庫應用程序與數據庫管理系統) 文件操做控制(操做系統) 加密存儲與冗餘(數據庫)

4.受權和認證 認證是一種鑑定用戶身份的機制。受權是將合法訪問數據庫或數據庫對象的權限授予用戶的過程。包括認證用戶對對象的訪問請求。

DBMS一般採用自主存取控制和強制存儲控制兩種方案來解決安全控制問題。

2 存取控制

1.自主存取控制 又稱自主安全模式, 經過SQL的GRANT,REVOKE,DENY語句來實現。 權限種類:維護權限與操做權限(語句權限與對象權限) 用戶分類:系統管理員(sa)、數據庫對象擁有者、普通用戶。

2.強制存取控制 爲避免自主存取模式下數據的「無心泄露」,採起強制存取控制。 DBMS將所有實體分爲主體和客體兩大類。 主體:系統活動實體,實際用戶和進程。 客體:被動實體,受主體操縱,包括文件、基本表、視圖。

對於主體和客體,DBMS爲它們的每一個實例指派一個敏感度標記(Label)。 敏感度標記:DBMS指派,主體爲許可證級別,客體爲密級。分絕密、祕密、可信和公開等若干級別。

強制存取控制遵循以下規則: 僅當主體許可證級別大於或等於客體密級,主體能夠讀取相應客體 僅當主體許可證級別等於客體密級,該主體才能寫相應客體。

3 審計跟蹤

審計跟蹤實質上是一種特殊的文件或數據庫。系統自動記錄用戶對常規數據的全部操做。 審計跟蹤對數據安全有輔助做用。

4 統計數據庫的安全性

統計數據庫提供基於各類不一樣標準的統計信息或彙總數據。 統計數據庫安全系統用於控制對統計數據庫的訪問。 統計數據庫容許用戶查詢聚合類型的信息,如總和、平均等,但不容許查詢我的信息。

5 SQL Server 的安全控制 重點

1.身份驗證模式

Windows身份驗證模式   SQL Server經過Windows操做系統得到用戶信息,驗證登陸名和密碼,通常推薦。 混合身份驗證模式 Windows受權用戶和SQL受權用戶能夠登陸。

2.登陸賬戶

兩類: SQL Server 自身負責身份驗證的帳戶,內置系統帳戶與用戶本身建立。 登陸到 SQL Server 的 Windows 網絡帳戶,能夠是組帳戶或用戶帳戶。

創建登陸帳戶

CREATE  LOGIN login_name

修改登陸賬戶屬性

ALTER  LOGIN login_name

刪除登陸賬戶

DROP  LOGIN login_name

實例:

CREATE LOGIN SQL_User1 WITH PASSWORD=‘a1b2c3XY’
ALTER LOGIN SQL_User1 WITH PASSWORD=‘a4b5c6XY’
ALTER LOGIN SQL_User3 WITH NAME=NewUser

3.數據庫用戶

用戶有了登陸賬戶,只能鏈接到SQL服務器,並不具備訪問數據庫的權限。

映射:讓登陸帳戶成爲數據庫用戶的操做成爲映射。

一個登陸帳戶能夠映射爲多個數據庫用戶。

默認狀況下,新建數據庫只有一個用戶:dbo,數據庫用戶的擁有者。

創建數據庫用戶

CREATE USER user_name[|FOR|FROM]
LOGIN login_name

Guest用戶,特殊數據庫用戶,匿名訪問,沒有映射到登陸帳戶的時候使用

GRANT CONNECT TO guest
REVOKE CONNECT TO guest

刪除數據庫用戶

DROP USER user_name

4.權限管理

登陸帳戶成爲合法用戶後沒有任何操做權限,就須要爲用戶授予數據庫數據及其對象的操做權限。

(1)對象級別的權限(6種)

SELECT、INSERT、UPDATE、DELETE、REFERENCES、EXECUTE

受權語句: GRANT 對象權限 ON 對象 TO (主體:數據庫用戶名或角色)[WITH GRANT OPTION] 實例: GRANT SELECT ON Addres TO abc GRANT EXECUTE ON OBJECT::HR.EI TO abc GRANT REFERENCES(EmployeeID)ON vEmp TO abc WITH GRANT OPTION

拒絕權限 DENY 對象權限 ON 對象 TO (主體:數據庫用戶名或角色) [CASCADE][AS主體] 實例: DENY SELECT ON Addres TO abc DENY EXECUTE ON OBJECT::HR.EI TO abc DENY REFERENCES(EmployeeID)ON vEmp TO abc CASCADE

設在SQL Server 2008某數據庫中,

要設置不容許用戶U1得到對錶T數據的刪除權限,

請補全實現該受權操做的SQL語句: DENY DELETE ON T TO U1;

收權語句 REVOKE 對象權限 ON 對象 TO (主體:數據庫用戶名或角色) [CASCADE][AS角色] 實例: REVOKE SELECT ON Addres TO abc REVOKE EXECUTE ON OBJECT::HR.EI TO abc REVOKE REFERENCES(EmployeeID)ON vEmp TO abc CASCADE

(2)語句級別的權限 CREATE DATABASE|PROCEDURE|TABLE|VIEW|FUNCTION BACKUP DATABASE|LOG 實例: GRANT CREATE DATABASE TO user0 GRANT CREATE DATABASE , CREATE VIEW TO user1,user2 DENY CREATE VIEW TO user1 REVOKE CREATE DATABASE FROM user0

5.角色

定義:一組具備相同權限的用戶就是角色。 SQL Server 2008中,角色分爲預約義的系統角色和用戶角色兩種。 系統角色又分爲固定服務器角色(服務器級角色)和固定數據庫角色(數據庫級角色)。 用戶角色均是數據庫級角色。

固定服務器角色

Bulkadmin:執行BULK INSERT語句權限。

Dbcreator:建立、修改、刪除還原數據庫權限。

Diskadmin:具備管理磁盤文件的權限

Processadmin管理運行進程權限。

Securtyadmin:專門管理登陸帳戶、讀取錯誤日誌執行CREATE DATABASE 權限的帳戶,便捷。

Serveradmin:服務器級別的配置選項和關閉服務器權限。

Setupadmin:添加刪除連接服務器。

Sysadmin:系統管理員 ,Windows超級用戶自動映射爲系統管理員。

Public:系統預約義服務器角色,每一個登陸名都是這個角色的成員。

沒有授予或拒絕特定權限,則將具備這個角色權限。

例: (1)爲固定服務器角色添加成員 Sp_addsrvrolemember EXEC Sp_addsrvrolemember ‘user1’,‘sysadmin’ (2)刪除固定服務器角成員 Sp_dropsrvrolemember EXEC Sp_dropsrvrolemember ‘user1’,‘sysadmin’

固定數據庫角色   定義在數據庫級別上,存在於每一個數據庫中。用戶加入固定數據庫角色就具備數據庫角色權限。 Db_accessadmin:添加或刪除數據庫權限

Db_backupoperator:備份數據庫、日誌權限

Db_datareader:查詢數據庫數據權限

Db_datawriter:具備插入、刪除、更改權限

Db_ddladmin:執行數據定義的權限

Db_denydatareader:不容許具備查詢數據庫中全部用戶數據的權限。

Db_denydatawriter:不容許具備插入、刪除、更改數據庫中全部用戶數據權限。

Db_owner:具備所有操做權限,包括配置、維護、刪除數據庫。

Db_securityadmin:具備管理數據庫角色、角色成員以及數據庫中語句和對象的權限。

例: (1)爲固定數據庫角色添加成員 Sp_addsrvrolemember EXEC Sp_addrolemember ‘Db_datareader’,‘SQL_User2’ (2)刪除固定服務器角成員 Sp_droprolemember EXEC Sp_droprolemember ‘Db_datareader’,‘SQL_User2’

用戶定義的角色 用戶定義的角色屬於數據庫一級。 用來簡化使用數據庫時的權限管理。 用戶定義的角色成員能夠是用戶定義角色或數據庫用戶。

注意:

角色中的成員擁有的權限=成員自身權限+所在角色權限。

但若某個權限在角色中被拒絕,則成員再也不擁有。

建立用戶定義的角色 CREATE ROLE 實例:CREATE ROLE MathDept [AUTHORIZATION Software] 注意:爲用戶定義角色受權、添加、刪除用戶定義的角色中的成員與固定數據庫角色一致。 刪除用戶定義角色 DROP ROLE 實例:DROP ROLE MathDept

6 Oracle的安全管理

Oracle的安全機制分爲數據庫級的安全控制、表級、列級、行級的安全控制。 數據庫級的安全性經過用戶身份認證和授予用戶相應系統權限來保證; 表級、列級、行級的安全性經過授予或回收對象權限保證。支持集中式、分佈式、跨平臺應用。

Oracle系統一般設置兩級安全管理員: 全局級:負責管理、協調,維護全局數據一致性和安全性; 場地級:負責本結點數據庫安全性,用戶管理、系統特權與角色管理。

1.用戶與資源管理

按權限大小劃分爲DBA用戶和普通用戶。 DBA用戶由DBMS自動建立,sys與system用戶,擁有所有系統特權。 普通用戶:由DBA用戶或有相應特權的用戶建立,並授予系統特權。

創建用戶 CREATE USER use1 IDENTIFIED BY 123456 DEFAULT TABLESPACE student(存儲在student表空間) QUOTA 5M ON student(限制使用空間爲5M)

管理用戶和資源 DBA特權用戶能夠改變一個用戶資源使用限額、密碼、登陸次數等 ALTER USER use1 QUOTA 60M ON student(限制使用空間爲60M) ALTER USER use1 IDENTIFIED BY 12345678

刪除用戶 DROP USER DROP USER user1 CASCADE(刪除用戶及其所擁有的所有對象)

2.權限管理

(1)系統特權 三種默認特權: Connect: 不能創建任何對象,能夠查詢數據字典及訪問數據庫對象。 Recource :可創建數據庫對象(表、視圖、索引……) DBA :擁有預約義的所有權限 。

(2)對象特權 用於維護表級、行級、列級數據的安全性。 實例: GRANT all ON dep TO user1 GRANT select(tno,tname,sal) ON teacher TO user2

後序

1 相關概念問題

列 == 屬性 == 屬性名

一行數據 == 一條記錄 == 一個元組

SQL Server 中 頁是最小的數據單位,頁表示一行存儲最多 8K 數據。

英文單詞

union 並

intersect 交

except 差

partition 分區

clustered 彙集索引

distinct 區分

procedure 存儲過程

相關文章
相關標籤/搜索