第一章 緒論
- 數(shù)據(jù)管理技術(shù)的發(fā)展階段:人工管理階段、文件系統(tǒng)階段、數(shù)據(jù)庫(kù)階段,各階段主要特點(diǎn)
- 名詞基本概念
- 數(shù)據(jù):描述事務(wù)的符號(hào)記錄稱(chēng)為數(shù)據(jù)
- DB:DataBase數(shù)據(jù)庫(kù),是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、可共享的大量數(shù)據(jù)集合。有
永久存儲(chǔ)
有組織
可共享
三個(gè)基本特點(diǎn) - DBMS:數(shù)據(jù)庫(kù)管理系統(tǒng)
- DBS:數(shù)據(jù)庫(kù)系統(tǒng),由DB+DBMS+應(yīng)用程序+數(shù)據(jù)庫(kù)管理員(DBA)組成的存儲(chǔ)、管理、處理和維護(hù)的數(shù)據(jù)的系統(tǒng)。
-
數(shù)據(jù)管理技術(shù)的發(fā)展階段:人工管理階段、文件系統(tǒng)階段、數(shù)據(jù)庫(kù)階段,其中文件階段到數(shù)據(jù)庫(kù)階段是質(zhì)的飛躍。
數(shù)據(jù)庫(kù)三個(gè)階段的比較
數(shù)據(jù)模型:對(duì)現(xiàn)實(shí)數(shù)據(jù)特征的抽象(從現(xiàn)實(shí)世界->信息世界->機(jī)器世界)
- 數(shù)據(jù)模型的基本概念
聯(lián)系的種類(lèi)下面的名詞只屬于關(guān)系模型
名次 | 英文名 | 解釋 |
---|---|---|
實(shí)體 | enity | 客觀存在并可互相區(qū)別的事物 |
屬性 | attribute | 實(shí)體所具有某一特性 |
碼 | key | 唯一標(biāo)識(shí)實(shí)體的屬性集稱(chēng)為碼 |
實(shí)體型 | entitty | 用實(shí)體名及其屬性名集合來(lái)抽象和刻畫(huà)同類(lèi)實(shí)體 |
實(shí)體集 | enity set | 同一類(lèi)型實(shí)體的集合 |
聯(lián)系 | relationship | 實(shí)體內(nèi)部的聯(lián)系通常指組成實(shí)體的各屬性之間的聯(lián)系,實(shí)體之間的聯(lián)系通常指不同實(shí)體集之間的聯(lián)系 |
聯(lián)系的種類(lèi) | 一對(duì)一、一對(duì)多、多對(duì)多 | |
關(guān)系 | relation | 一對(duì)關(guān)系對(duì)應(yīng)一張表 |
元組 | tuple | 表中一行即為一個(gè)元組 |
屬性 | attitude | 表中一列即為一個(gè)屬性 |
碼 | key | 也稱(chēng)碼鍵,表中的某一個(gè)屬性可以唯一確定一個(gè)元組 |
域 | domain | 是一組具有相同數(shù)據(jù)類(lèi)型的值的集合 |
分量 | 元組中的一個(gè)屬性值 | |
關(guān)系模式 | 對(duì)關(guān)系的描述,一般表示為:關(guān)系名(屬性1, 屬性2,...) |
- 數(shù)據(jù)模型分類(lèi)。根據(jù)應(yīng)用不同,第一類(lèi)是概念模型,第二類(lèi)是邏輯模型和物理模型
- 概念模型:也稱(chēng)信息模型,是按用戶(hù)的觀點(diǎn)來(lái)對(duì)數(shù)據(jù)和信息建模,主要用于數(shù)據(jù)庫(kù)設(shè)計(jì)。其中一種表示方法->
實(shí)體-聯(lián)系方法
又稱(chēng)E-R方法,使用E-R圖
實(shí)現(xiàn) - 邏輯模型:主要包括
層次模型
、網(wǎng)狀模型
、關(guān)系模型
,另外還有面向?qū)ο髷?shù)據(jù)模型、對(duì)象關(guān)系模型、半結(jié)構(gòu)化模型等,是按計(jì)算機(jī)系統(tǒng)的觀點(diǎn)對(duì)數(shù)據(jù)建模,主要用于數(shù)據(jù)庫(kù)管理系統(tǒng)的實(shí)現(xiàn)。 - 物理模型:是對(duì)數(shù)據(jù)最底層的抽象,它描述數(shù)據(jù)在系統(tǒng)內(nèi)部的表示方式和存取方法,或在磁盤(pán)或磁帶上的存儲(chǔ)方式和存取方法,是面向計(jì)算機(jī)的。
模型 | 定義 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|
層次模型 | ①有且只有一個(gè)節(jié)點(diǎn)沒(méi)有雙親結(jié)點(diǎn) ②根以外的其他節(jié)點(diǎn)有且只有一個(gè)雙親節(jié)點(diǎn) |
①數(shù)據(jù)結(jié)構(gòu)較清晰 ②查詢(xún)效率高 ③提供了良好的完整性支持 |
①現(xiàn)實(shí)世界大多不是層次關(guān)系 ②查詢(xún)子女節(jié)點(diǎn)必須通過(guò)雙親節(jié)點(diǎn) ③結(jié)構(gòu)過(guò)于嚴(yán)密,層次命令趨于程序化 |
網(wǎng)狀模型 | ①允許一個(gè)以上的節(jié)點(diǎn)無(wú)雙親節(jié)點(diǎn) ②一個(gè)節(jié)點(diǎn)可以有多于一個(gè)的雙親節(jié)點(diǎn) |
①能夠更直接描述世界 ②具有良好的性能,存取效率高 |
①結(jié)構(gòu)較復(fù)雜 ②需要嵌入高級(jí)語(yǔ)言,用戶(hù)不易掌握,不宜使用 ③記錄之間的聯(lián)系是通過(guò)存取路徑實(shí)現(xiàn),因此用戶(hù)必須了解系統(tǒng)結(jié)構(gòu)的細(xì)節(jié) |
關(guān)系模型 | 要求關(guān)系必須是規(guī)范化的,即關(guān)系的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng) | ①建立在嚴(yán)格的數(shù)學(xué)概念上 ②概念單一,數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單、清晰 ③存取路徑對(duì)用戶(hù)透明,數(shù)據(jù)獨(dú)立性,安全保密性更好 |
查詢(xún)效率低,需優(yōu)化 |
- 數(shù)據(jù)模型的組成要素:數(shù)據(jù)結(jié)構(gòu)+數(shù)據(jù)操作+數(shù)據(jù)完整性約束條件
- 數(shù)據(jù)結(jié)構(gòu):描述數(shù)據(jù)庫(kù)的組成對(duì)象以及對(duì)象之間的聯(lián)系
- 數(shù)據(jù)操作:是指對(duì)數(shù)據(jù)庫(kù)中各種對(duì)象的實(shí)例(值)允許執(zhí)行的操作的集合,包括操作及有關(guān)的操作規(guī)則。
- 完整性約束條件:是一組完整性規(guī)則
數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)(需仔細(xì)閱讀P28~31)
- 三級(jí)結(jié)構(gòu)模式,數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)分為三級(jí):內(nèi)部級(jí)、概念級(jí)和外部級(jí)
- 模式(概念級(jí)):是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶(hù)的公共數(shù)據(jù)視圖
- 外模式(外部級(jí)):能夠看見(jiàn)和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫(kù)用戶(hù)的數(shù)據(jù)視圖
- 內(nèi)模式(內(nèi)部級(jí)):也稱(chēng)存儲(chǔ)模式,一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式,最接近于物理存儲(chǔ),涉及到實(shí)際數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu),是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的組織方式
- 兩層映象(其保證了數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)能夠具有較高的邏輯獨(dú)立性和物理獨(dú)立性)
- 模式/內(nèi)模式映象:用于定義概念模式和內(nèi)模式之間的對(duì)應(yīng)性。一般在內(nèi)模式中描述
- 外模式/模式映象:用于定義外模式和概念模式間的對(duì)應(yīng)性。一般在外模式中描述
- 兩級(jí)數(shù)據(jù)獨(dú)立性
- 物理數(shù)據(jù)獨(dú)立性:修改內(nèi)模式時(shí)盡量不影響概念模式及外模式,則達(dá)到物理數(shù)據(jù)獨(dú)立性
- 邏輯數(shù)據(jù)獨(dú)立性:修改概念模式時(shí)盡量不影響外模式和應(yīng)用程序
數(shù)據(jù)庫(kù)系統(tǒng)的組成(數(shù)據(jù)庫(kù)、硬件、軟件、人員)及其要求
- 硬件平臺(tái)及數(shù)據(jù)庫(kù)
- 要有足夠大的內(nèi)存
- 有足夠大的磁盤(pán)或磁盤(pán)陣列等設(shè)備存放數(shù)據(jù)庫(kù),作數(shù)據(jù)備份
- 系統(tǒng)有較高的通道能力,以提高數(shù)據(jù)傳送效率
- 軟件
- DBMS
- 支持DBMS的OS
- 相應(yīng)的高級(jí)語(yǔ)言操作數(shù)據(jù)庫(kù)
- 以DBMS為核心的開(kāi)發(fā)工具
- 人員
- DMA:①?zèng)Q定數(shù)據(jù)庫(kù)的信息內(nèi)容和結(jié)構(gòu)②決定數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)和存取策略③定義數(shù)據(jù)的安全性要求和完整約束條件④監(jiān)控?cái)?shù)據(jù)庫(kù)的運(yùn)行和使用⑤數(shù)據(jù)庫(kù)的改進(jìn)和重構(gòu)
- 系統(tǒng)分析員和數(shù)據(jù)庫(kù)設(shè)計(jì)人員
- 應(yīng)用程序人員
- 用戶(hù):分為偶然用戶(hù)、簡(jiǎn)單用戶(hù)、復(fù)雜用戶(hù)
第二章
關(guān)系模型
可形式化表示為R(U, D, DOM, F),R為關(guān)系名,U為屬性名集合,D為U中屬性所來(lái)自的域,DOM為屬性向域的映像集合,F(xiàn)為屬性間數(shù)據(jù)的依賴(lài)關(guān)系集合
關(guān)系模型只包含單一的數(shù)據(jù)結(jié)構(gòu)——關(guān)系(是笛卡爾積的有限子集),用戶(hù)看來(lái)其中的數(shù)據(jù)邏輯結(jié)構(gòu)是一張扁平的二維表
- 碼:由一個(gè)或幾個(gè)屬性組成
- 候選碼:可唯一標(biāo)識(shí)每一組的屬性組
- 主碼:用戶(hù)選作元組標(biāo)識(shí)的一個(gè)候選鍵位主鍵
- 外碼:某個(gè)關(guān)系的主碼相應(yīng)的屬性在另一關(guān)系中出現(xiàn),此時(shí)主鍵就是另一關(guān)系的外碼
關(guān)系有三種類(lèi)型:基本關(guān)系(或基表。是實(shí)際存在的表,實(shí)際存儲(chǔ)數(shù)據(jù)的邏輯表示),查詢(xún)表(是查詢(xún)結(jié)果對(duì)應(yīng)的表),視圖表(是由基本表或其他視圖導(dǎo)出的表,是虛表)
基本關(guān)系的六條性質(zhì)
- 列是同質(zhì)的
- 不同列可出自同一域
- 列的順序無(wú)所謂
- 行的順序無(wú)所謂
- 任意兩個(gè)元組的候選碼不能取相同值
- 分量必須是原子值,即每個(gè)分量都是必不可分
關(guān)系的完整性
關(guān)系模型有三類(lèi):實(shí)體完整性,參照完整性,用戶(hù)定義的完整性。前兩個(gè)必須滿(mǎn)足,稱(chēng)為關(guān)系的兩個(gè)不變性
- 實(shí)體完整性規(guī)則:要求關(guān)系中組成主碼的屬性上不能有空值
- 參照完整性規(guī)則:要求不引用不存在的實(shí)體,但可以是空值
- 用戶(hù)定義完整性規(guī)則:由具體應(yīng)用環(huán)境決定,系統(tǒng)提供定義和檢驗(yàn)這類(lèi)完整性的機(jī)制
關(guān)系代數(shù) (例子P51~P57)
是一種抽象的查詢(xún)語(yǔ)言,是對(duì)關(guān)系的運(yùn)算來(lái)表達(dá)查詢(xún)
符號(hào) | 含義 |
---|---|
∪ | 并 |
∩ | 交 |
- | 差 |
× | 笛卡爾積 |
σ | 選擇 |
Π | 投影 |
? | 連接 |
÷ | 除 |
注:前四個(gè)為集合運(yùn)算
,后四個(gè)為關(guān)系運(yùn)算
關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL
- SQL特點(diǎn)
- 綜合統(tǒng)一
- 高度非過(guò)程化
- 面向集合的操作方式
- 以同一種語(yǔ)法結(jié)構(gòu)提供多種使用方式
- 語(yǔ)言簡(jiǎn)潔,易學(xué)易用
- 數(shù)據(jù)定義:包括模式定義、表定義、視圖、索引
- 創(chuàng)建模式
CREATE SCHEMA <模式名> AUTHORIZATION <用戶(hù)名> [<表定義>|<視圖定義>|<授權(quán)定義>];
- 刪除模式
DROP SCHEMA <模式名> <CASCADE | RESTRICT>
- 創(chuàng)建表
CREATE TABLE <表名> (<列名><數(shù)據(jù)類(lèi)型> [列級(jí)完整性約束條件]
[, <列名><數(shù)據(jù)類(lèi)型> [列級(jí)完整性約束條件]]
...
[, <表級(jí)完整性約束條件>]
);
- 刪除表
DROP TABLE <表名> <CASCADE | RESTRICT>
- 修改表
ALTER TABLE <表名>
[ADD [COLUMN] <新列名> <數(shù)據(jù)類(lèi)型> [完整性約束]]
[ADD <表級(jí)完整性約束>]
[DROP [COLUMN] <列名> [CASCADE | RESTRICT] ]
[DROP CONSTRAINT <完整性約束名> [RESTRICT | CASCADE] ]
[ALTER COLUMN <列名> <數(shù)據(jù)類(lèi)型>]
;
- 創(chuàng)建索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>( <列名> [<次序>] [, <列名> [<次序>]] ... )
;
- 修改索引
ALTER INDEX <舊索引名> RENAME TO <新索引名>;
- 刪除索引
DROP INDEX <索引名>;
數(shù)據(jù)查詢(xún)
其一般格式:
SELECT [ALL | DISTINCT] <目標(biāo)列表達(dá)式> [, <目標(biāo)列表達(dá)式>] ...
FROM <表名|視圖名> [, <表名|視圖名> ...] | (<SELECT語(yǔ)句>) [AS] <別名>
[WHERE <條件表達(dá)式>]
[GROUP BY <列名1> [HAVING <條件表達(dá)式>]]
[ORDER BY <列名2> [ASC|DESC]]
整個(gè)SELECT語(yǔ)句
的含義是: 根據(jù)WHERE子句
的條件表達(dá)式從FROM子句
指定的基本表, 視圖或派生表中找出滿(mǎn)足條件的元組,再按SELECT子句
中的目標(biāo)列表達(dá)式選出元組中的屬性值形成結(jié)果表
如果有GROUP BY 子句
, 則結(jié)果將按照列1的值(滿(mǎn)足 HAVING中的提條件的組 )進(jìn)行分組
如果有ORDER BY子句
,則結(jié)果表還需要按<列2>的值升序或降序排序
查詢(xún)條件 | 謂詞 |
---|---|
比較 |
= > < >= <= != <> !> !< ; NOT+ 上述比較運(yùn)算符 |
確定范圍 |
BETWEEN AND , NOT BETWEEN AND
|
確定集合 |
IN , NOT IN
|
字符匹配 |
LIKE ,NOT LIKE
|
空值 |
IS NULL , IS NOT NULL
|
多重條件(邏輯運(yùn)算) |
AND ,OR ,NOT
|
- 聚集函數(shù)
函數(shù)名 | 含義 |
---|---|
COUNT(*) |
統(tǒng)計(jì)元組個(gè)數(shù) |
COUNT( [DISTINCT|ALL] <列名>) |
統(tǒng)計(jì)一列中值的個(gè)數(shù) |
SUM( [DISTINCT|ALL] <列名>) |
計(jì)算一列值的總和(類(lèi)型必須為數(shù)值型) |
AVG( [DISTINCT|ALL] <列名>) |
計(jì)算一列值的平均值(類(lèi)型必須為數(shù)值型) |
MAX( [DISTINCT|ALL] <列名>) |
求出一列值的最大值 |
MIN( [DISTINCT|ALL] <列名>) |
求出一列值的最小值 |
- GROUP BY 子句
將查詢(xún)結(jié)果按某一列或多列的值分組,值相等的為一組(分組后聚集函數(shù)將作用于每一個(gè)組,即每一個(gè)組都有一個(gè)函數(shù)值)
數(shù)據(jù)更新
- 插入數(shù)據(jù)
- 插入元組
INSERT INTO <表名> [(<屬性列1> [,<屬性列2>] ...)]
VALUES(<常量1> [,<常量2>] ...);
- 插入子查詢(xún)結(jié)果
INSERT INTO <表名> [(<屬性列1> [, <屬性列2>] ...)]
子查詢(xún);
- 修改數(shù)據(jù)
UPDATE <表名> SET <列名>=<表達(dá)式> [,<列名>=<表達(dá)式>] ...
[WHERE <條件>];
- 刪除數(shù)據(jù)
DELETE
FROM <表名>
[WHERE <條件>]
;
視圖
- 創(chuàng)建視圖
CREATE VIEW <視圖名> [(<列名> [,<列名>] ...)]
AS <子查詢(xún)>
[WITH CHECK OPTION]
;
- 刪除視圖
DROP VIEW <視圖名> [CASCADE];
- 更新視圖: 對(duì)視圖的查詢(xún)是和基本表相同的,但是更新操作則受到下列三條規(guī)則的限制
①如果視圖是從多個(gè)基本表使用聯(lián)接操作導(dǎo)出的,則不允許更新。
②如果導(dǎo)出的視圖使用了分組和聚合操作,也不允許更新。
③如果視圖是從單個(gè)基本表使用選擇和投影操作導(dǎo)出的,并且包括了基本表的主碼或某個(gè)候選碼,則可以執(zhí)行操作。(這就相當(dāng)于在基本表上操作)。
第四章 數(shù)據(jù)安全性
數(shù)據(jù)安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法使用所造成的數(shù)據(jù)泄露, 更改或破壞
- 數(shù)據(jù)的不安全因素
①非授權(quán)用戶(hù)對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞
②數(shù)據(jù)庫(kù)中重要或敏感的數(shù)據(jù)被泄露
③安全壞境的脆弱性 - 實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)安全性的技術(shù)和方法有多種,最重要的是存取控制技術(shù)和審計(jì)技術(shù)。
目前許多大型DBMS 達(dá)到了C2級(jí),其安全版本達(dá)到了B1
C2級(jí)的DBMS必須具有自主存取控制功能和初步的審計(jì)功能
B1級(jí)的DBMS必須具有強(qiáng)制存取控制和增強(qiáng)的審計(jì)功能
自主存取控制功能一般是通過(guò)SQL 的GRANT語(yǔ)句和REVOKE語(yǔ)句來(lái)實(shí)現(xiàn)的
- 常用存取控制方法
- 自主存取控制(Discretionary Access Control ,簡(jiǎn)稱(chēng)DAC)
同一用戶(hù)對(duì)于不同的數(shù)據(jù)對(duì)象有不同的存取權(quán)限
不同的用戶(hù)對(duì)同一對(duì)象也有不同的權(quán)限
用戶(hù)還可將其擁有的存取權(quán)限轉(zhuǎn)授給其他用戶(hù)
- 強(qiáng)制存取控制(Mandatory Access Control,簡(jiǎn)稱(chēng) MAC)
每一個(gè)數(shù)據(jù)對(duì)象被標(biāo)以一定的密級(jí)
每一個(gè)用戶(hù)也被授予某一個(gè)級(jí)別的許可證
對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶(hù)才可以存取
數(shù)據(jù)完整性
為了維護(hù)數(shù)據(jù)庫(kù)的完整性,DBMS必須能夠?qū)崿F(xiàn)如下功能:
①提供定義完整性約束條件的機(jī)制
②提供完整性檢查的方法
③進(jìn)行違約處理實(shí)體完整性檢查和違約處理: 在 列級(jí), 表級(jí)定義主碼后, 每更新一次,DBMS將自動(dòng)檢查(有全表掃描, B+樹(shù)索引)
- 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改
- 檢查主碼的各個(gè)屬性是否為空,只有一個(gè)為空就拒絕插入或修改
參照完整性:用
FOREIGN KEY
短語(yǔ)定義哪些列為外碼,用REFERENCE
指明這些外碼參照哪些表的主碼. 參照完整性檢查和違約處理
|被參照表(如Student表)|參照表(如SC表)|違約處理|
|-|-|-|
|可能破壞參照完整性|插入元組|拒絕|
|可能破壞參照完整性|修改外碼值|拒絕|
|刪除元組|可能破壞參照完整性|拒絕/級(jí)聯(lián)刪除/設(shè)置唯恐值|
|修改主碼值|可能破壞參照完整性|拒絕/級(jí)聯(lián)修改/設(shè)置為空值|
||||
|備注:|拒絕|即NO ACTION
|
||級(jí)聯(lián)|即CASCADE
|用戶(hù)定義完整性
①屬性上約束條件的定義:包括 列值非空(NOT NULL
), 列值唯一(UNIQUE
), 檢查列值是否滿(mǎn)足一個(gè)條件表達(dá)式(CHECK 短語(yǔ)
) .
屬性上約束條件的檢查和違約處理: 當(dāng)往表中插入元組或修改屬性的值時(shí),DBMS將檢查屬性上的約束是否被滿(mǎn)足,如不滿(mǎn)足則被拒絕執(zhí)行
②元組上約束條件的定義:與屬性上類(lèi)似, 用CHECK
定義元組上的約束條件,即元組級(jí)限制(可設(shè)置不同屬性之間的相互約束條件).
元組上約束條件的檢查和違約處理: 當(dāng)往表中插入元組或修改屬性的值時(shí),DBMS將檢查元組上的約束條件是否被滿(mǎn)足,若不滿(mǎn)足則唄拒絕執(zhí)行完整性約束命名句子
①完整性約束命名句子
CONSTRAINT <完整性約束條件命名> <完整約束條件>
# 完整性約束條件包括: NOT NULL, UNIQUE, PRIMARY KEY, FOREEIGN KEY, CHAECK 短語(yǔ)等
②修改完整性約束條件:使用ALTER TABLE 語(yǔ)句
- 斷言:通過(guò)聲明性斷言(declarative asssrtions)來(lái)制定更具有一般性的約束, 可以定義設(shè)計(jì)多個(gè)表或聚集操作的比較復(fù)雜的完整性約束, 斷言創(chuàng)建后任何涉及關(guān)系的操作都會(huì)觸發(fā)DBMS對(duì)斷言的檢查
#創(chuàng)建斷言
CREATE ASSERTION <斷言名> <CHECK 子句>
#刪除斷言
DROP ASSERTION <斷言名>
觸發(fā)器(須細(xì)看P168)
觸發(fā)器又叫做事件-條件-動(dòng)作(event-condition-action)規(guī)則, 是用戶(hù)定義在關(guān)系表上的一類(lèi)由事件驅(qū)動(dòng)的特殊過(guò)程, 當(dāng)特定的系統(tǒng)事件(如表的增刪改查操作,事物的結(jié)束)發(fā)生時(shí),對(duì)規(guī)則的條件進(jìn)行檢查,若成立則執(zhí)行
- 定義觸發(fā)器
CREATE TRIGGER <觸發(fā)器名> #每當(dāng)觸發(fā)事件發(fā)生時(shí),該觸發(fā)器被激活
{BEFORE|AFTER} <觸發(fā)事件> ON <表名> #指明觸發(fā)器激活時(shí)是在觸發(fā)器事件前或后
REFERENCING NEW | OLD ROW AS <變量> #REFERENCING 指出引用的變量
FOR EACH {ROW|STATEMENT} #定義觸發(fā)器的類(lèi)型,指明動(dòng)作體的頻率
[WHEN <觸發(fā)器條件>] <觸發(fā)動(dòng)作體> #僅當(dāng)觸發(fā)條件為真時(shí)才執(zhí)行觸發(fā)動(dòng)作體
激活觸發(fā)器: 觸發(fā)器的執(zhí)行是由觸發(fā)事件激活并由數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)執(zhí)行, 激活應(yīng)遵循如下執(zhí)行順序
①執(zhí)行該表上的BEFORE觸發(fā)器
②激活觸發(fā)器的SQL語(yǔ)句
③執(zhí)行該表上的AFTER觸發(fā)器刪除觸發(fā)器
DROP TRIGGER <觸發(fā)器名> ON <表名>;
第六章 關(guān)系數(shù)據(jù)理論
一個(gè)好的關(guān)系模式應(yīng)當(dāng)不會(huì)發(fā)生插入異常,刪除異常和更新異常,數(shù)據(jù)冗余應(yīng)盡可能少.
- 數(shù)據(jù)依賴(lài)是一個(gè)關(guān)系內(nèi)部屬性與屬性之間的約束關(guān)系,這種關(guān)系是通過(guò)屬性間的相等是否體現(xiàn)出來(lái)的數(shù)據(jù)相關(guān)聯(lián)系;其中最重要的是
函數(shù)依賴(lài)
和多值依賴(lài)
- 規(guī)范化: 一個(gè)低一級(jí)范式的關(guān)系模式通過(guò)模式分解可以轉(zhuǎn)換為若干個(gè)高一級(jí)范式的關(guān)系模式的集合,這個(gè)過(guò)程就是規(guī)范化.
-
1NF
:第一范式,每一個(gè)分量必須是不可分的數(shù)據(jù)項(xiàng). (缺點(diǎn):數(shù)據(jù)冗余,插入異常,刪除異常,更新異常) -
2NF
:第二范式,首先屬于1NF,且每一個(gè)非主屬性完全函數(shù)依賴(lài)與任何一個(gè)候選碼(缺點(diǎn):插入異常,刪除異常,修改復(fù)雜) -
3NF
:第三范式,首先屬于2NF,且不存在傳遞依賴(lài)(并不能完全消除各種異常情況和數(shù)據(jù)冗余) -
BCNF
:修正第三范式,(基本排除了任何屬性對(duì)碼的傳遞依賴(lài)和部分依賴(lài))
BCNF其性質(zhì)有三:
①所有非主屬性對(duì)每一個(gè)碼都是完全函數(shù)依賴(lài)關(guān)系
②所有主屬性對(duì)每一個(gè)不包含它的碼也是完全函數(shù)依賴(lài)
③沒(méi)有任何屬性完全函數(shù)依賴(lài)于非碼的任何一組屬性 -
4NF
:第四范式,不允許有非平凡且非函數(shù)依賴(lài)的多值依賴(lài)②允許的非平凡多值依賴(lài)是函數(shù)依賴(lài)
規(guī)范化的基本步驟
數(shù)據(jù)依賴(lài)的公理系統(tǒng)
- Armstrong公理系統(tǒng):公理系統(tǒng)是
模式分解算法
的理論基礎(chǔ),Armstrong是一個(gè)有效且完備的公理系統(tǒng).
設(shè)U為屬性集總體,F是U上的一組函數(shù)依賴(lài),于是有關(guān)系模式R<U, F>.對(duì)于R<U, F>來(lái)說(shuō)有以下的推理規(guī)則:
- 自反律: 若Y?X?U,則X->Y為F所蘊(yùn)含
- 增廣律: 若X->Y為F所蘊(yùn)含,且Z?U, 則XZ->YZ為F所蘊(yùn)含
- 傳遞律: 若X->Y及Y->Z為F所蘊(yùn)含,則X->Z為F所蘊(yùn)含
由三條規(guī)律推出以下三條推理規(guī)則:- 合并規(guī)則:由X->Y, X->Z,有X->YZ
- 偽傳遞規(guī)則:由X->Y, WY->Z,有XW->Z
- 分解規(guī)則:由X->Y及Z?Y,有X->Z
閉包F+:在關(guān)系模式R<U,F>中為F所邏輯蘊(yùn)含的函數(shù)依賴(lài)的全體叫作F的閉包,即為F+.
X關(guān)于函數(shù)依賴(lài)集F的閉包XF+
定義:設(shè)F為屬性集U上的一組函數(shù)依賴(lài),X?U,XF+={A|X->A能由F根據(jù)Armstrong公理導(dǎo)出},XF+稱(chēng)為屬性集X關(guān)于函數(shù)依賴(lài)集F的閉包最小依賴(lài)集:又稱(chēng)最小覆蓋,滿(mǎn)足以下條件
①F中任一函數(shù)依賴(lài)的右部只含有一個(gè)屬性
②F中不存在這樣的函數(shù)依賴(lài)X->A,使得F與F-{X->A}等價(jià)
③F中不存在這樣的函數(shù)依賴(lài)X->A,X有真子集Z使得F-{X->A}∪{Z->A}與F等價(jià)
模式分解定義:分解具有無(wú)損連接性
保持函數(shù)依賴(lài)
既要保持函數(shù)依賴(lài),又要具有無(wú)損連接性
關(guān)于模式分解的幾個(gè)重要事實(shí)是:
①若要求分解保持函數(shù)依賴(lài),那一定可以達(dá)到3NF,不一定達(dá)到BCNF
①若要求分解保持函數(shù)依賴(lài),又具有無(wú)損連接性,可以達(dá)到3NF,不一定達(dá)到BCNF
①若要求分解具有無(wú)損連接性,那一定可以達(dá)到4NF損聯(lián)接性分解: 分解后的關(guān)系自然連接后完全等于分解前的關(guān)系,則這個(gè)分解相對(duì)于F是無(wú)損聯(lián)接分解。判斷分解無(wú)損聯(lián)接性的算法(二種)
- 表格法
- 設(shè)R的分解為ρ={R1,R2},F為R所滿(mǎn)足的函數(shù)依賴(lài)集,則分解ρ具有無(wú)損聯(lián)接性的充分必要條件是:R1∩R2→(R1-R2) 或者 R1∩R2→(R2-R1)
- 保持函數(shù)依賴(lài)的分解: Let F’ = F1U…FiU .. UFn , 若F與F’等價(jià),即F’ + = F + ,則保持函數(shù)依賴(lài)。判斷方法:F所有原函數(shù)依賴(lài)可以由F’的函數(shù)依賴(lài)邏輯導(dǎo)出
第七章 數(shù)據(jù)庫(kù)設(shè)計(jì)概述
- 數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)也是一項(xiàng)軟件工程,稱(chēng)為數(shù)據(jù)庫(kù)工程,數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)也有生存期的概念,通常包括六個(gè)階段:
- 需求分析階段:需求收集,分析,處理->DD(數(shù)據(jù)字典)和DFD(數(shù)據(jù)流圖)
- 概念設(shè)計(jì)階段:設(shè)計(jì)概念結(jié)構(gòu)->E-R圖
- 邏輯設(shè)計(jì)階段:設(shè)計(jì)邏輯結(jié)構(gòu)和數(shù)據(jù)模型
- 物理設(shè)計(jì)階段:關(guān)系模式存取方法(B+樹(shù),hash索引,聚簇存取),設(shè)計(jì)物理文件存儲(chǔ)結(jié)構(gòu)
- 實(shí)現(xiàn)階段:物理實(shí)現(xiàn),實(shí)驗(yàn)性運(yùn)行
- 運(yùn)行維護(hù)階:使用,維護(hù)數(shù)據(jù)庫(kù)
概念設(shè)計(jì)的主要步驟:
①進(jìn)行數(shù)據(jù)抽象,設(shè)計(jì)局部概念模式
②將局部概念模式綜合成全局概念模式
③評(píng)審采用ER方法進(jìn)行數(shù)據(jù)庫(kù)概念設(shè)計(jì)分成三步進(jìn)行:
①首先設(shè)計(jì)局部ER模式
②然后把各局部ER模式綜合成全局ER模式
③最后對(duì)全局ER模式進(jìn)行優(yōu)化邏輯結(jié)構(gòu)設(shè)計(jì):把E-R圖轉(zhuǎn)換為與選用DBMS所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)
數(shù)據(jù)模型優(yōu)化:其結(jié)果不唯一,方法為:
①確定數(shù)據(jù)依賴(lài)
②消除冗余關(guān)系
③確定關(guān)系模式處于第幾范式
④根據(jù)需求分析確定哪種模式合適應(yīng)用環(huán)境(并不是規(guī)范化程度越高的關(guān)系越優(yōu))E-R圖向關(guān)系轉(zhuǎn)換的原則:
- 一個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。(屬性,碼)
- 1:1聯(lián)系可轉(zhuǎn)為獨(dú)立關(guān)系模式,也可與其一合并;(若合并,聯(lián)系的屬性也一同合并)
- 1:n聯(lián)系可轉(zhuǎn)為獨(dú)立關(guān)系模式,亦可與n端合并;(若合并,聯(lián)系的屬性也一同合并)
- m:n聯(lián)系應(yīng)轉(zhuǎn)換為一個(gè)獨(dú)立關(guān)系模式;(碼:各實(shí)體碼組合,聯(lián)系的屬性也在此獨(dú)立關(guān)系中)
- 三個(gè)或三個(gè)以上實(shí)體間的多元聯(lián)系應(yīng)轉(zhuǎn)為一個(gè)關(guān)系模式 ;
- 具有相同碼的關(guān)系可合并
第八章 SQL編程
主語(yǔ)言為C,其格式為: EXEC SQL <SQL語(yǔ)句>
主語(yǔ)言為C,其格式為: # SQL {<SQL語(yǔ)句>}
建立嵌入式SQL的連接語(yǔ)法:`EXEC SQL CONNECT TO target [AS connection-name][USER user-name];(備注:target是要連接的數(shù)據(jù)庫(kù)服務(wù)器)
- 存儲(chǔ)過(guò)程
①創(chuàng)建存儲(chǔ)過(guò)程:
CREATE OR REPLACE PROCEDURE 過(guò)程名 ([參數(shù)1,參數(shù)2,...])
AS <過(guò)程化SQL塊>;
②執(zhí)行存儲(chǔ)過(guò)程:
CALL/PERFORM PROCEDURE 過(guò)程名 ([參數(shù)1,參數(shù)2,...]);
③修改存儲(chǔ)過(guò)程:
ALTER PROCEDURE 過(guò)程名1 RENAME TO 過(guò)程名2;
④刪除存儲(chǔ)過(guò)程:
DROP PROCEDURE 過(guò)程名;
- ODBC: 由用戶(hù)應(yīng)用程序+ODBC驅(qū)動(dòng)程序管理器+數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序+數(shù)據(jù)源構(gòu)成
其工作流程:
- 配置數(shù)據(jù)源
- 初始化環(huán)境
- 建立連接
- 分配語(yǔ)句句柄
- 執(zhí)行SQL語(yǔ)句
- 結(jié)果處理集
- 終止處理
第九章 查詢(xún)優(yōu)化
步驟為:
- 查詢(xún)分析:語(yǔ)法,詞法
- 查詢(xún)檢查:語(yǔ)義,權(quán)限,安全性檢查
- 查詢(xún)優(yōu)化:代數(shù)優(yōu)化,物理優(yōu)化
- 查詢(xún)執(zhí)行:代碼生成
- 查詢(xún)優(yōu)化的目的就是為了系統(tǒng)在執(zhí)行時(shí)既省時(shí)間又能提高效率,在關(guān)系代數(shù)運(yùn)算中,通常是先進(jìn)行笛卡爾積或聯(lián)接運(yùn)算,再進(jìn)行選擇和投影,恰當(dāng)?shù)匕才胚x擇、投影和聯(lián)接的順序,就可實(shí)現(xiàn)查詢(xún)優(yōu)化。優(yōu)化的策略主要有以下幾點(diǎn):
- 在關(guān)系代數(shù)表達(dá)式中盡可能早地執(zhí)行選擇操作(早做選擇).
- 把笛卡爾積和隨后的選擇操作合并成連接運(yùn)算 (盡可能做自然連接或等值連接,不做笛卡爾積).
- 同時(shí)計(jì)算一連串的選擇和投影操作,使操作對(duì)象盡可能變小。
- 連接多個(gè)對(duì)象時(shí),先做連接結(jié)果小的連接。
- 計(jì)算表達(dá)式之前先估計(jì)一下怎么計(jì)算合算
第十章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
- 事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,其特點(diǎn):原子性、一致性、隔離性和持續(xù)性
定義事務(wù)的語(yǔ)句一般有三條:BEGIN TRANSATION;
COMMIT;
ROLLBACK;
事務(wù)開(kāi)始通常由BEGIN TRANSACTION, COMMIT或ROLLBACK結(jié)束,commit提交事務(wù)的所有操作,rollback表示回滾,即事務(wù)運(yùn)行中發(fā)生了故障,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的操作全部撤銷(xiāo),回滾到事務(wù)開(kāi)始的狀態(tài)
②COMMIT: - 故障類(lèi)型:事務(wù)故障、系統(tǒng)故障和介質(zhì)故障
- 恢復(fù)中最經(jīng)常使用的技術(shù):數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)和登記日志文件
- 恢復(fù)的基本原理:利用存儲(chǔ)的后備副本、日志文件或數(shù)據(jù)庫(kù)鏡像中的冗余數(shù)據(jù)來(lái)重建數(shù)據(jù)庫(kù)
- 常用恢復(fù)技術(shù)
- 事務(wù)故障的恢復(fù):UNDO
- 系統(tǒng)故障的恢復(fù):未提交的事務(wù)做UNDO,已提交的做REDO
- 介質(zhì)故障的恢復(fù):重裝備份并恢復(fù)到一致性狀態(tài) + REDO
- 提高恢復(fù)效率的技術(shù)
檢查點(diǎn)技術(shù)
①可以提高系統(tǒng)故障的恢復(fù)效率
②可以在一定程度上提高利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)備份進(jìn)行介質(zhì)故障恢復(fù)的效率鏡像技術(shù)
鏡像技術(shù)可以改善介質(zhì)故障的恢復(fù)效率
第十一章 并發(fā)控制
- 數(shù)據(jù)庫(kù)的并發(fā)控制以事務(wù)為單位,每一時(shí)刻只有一個(gè)事務(wù)在運(yùn)行(在單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行實(shí)際上是
并行操作輪流交叉運(yùn)行
) - 數(shù)據(jù)庫(kù)的并發(fā)控制通常使用封鎖機(jī)制(也有時(shí)間戳,樂(lè)觀控制法,多本并發(fā)控制等其他方法), 其基本類(lèi)型有兩種
排他鎖(又稱(chēng)寫(xiě)鎖, X鎖)
和共享鎖(又稱(chēng)讀鎖, S鎖)
橫向?yàn)槭聞?wù)T1 縱向?yàn)槭聞?wù)T2 |
X | S | - |
---|---|---|---|
X | N | N | Y |
S | N | Y | Y |
- | Y | Y | Y |
備注:Y:相容請(qǐng)求,N:不相容請(qǐng)求 |
- 常用的封鎖協(xié)議
不同級(jí)別的封鎖協(xié)議提供不同的數(shù)據(jù)一致性保證,提供不同的數(shù)據(jù)共享度
名稱(chēng) | 定義 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|
一級(jí)鎖協(xié)議 | 事務(wù)T在修改 數(shù)據(jù)R之前必須先加X(jué)鎖,直到事務(wù)結(jié)束才釋放 |
可防止丟失修改并保證事務(wù)可恢復(fù) | 不保證可重復(fù)讀和不讀"臟"數(shù)據(jù) |
二級(jí)鎖協(xié)議 | 在一級(jí)鎖的基礎(chǔ)上,增加事務(wù)T在讀取 數(shù)據(jù)R之前必須先加S鎖,讀完后立即釋放 |
可防止丟失修改和讀"臟"數(shù)據(jù) | 不保證可重復(fù)讀 |
三級(jí)鎖協(xié)議 | 在一級(jí)鎖的基礎(chǔ)上,增加事務(wù)T在讀取 數(shù)據(jù)R之前必須先加S鎖,直到事務(wù)結(jié)束才釋放 |
可防止丟失修改和讀"臟"數(shù)據(jù) | - |
- 并發(fā)控制機(jī)制調(diào)度并發(fā)事務(wù)操作是否正確的判別準(zhǔn)則是可串行性
- 并發(fā)操作的正確性則通常由兩段鎖協(xié)議(簡(jiǎn)稱(chēng)2PL,①獲得封鎖,在對(duì)任何數(shù)據(jù)讀寫(xiě)之前要先申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖②釋放封鎖,釋放封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他鎖)來(lái)保證。
- 兩段鎖協(xié)議是可串行化調(diào)度的充分條件,但不是必要條件
- 對(duì)數(shù)據(jù)對(duì)象施加封鎖,帶來(lái)問(wèn)題
- 活鎖:解決方法
先來(lái)先服務(wù)
- 死鎖:
預(yù)防方法
一次封鎖法
順序封鎖法
- 死鎖的診斷與解除:超時(shí)法和等待圖法
- 封鎖粒度: 封鎖的粒度越大->數(shù)據(jù)庫(kù)所能封鎖的數(shù)據(jù)單元越少,并發(fā)度越小,系統(tǒng)開(kāi)銷(xiāo)小; 粒度越小,則相反.
多粒度封鎖
分為
- 顯式封鎖: 直接加到數(shù)據(jù)對(duì)象上的封鎖
- 隱式封鎖: 由于其上級(jí)結(jié)點(diǎn)加鎖而使該數(shù)據(jù)對(duì)象加上了鎖
- 意向鎖(intention lock)
- 目的:提高對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖時(shí)系統(tǒng)的檢查效率
- IS,IX,SIX鎖