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