《數(shù)據(jù)庫(kù)原理》知識(shí)點(diǎn)總結(jié)
一 數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)(第1、2章)
一、有關(guān)概念
1.?dāng)?shù)據(jù) 2.?dāng)?shù)據(jù)庫(kù)(DB) 3.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng)(DBMS) Access 桌面DBMS VFP SQL Server Oracle 客戶機(jī)/服務(wù)器型DBMS MySQL DB2 4.?dāng)?shù)據(jù)庫(kù)系統(tǒng)(DBS) 數(shù)據(jù)庫(kù)(DB) 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS) 開(kāi)發(fā)工具 應(yīng)用系統(tǒng)
二、數(shù)據(jù)管理技術(shù)的發(fā)展
1.?dāng)?shù)據(jù)管理的三個(gè)階段 人工管理
文件系統(tǒng)
數(shù)據(jù)庫(kù)系統(tǒng)
數(shù)據(jù)能否保存
不能保存
可以保存
可以保存
數(shù)據(jù)面向的對(duì)象
某一應(yīng)用程序
某一應(yīng)用程序
整個(gè)應(yīng)用系統(tǒng)
數(shù)據(jù)的共享程度
無(wú)共享,一組
數(shù)據(jù)只能對(duì)應(yīng)一個(gè)應(yīng)用程序。
共享性差,一個(gè)數(shù)據(jù)文件只能對(duì)應(yīng)一個(gè)應(yīng)用程序。
共享性高
數(shù)據(jù)的獨(dú)立性
不獨(dú)立,它是應(yīng)用程序的一部分。
獨(dú)立性差
數(shù)據(jù)庫(kù)與應(yīng)用系統(tǒng)完全分開(kāi)
概念模型
一、模型的三個(gè)世界 1.現(xiàn)實(shí)世界 2.信息世界:即根據(jù)需求分析畫(huà)概念模型(即E-R圖),E-R圖與DBMS無(wú)關(guān)。 3.機(jī)器世界:將E-R圖轉(zhuǎn)換為某一種數(shù)據(jù)模型,數(shù)據(jù)模型與DBMS相關(guān)。 注意:信息世界又稱概念模型,機(jī)器世界又稱數(shù)據(jù)模型 二、實(shí)體及屬性 1.實(shí)體:客觀存在并可相互區(qū)別的事物。 2.屬性: 3.關(guān)鍵詞(碼、key):能唯一標(biāo)識(shí)每個(gè)實(shí)體又不含多余屬性的屬性組合。 一個(gè)表的碼可以有多個(gè),但主碼只能有一個(gè)。 例:借書(shū)表(
學(xué)號(hào)
,姓名,
書(shū)號(hào)
,書(shū)名,作者,定價(jià),
借期
,還期) 規(guī)定:學(xué)生一次可以借多本書(shū),同一種書(shū)只能借一本,但可以多次續(xù)借。 4.實(shí)體型:即二維表的結(jié)構(gòu) 例 student(no,name,sex,age,dept) 5.實(shí)體集:即整個(gè)二維表 三、實(shí)體間的聯(lián)系: 1.兩實(shí)體集間實(shí)體之間的聯(lián)系 1:1聯(lián)系 1:n聯(lián)系 m:n聯(lián)系 2.同一實(shí)體集內(nèi)實(shí)體之間的聯(lián)系 1:1聯(lián)系 1:n聯(lián)系 m:n聯(lián)系 四、概念模型(常用E-R圖表示) 實(shí)體型: 屬性: 聯(lián)系: 說(shuō)明:① E-R圖作為用戶與開(kāi)發(fā)人員的中間語(yǔ)言。 ② E-R圖可以等價(jià)轉(zhuǎn)換為層次、網(wǎng)狀、關(guān)系模型。 舉例: 學(xué)校有若干個(gè)系,每個(gè)系有若干班級(jí)和教研室,每個(gè)教研室有若干教員,其中有的教授 和副教授每人各帶若干研究生。每個(gè)班有若干學(xué)生,每個(gè)學(xué)生選修若干課程,每門課程有若干學(xué)生選修。用E-R圖畫(huà)出概念模型。
數(shù)據(jù)模型
一、層次模型:用樹(shù)型結(jié)構(gòu)表示實(shí)體之間的聯(lián)系。 ① 每個(gè)結(jié)點(diǎn)代表一個(gè)實(shí)體型。 ② 只能直接處理一對(duì)多(含一對(duì)一)的實(shí)體關(guān)系。 ③ 查找層次數(shù)據(jù)庫(kù)中的記錄,速度較慢。 二、網(wǎng)狀模型:用圖結(jié)構(gòu)表示實(shí)體之間的聯(lián)系。 ① 每個(gè)結(jié)點(diǎn)代表一個(gè)實(shí)體型。 ② 可以處理多對(duì)多的實(shí)體關(guān)系。 ③ 查找網(wǎng)狀數(shù)據(jù)庫(kù)中的記錄,速度最快。 三、關(guān)系模型:用二維表表示實(shí)體之間的聯(lián)系。 1.重要術(shù)語(yǔ): 關(guān)系:一個(gè)關(guān)系就是一個(gè)二維表; 元組:二維表的一行,即實(shí)體; 關(guān)系模式:在實(shí)體型的基礎(chǔ)上,注明主碼。 關(guān)系模型:指一個(gè)數(shù)據(jù)庫(kù)中全部二維表結(jié)構(gòu)的集合。 2.特點(diǎn): ① 關(guān)系模型是建立在嚴(yán)格的數(shù)學(xué)理論的基礎(chǔ)上的; ② 關(guān)系模型的存取路徑對(duì)用戶透明; ③ 查找關(guān)系數(shù)據(jù)庫(kù)中的記錄,速度最慢。 小結(jié):數(shù)據(jù)有三種類型,DBMS就有三種類型,DB亦有三種類型。
數(shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu)
一、
數(shù)據(jù)庫(kù)系統(tǒng)的
體系結(jié)構(gòu)
① 單機(jī)結(jié)構(gòu): DBMS、數(shù)據(jù)庫(kù)、開(kāi)發(fā)工具、應(yīng)用系統(tǒng)安裝在一臺(tái)計(jì)算機(jī)上。 ② C/S結(jié)構(gòu):局域網(wǎng)結(jié)構(gòu) 客戶機(jī):裝開(kāi)發(fā)工具、應(yīng)用系統(tǒng) 服務(wù)器:裝DBMS、數(shù)據(jù)庫(kù) ③ B/S結(jié)構(gòu):Internet 結(jié)構(gòu) 服務(wù)器:裝DBMS、數(shù)據(jù)庫(kù)、開(kāi)發(fā)工具、應(yīng)用系統(tǒng) 客戶機(jī):裝IE即可
三、
數(shù)據(jù)庫(kù)系統(tǒng)的
模式結(jié)構(gòu)
1.三級(jí)模式 ① 模式:是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。 ü 模式只涉及數(shù)據(jù)庫(kù)的結(jié)構(gòu); ü 模式既不涉及應(yīng)用程序,又不涉及數(shù)據(jù)庫(kù)結(jié)構(gòu)的存儲(chǔ); ② 外模式:是模式的一個(gè)子集,是與某一個(gè)應(yīng)用程序有關(guān)的邏輯表示。 特點(diǎn):一個(gè)應(yīng)用程序只能使用一個(gè)外模式,但同一個(gè)外模式可為多個(gè)應(yīng)用程序使用。 ③ 內(nèi)模式:描述數(shù)據(jù)庫(kù)結(jié)構(gòu)的存儲(chǔ),但不涉及物理記錄。 2.兩級(jí)映象 ① 外模式/模式映象:保證數(shù)據(jù)庫(kù)的邏輯獨(dú)立性; ② 模式/內(nèi)模式映象:保證數(shù)據(jù)庫(kù)的物理獨(dú)立性; 3.兩級(jí)映象的意義 ① 使數(shù)據(jù)庫(kù)與應(yīng)用系統(tǒng)完全分開(kāi),數(shù)據(jù)庫(kù)改變時(shí),應(yīng)用系統(tǒng)不必改變。 ② 數(shù)據(jù)的存取完全由DBMS管理,用戶不必考慮存取路徑。
數(shù)據(jù)庫(kù)管理系統(tǒng)
1. DBMS的功能:負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理與控制。 ① 數(shù)據(jù)定義:即定義數(shù)據(jù)庫(kù)中各對(duì)象的結(jié)構(gòu) ② 數(shù)據(jù)操縱:包括對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢、插入、刪除、修改等操作。 ③ 數(shù)據(jù)控制:包括安全性控制、完整性控制、并發(fā)控制、數(shù)據(jù)庫(kù)恢復(fù)。 2.DBMS的組成: DDL語(yǔ)言
DML語(yǔ)言
DCL語(yǔ)言
實(shí)用程序 注意: ① SQL集DDL,DML,DCL功能于一體; ② 所有應(yīng)用程序通過(guò)SQL語(yǔ)句才能訪問(wèn)數(shù)據(jù)庫(kù)
一、 基本概念
1.碼:能唯一標(biāo)識(shí)元組的屬性集。 2.候選碼:一個(gè)屬性集既能唯一標(biāo)識(shí)元組,且又不含有多余屬性,一個(gè)關(guān)系模式可以有多個(gè)候選碼。 3.主碼:任選候選碼中的一個(gè)。 4.主屬性:主碼中包含的各個(gè)屬性。 5.非主屬性:不包含在主碼中的各個(gè)屬性。 6.外碼:設(shè)F是關(guān)系R的一個(gè)屬性,不是R的主碼,但卻是另一個(gè)關(guān)系S的主碼,則稱F是關(guān)系R的外碼。 例:student ( sno, sname, ssex, sage, sdept) Sc ( sno, cno, grade) Sc的主碼為:(sno,cno);外碼為:sno
二 數(shù)據(jù)庫(kù)設(shè)計(jì) (第3章)
一、數(shù)據(jù)庫(kù)設(shè)計(jì)的步驟
① 需求分析:了解分析用戶的需要、要求。 ② 概念結(jié)構(gòu)設(shè)計(jì):根據(jù)需求分析的結(jié)果畫(huà)概念模型(即E-R圖)。 ③ 邏輯結(jié)構(gòu)設(shè)計(jì):將E-R圖轉(zhuǎn)換為某一種數(shù)據(jù)模型,并優(yōu)化。 ④ 物理結(jié)構(gòu)設(shè)計(jì) ⑤ 數(shù)據(jù)庫(kù)實(shí)施 ⑥ 數(shù)據(jù)庫(kù)運(yùn)行與恢復(fù)
概念結(jié)構(gòu)設(shè)計(jì)
一、局部E-R圖設(shè)計(jì)
1.確定局部范圍 通常把系統(tǒng)涉及的各個(gè)部門或各個(gè)主要功能作為局部。 2.確定實(shí)體與屬性 ① 屬性是不能再分的數(shù)據(jù)項(xiàng); ② 聯(lián)系只發(fā)生在兩實(shí)體之間; ③ 原則上,能夠作為屬性,就不要作為實(shí)體。
二、合并成總體E-R圖
1.消除各局部E-R圖的沖突問(wèn)題。 2.按公共實(shí)體名合并,生成初步E-R圖。 3.消除冗余的屬性和冗余的聯(lián)系,生成總體E-R圖。
邏輯結(jié)構(gòu)設(shè)計(jì)
一、聯(lián)系的屬性和主碼
(1)聯(lián)系的屬性:必須包含相關(guān)聯(lián)的各實(shí)體型的主碼。 (2)聯(lián)系的主碼 1:1聯(lián)系:可以是相關(guān)聯(lián)的任一實(shí)體型的主碼。 1:n聯(lián)系:必須是n方實(shí)體型的主碼。 m:n聯(lián)系:必須是相關(guān)聯(lián)的各實(shí)體型的主碼之和。
二、E-R圖向關(guān)系模型的轉(zhuǎn)換
(1)把每個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。 (2)1:1聯(lián)系:可以消化到相關(guān)聯(lián)的任一實(shí)體型對(duì)應(yīng)的關(guān)系模式中。 班長(zhǎng)(
XH
, XM, NL,
BH
) 班級(jí)(
BH
,RS) (3)1:n聯(lián)系:可以消化到n方實(shí)體名對(duì)應(yīng)的關(guān)系模式中。 例:一個(gè)班級(jí)有多名學(xué)生,每名學(xué)生只能屬于一個(gè)班級(jí)。每一個(gè)班級(jí)有一名班長(zhǎng),他是學(xué)生中的一員。 學(xué)生(
XH
,XM,NL,
BH
) 班級(jí)(
BH
,RS,
XH
) 班長(zhǎng)的學(xué)號(hào) (4)m:n聯(lián)系:必須轉(zhuǎn)換為一個(gè)關(guān)系模式,并且不能消化。 例: 學(xué)生(
sno
,sname, ssex, sage, sdept) 課程(
cno
, cname,credit) 選修(
sno, cno
, grade) (5)多元聯(lián)系:不能消化 例:
物理結(jié)構(gòu)設(shè)計(jì)與數(shù)據(jù)庫(kù)實(shí)施
1.物理結(jié)構(gòu)設(shè)計(jì)
在邏輯設(shè)計(jì)的基礎(chǔ)上,為每個(gè)關(guān)系模式選擇合適的存儲(chǔ)結(jié)構(gòu)與存儲(chǔ)方式。
選擇存儲(chǔ)結(jié)構(gòu):即決定每個(gè)表的記錄順序。 選擇存取方式:即決定為哪些屬性建立非聚集索引,以便加快查找速度。一般把經(jīng)常查詢的屬性名指定為非聚集索引。
2.?dāng)?shù)據(jù)庫(kù)實(shí)施
主要工作: 定義數(shù)據(jù)庫(kù)結(jié)構(gòu); 組織數(shù)據(jù)入庫(kù); 編寫(xiě)應(yīng)用程序; 數(shù)據(jù)庫(kù)試運(yùn)行;
三 關(guān)系數(shù)據(jù)庫(kù) (第4章)
一、域( domain)
1.定義:域是一組具有相同類型的值的集合。 2.域的基數(shù):域中所含數(shù)據(jù)的個(gè)數(shù)。
二、笛卡爾積
1.定義:給定一組域D1,D2,D3,則D1×D2×D3稱為笛卡爾積。 2.笛卡爾積D1×D2×D3對(duì)應(yīng)一個(gè)二維表,所含元組的個(gè)數(shù)等于各個(gè)域的基數(shù)之積。
三、關(guān)系
1.定義:笛卡兒積的一部分元組稱為關(guān)系。 2.關(guān)系的目(或度):一個(gè)關(guān)系所含屬性的個(gè)數(shù)。 3.關(guān)系的性質(zhì) 任意兩個(gè)元組不能完全相同,同一關(guān)系的屬性名不允許重復(fù)。
四、關(guān)系的完整性
1.實(shí)體完整性:指關(guān)系的所有主屬性都不能取空值。 注意:實(shí)體完整性不僅僅是主碼整體不能取空值。 2.參照完整性:指一個(gè)關(guān)系外碼的取值必須是相關(guān)關(guān)系中主碼的有效值或空值。 例:班級(jí)( 班名,人數(shù)) 學(xué)生(學(xué)號(hào),姓名,性別,密碼,班名) 在學(xué)生表中,班名的取值必須是班級(jí)表[班名]的值或空值。
關(guān)系代數(shù)
一、傳統(tǒng)的集合運(yùn)算
設(shè)關(guān)系R、S的結(jié)構(gòu)完全相同,則: R∪S:由屬于R或?qū)儆赟的元組組成。 R∩S:由既屬于R又屬于S的元組組成。 R-S:由屬于R而不屬于S的元組組成。 思考:(R∩S)∪(R-S)=? R×S:設(shè)R有m個(gè)屬性,K1個(gè)元組;S有n個(gè)屬性,K2個(gè)元組,則R×S含有(m+n)個(gè)屬性,(K1×K2)個(gè)元組。
二、專門的關(guān)系運(yùn)算
1.選擇:從關(guān)系R中選擇滿足條件的元組。記為: 2.投影:從關(guān)系R中選擇若干屬性組成新的關(guān)系,并把新關(guān)系的重復(fù)元組去掉。 記為: 3.條件連接:將兩關(guān)系按一定條件連接成一個(gè)新關(guān)系,記為: 說(shuō)明:條件連接:兩關(guān)系可以沒(méi)有公共屬性,若有公共屬性,則新關(guān)系含有重復(fù)屬性。 4.自然連接:將兩關(guān)系按公共屬性連接成一個(gè)新的關(guān)系,并把新關(guān)系的重復(fù)屬性去掉。 記為: 說(shuō)明:① 自然連接:兩關(guān)系至少有一個(gè)公共屬性。 ② 對(duì)于R的每個(gè)元組,S都從第一個(gè)元組開(kāi)始判斷,若兩元組的公共屬性值相同,則產(chǎn)生一個(gè)新元組添加到新關(guān)系中,最后把新關(guān)系中的重復(fù)屬性去掉。 等值連接? 5.除:給定關(guān)系R(x,y)和S(y,z),則R÷S=P(x),其中x,y,z為屬性組。 求解過(guò)程: ① 求R中x可以取哪些值,并求各值的象集。 ② 求S在屬性組y上的投影K。 ③ 檢查每個(gè)象集是否包含K 注:除不是一個(gè)必須的運(yùn)算,可以由其它運(yùn)算符代替。 例:設(shè)有關(guān)系R,S如下圖,求R÷S。 R
A
B
C
S
B
C
D
a1
b1
c2
b1
c2
d1
a2
b3
c7
b2
c1
d1
a3
b4
c6
b2
c3
d2
a1
b2
c3
a4
b6
c6
a2
b2
c3
a1
b2
c1
解:在關(guān)系R中,A可以取四個(gè)值,a1,a2,a3,a4。 a1的象集為{(b1,c2),(b2,c3),(b2,c1)} a2的象集為{(b3,c7),(b2,c3)} a3的象集為{(b4,c6)} a4的象集為{(b6,c6)} S在(B,C)上的投影K為{(b1,c2),(b2,c3),(b2,c1)} 顯然只有a1的象集包含K,故R÷S={a1} 結(jié)論:如何寫(xiě)關(guān)系代數(shù)表達(dá)式? 答:① 查詢涉及多個(gè)關(guān)系時(shí),一般使用∞→ 。 ② 查詢涉及“否定”時(shí),一般用差運(yùn)算。 ③ 查詢涉及“全部”時(shí),一般用除運(yùn)算。 ④ 查詢涉及“至少”時(shí),一般用×
四 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL (第5章)
T-SQL
一、SQL語(yǔ)言的特點(diǎn) ①SQL語(yǔ)言集數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)控制的功能于一體。 動(dòng)詞
數(shù)據(jù)定義
Create、drop
數(shù)據(jù)查詢
select
數(shù)據(jù)操縱
Insert、delete、update
數(shù)據(jù)控制
Grant、revoke
②所有的DBMS都支持SQL語(yǔ)言。
SQL基礎(chǔ)
一、創(chuàng)建和使用數(shù)據(jù)庫(kù)
1.創(chuàng)建數(shù)據(jù)庫(kù) create database 數(shù)據(jù)庫(kù)名 2.使用數(shù)據(jù)庫(kù) Use數(shù)據(jù)庫(kù)名 3.刪除數(shù)據(jù)庫(kù) drop database數(shù)據(jù)庫(kù)名
二、 定義表
1.創(chuàng)建表 create table 表名(屬性名 類型,…,屬性名 類型) ①指定標(biāo)識(shí)字段:identity(標(biāo)識(shí)種子,標(biāo)識(shí)增量) ②指定公式字段:屬性名 as 表達(dá)式 例:create table student (no int identity(1,1), name char(6), chi smallint, mat smallint, score as chi+mat) 2.刪除表 drop table表名,…, 表名
三、select語(yǔ)句
select */表達(dá)式表 [into 新表] from 表名,…,表名 [where 條件] [group by 屬性名] [having 條件] [order by屬性名][Asc/Desc]
1.Select 子句
① *代表所有屬性名 ② 若一個(gè)屬性名來(lái)自多個(gè)表,則屬性名前須冠以表名,格式為:表名. 屬性名 ③ 設(shè)置表達(dá)式的別名: 表達(dá)式 As 別名 ④ 限制查詢結(jié)果的記錄行數(shù): all 返回全部記錄 top n 返回前面n號(hào)記錄 distinct 表示取消重復(fù)行 說(shuō)明:top n只能放在關(guān)鍵字select的后面; all、distinct只能放在關(guān)鍵字select或聚合函數(shù)的后面。
2.Where 子句
① in的格式:屬性名 in (常量,…,常量) ② like的格式:屬性名 like 通配字符串 通配符有: % 表示0個(gè)或多個(gè)字符 - 表示1個(gè)字符 ③ 在Where 子句中指定連接: Where 表名1. 屬性名=表名2. 屬性名
3.Order by子句
order by屬性名1 [Asc/Desc], 屬性名2 [Asc/Desc]
4.聚合函數(shù)
① sum(屬性名):縱向求數(shù)值型屬性之和。 ② avg(屬性名) ③ count(*) 返回表的記錄行數(shù)(含重復(fù)行)。 count(屬性名) 返回指定列中取非NULL值的單元格數(shù)目。 count(distinct 屬性名) 返回指定列中取非NULL值、非重復(fù)的單元格數(shù)目。 ④ max(屬性名) ⑤ min(屬性名) 5.Group by子句 使用Group by子句時(shí),Select 子句只能使用分組項(xiàng)字段和聚合函數(shù) 例:以性別為分組項(xiàng),求每一組的平均年齡。 Select ssex, avg(sage) as 平均年齡 From student Group by ssex 6.Having子句 ① Having子句只能跟在Group by子句之后,且只能使用聚合函數(shù)和分組項(xiàng)字段。 ② where子句放在Group by子句之前,甚至可以沒(méi)有Group by子句;且不能包含聚合函數(shù)。 例:以系別為分組項(xiàng),查詢學(xué)生平均年齡大于19歲的系的系名,平均年齡。 Select sdept,avg(sage) as平均年齡 From student Group by sdept Having avg(sdept)>19 7.into子句 功能:將查詢結(jié)果保存到新的基表中。 一、
查詢的分類
單表查詢 連接查詢 嵌套查詢 1.連接查詢:在where子句中指定連接 where 表名1.屬性名=表名2.屬性名 2.嵌套查詢 ① 嵌套查詢的特點(diǎn) ·每級(jí)查詢的from子句一般只包含一個(gè)表名。 ·一個(gè)嵌套查詢總可以分解為若干個(gè)單表查詢,總可以改寫(xiě)成連接查詢。 ·若查詢結(jié)果顯示的屬性名來(lái)自一個(gè)表,才可以寫(xiě)成嵌套查詢。 ·子查詢不能使用order by子句,order by只能用于最頂層的查詢。 ② 在where子句中指定子查詢 where 屬性名 [not] in(子查詢):子查詢返回一列多行。 where 屬性名=(子查詢):子查詢返回一列一行。 where [not] exists(子查詢):子查詢返回多列多行。
五、數(shù)據(jù)操縱
1.insert語(yǔ)句 (1)每次插入一條記錄 insert into 表名[(屬性名表)] values(表達(dá)式表) (2)插入子查詢的結(jié)果 insert into 表名[(屬性名表)] 子查詢 例:insert into student select * from student1 2.update語(yǔ)句 update 表名 set 屬性名=值,…,屬性名=值 [where 條件] 缺省where子句,默認(rèn)為更新全部記錄。 3.delete語(yǔ)句 delete from 表名 [where 條件]
五 關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論(第7章)
函數(shù)依賴
一、有關(guān)概念:
1.函數(shù)依賴: 任給R(U),U為屬性集,x、y為U的子集,如果對(duì)于x的每個(gè)值,y有唯一確定的值與之對(duì)應(yīng),則稱x決定y,或y函數(shù)依賴于x。記為:x→y。 2. 完全函數(shù)依賴: 若x→y,且對(duì)于x的所有真子集x′,都有x′ y,則稱x完全決定y,或y完全函數(shù)依賴于x。記為: 。
結(jié)論:
若x→y,且x只包含一個(gè)屬性,則 。 3.部分函數(shù)依賴: 若x→y,且存在x的一個(gè)真子集x′,滿足x′→y,則稱x部分決定y,或y部分函數(shù)依賴于x。記為: 。 4.傳遞函數(shù)依賴: 若x→y,y→z,但 y ∕ x,則
二、平凡函數(shù)依賴與非平凡函數(shù)依賴
設(shè)x→y,如果y是x的子集,則該依賴是平凡的。如: Sno,sname→sno 如果y中至少有一個(gè)屬性不在x中,則該依賴是非平凡的。如: Sno,sname→sname,sdept 如果y中沒(méi)有一個(gè)屬性在x中,則該依賴為完全非平凡的。
三、函數(shù)依賴的推理規(guī)則
設(shè)有關(guān)系R,x、y、z為R的一個(gè)屬性集,則有: ①自反律:若 ,則x→y。 ②增廣律:若x→y,則xz→yz。 ③傳遞律:若x→y,y→z,則x→z。
注意傳遞律與傳遞函數(shù)依賴的區(qū)別。
④合并律:若x→y,x→z,則x→yz。 ⑤分解律:若x→yz,則x→y,x→z。
關(guān)系模式的規(guī)范化
一、問(wèn)題提出
R表
XH
KH
KM
XM
DZ
CJ
961
C1
OS
高明
D1
70
962
C2
DBS
高飛
D2
72
962
C4
AI
高飛
D2
80
962
C1
OS
高明
D1
75
963
C1
OS
高明
D1
90
答:存在問(wèn)題
① 數(shù)據(jù)冗余大; ② 修改麻煩; ③ 插入異常:應(yīng)該插入到DB中的數(shù)據(jù)插不進(jìn)去。 如:新開(kāi)課程沒(méi)有學(xué)生選修時(shí),新開(kāi)課程的課程號(hào)、課程名插不進(jìn)去。 ④ 刪除異常:不應(yīng)該刪除的數(shù)據(jù)被刪掉。 如選修某門課的學(xué)生畢業(yè)了,在刪除學(xué)生信息的同時(shí),把課程信息也刪除掉。 結(jié)論:一個(gè)好的關(guān)系模式應(yīng)滿足: ① 冗余應(yīng)盡可能少; ② 應(yīng)盡可能避免插入、刪除異常; ③ 消去關(guān)系中不合適的屬性依賴關(guān)系。
二、范式
① 什么叫范式? 指一個(gè)關(guān)系的非主屬性函數(shù)依賴于主碼的程度。 ② 什么叫關(guān)系規(guī)范化? 指一個(gè)關(guān)系從低級(jí)范式向高級(jí)范式的轉(zhuǎn)換過(guò)程。 ③ 應(yīng)用:關(guān)系規(guī)范化理論應(yīng)用在邏輯結(jié)構(gòu)設(shè)計(jì)階段。
三、關(guān)系模式的規(guī)范化
1.第一范式(1NF)
① 定義:若關(guān)系R的所有屬性不能再分,則R∈1NF
2.第二范式(2NF)
① 定義:若關(guān)系R∈1NF,且它的每個(gè)非主屬性都完全依賴于主碼,則稱R∈2NF。 ② 存在問(wèn)題: l 冗余大: R1必要冗余,R2冗余可以修改。 l 修改麻煩 l 插入異常:如新來(lái)的教師沒(méi)有上課,則該教師的信息就沒(méi)辦法插入R2表中。 l 刪除異常:若某位教師只授一門課,當(dāng)該門課不開(kāi)時(shí),該教師的信息亦被刪除。 ③ 原因:存在非主屬性對(duì)主碼的傳遞依賴。 KH→XM,XM→DZ,但XM KH ∴ [傳遞依賴必須有兩個(gè)非主屬性] ④ 解決辦法:將R2 一分為二 R21表 R22表 KH KM XM XM DZ C1 OS 高明 高明 D1 C2 DBS 高飛 高飛 D2 C4 AI 高飛 R21主碼:KH R22主碼:XM
3.第三范式(3NF)
① 定義:若關(guān)系R∈2NF,且它的每個(gè)非主屬性都不傳遞依賴于主碼,則稱R∈3NF。 ② 規(guī)范化過(guò)程 非規(guī)范關(guān)系 ↓使每個(gè)屬性都不能再分 1NF ↓消去非主屬性對(duì)主碼的部分依賴 2NF ↓消去非主屬性對(duì)主碼的傳遞依賴 3NF BCNF:關(guān)系模式R中,如每一個(gè)決定因素都包含碼,則R是BC范式。 如果R屬于BCNF 那么R一定屬于3NF,反之未必。 3NF ↓消去主屬性對(duì)主碼的部分依賴和傳遞依賴 BCNF
4.結(jié)論
① 若R∈1NF,且主碼只含一個(gè)屬性,則R一定為2NF。 ② 若R∈2NF,且只有0~1個(gè)非主屬性,則R一定為3NF。 ③ 3NF一般控制了數(shù)據(jù)冗余,一般避免了操作異常。 ④ 范式并非越高越好,適可而止。
六 數(shù)據(jù)庫(kù)保護(hù)技術(shù)(第8章)
安全管理
一、兩種身份驗(yàn)證模式: 僅windows模式:用戶只能使用windows登錄名登錄SQL Server 混合模式:用戶可以使用windows登錄名或SQL Server登錄名登錄SQL Server 二、兩種身份驗(yàn)證: 用戶登錄到SQL Server時(shí),必須使用特定的登錄名和密碼標(biāo)識(shí)自己。 Windows身份驗(yàn)證:用戶登錄到SQL Server時(shí),使用操作系統(tǒng)當(dāng)前的登錄名和密碼。 SQL Server身份驗(yàn)證:用戶登錄到SQL Server時(shí),必須顯式提供登錄名和密碼。 常用安全性控制方法:用戶標(biāo)識(shí)和控制、存取控制、視圖、審計(jì)、數(shù)據(jù)加密
數(shù)據(jù)庫(kù)完整性
一、在創(chuàng)建表時(shí)指定約束 1.主鍵約束 [constraint約束名] Primary key [Clustered/Nonclustered] [(屬性名,…,屬性名)] 說(shuō)明: ① 每個(gè)約束都有一個(gè)約束名,約束名通常由系統(tǒng)自動(dòng)給出。 ② 列級(jí)約束:只牽涉到一個(gè)屬性的約束,它放在相關(guān)屬性的后面,且省略屬性名表。 表級(jí)約束:牽涉到多個(gè)屬性的約束。 ③ 創(chuàng)建主鍵約束、唯一性約束時(shí)可以指定聚集(clustered)或非聚集(nonclustered)。 ④ 主鍵約束默認(rèn)為聚集的,唯一性約束默認(rèn)為非聚集的。 ⑤ 一個(gè)表最多只能創(chuàng)建一個(gè)約束是聚集的,聚集約束會(huì)影響數(shù)據(jù)表的記錄號(hào)順序。 2.外鍵約束 [constraint約束名] Foreign key[(屬性名,…,屬性名)] References 主鍵表名(屬性名,…,屬性名) 注意:兩表關(guān)聯(lián)的方式: ①臨時(shí)關(guān)聯(lián):where 表名1.屬性名=表名2.屬性名 ②永久關(guān)聯(lián):創(chuàng)建外鍵約束 3.唯一性約束 [constraint約束名] Unique [Clustered/Nonclustered] [(屬性名,…,屬性名)] 主鍵約束與唯一約束的區(qū)別: ① 在一個(gè)表中只能定義一個(gè)主鍵約束,但可定義多個(gè)唯一性約束; ② 指定為主鍵約束的字段不能取null值,但指定為唯一性約束的字段允許取null值。 4.檢查約束 [constraint約束名] Check (條件表達(dá)式) 5. 缺省約束 [constraint約束名] Default 常量 二、刪除表中的約束 alter table 表名 drop constraint 約束名,...,約束名 注意:alter語(yǔ)句后面只能跟著一個(gè)子句。 三、向表添加約束 alter table 表名 add constraint 約束名 約束定義,..., constraint 約束名 約束定義 約束定義指: Primary key [Clustered/Nonclustered] (屬性組) Foreign key(屬性組) references 主鍵表名(屬性組) Unique [Clustered/Nonclustered] (屬性組) Check(條件表達(dá)式) Default 常量 for 屬性名 默認(rèn)對(duì)象
①默認(rèn)對(duì)象與默認(rèn)約束的功能類似。 ②默認(rèn)對(duì)象以單獨(dú)的對(duì)象創(chuàng)建,可以綁定到數(shù)據(jù)庫(kù)的所有表中。 ③默認(rèn)約束只能綁定到一個(gè)表中。 規(guī)則
①規(guī)則與check約束的功能類似。 ① 則以單獨(dú)的對(duì)象創(chuàng)建,可以綁定到數(shù)據(jù)庫(kù)的所有表中。 ② check約束只能綁定到一個(gè)表中。
索引
一、索引的概念: ①索引使用戶能快速訪問(wèn)數(shù)據(jù)表的特定信息。 ② 索引必須依附于某個(gè)基本表,不能單獨(dú)存在。 二、索引的類型: 聚集索引:影響數(shù)據(jù)表的記錄順序 非聚集索引:不會(huì)影響數(shù)據(jù)表的記錄順序 注:一個(gè)表只能建立一個(gè)聚集索引,但可以建立若干個(gè)非聚集索引。 三、創(chuàng)建索引 1.自動(dòng)創(chuàng)建索引: 。如果在數(shù)據(jù)表的某個(gè)屬性設(shè)置主鍵約束或唯一約束,則系統(tǒng)將在這些屬性上自動(dòng)創(chuàng)建唯一索引。 。自動(dòng)創(chuàng)建的索引隨約束的存在而存在,隨約束的消失而消失。 2.使用SQL語(yǔ)句創(chuàng)建索引 Create [unique] [clustered/nonclustered] index 索引名 On 表名(屬性名[asc/desc], 屬性名[asc/desc]) 注:①若未指定clustered,則創(chuàng)建非聚集索引; ②若未指定排序方式,則為ASC; ③text,ntext類型的字段不能指定為索引字段。 四、刪除索引: Drop index 索引名,…,索引名 思考題:創(chuàng)建主鍵時(shí),如果使主鍵字段值不影響數(shù)據(jù)表的記錄順序?
視圖
一、視圖的特點(diǎn): ①視圖只有結(jié)構(gòu),沒(méi)有記錄,是虛表; ②一個(gè)視圖總對(duì)應(yīng)著一個(gè)select語(yǔ)句; ③對(duì)視圖的查詢、更新,實(shí)際上是對(duì)基本表的查詢、更新。 二、定義視圖: 1.創(chuàng)建視圖: Create view 視圖名 [(屬性名,…,屬性名)] As 子查詢 [with check option] 說(shuō)明:視圖的屬性個(gè)數(shù)必須與子查詢中select子句的表達(dá)式個(gè)數(shù)相同。 2.刪除視圖: Drop view 視圖名,…,視圖名 三、查詢視圖: select */表達(dá)式表 from 視圖名,…,視圖名 [where 條件] [group by 屬性名] [order by屬性名][Asc/Desc] 四、操縱視圖: 1.向視圖插入一條記錄 insert into 視圖名[(屬性名表)] values(表達(dá)式表) 2.修改視圖中的數(shù)據(jù) update視圖名set 屬性名=值,…,屬性名=值 [where 條件] 3.刪除視圖中的記錄 delete from 視圖名 [where 條件]
存儲(chǔ)過(guò)程
1.什么叫存儲(chǔ)過(guò)程? 將一組SQL語(yǔ)句,以一個(gè)名稱存儲(chǔ)在數(shù)據(jù)庫(kù)中,就形成存儲(chǔ)過(guò)程。 2.創(chuàng)建存儲(chǔ)過(guò)程 Create proc存儲(chǔ)過(guò)程名[@形參名 類型][=常量][output] As SQL語(yǔ)句序列 說(shuō)明: ① [=常量]:用于指定形參的默認(rèn)值;[output]用來(lái)指定該形參值是可以返回的。
觸發(fā)器
一、維護(hù)數(shù)據(jù)完整性的措施: 創(chuàng)建約束 基于一個(gè)表創(chuàng)建 創(chuàng)建觸發(fā)器 創(chuàng)建規(guī)則:以單獨(dú)的對(duì)象創(chuàng)建,可以綁定到數(shù)據(jù)庫(kù)的所有表中。
事務(wù)處理與并發(fā)控制
1.什么叫事務(wù)? 事務(wù)是用戶定義的一組操作序列。 ③ 事務(wù)是并發(fā)控制的基本單位。 ④ 一個(gè)事務(wù)包含的諸操作要么都執(zhí)行,要么都不執(zhí)行。 1. 事務(wù)的屬性 原子性:指事務(wù)中包含的諸操作要么都執(zhí)行,要么都不執(zhí)行。 一致性:事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。 隔離性:一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。 持久性
數(shù)據(jù)的鎖定
一、并發(fā)操作與數(shù)據(jù)不一致性 1.?dāng)?shù)據(jù)不一致性包括三類
丟失修改
:指事務(wù)1與事務(wù)2從數(shù)據(jù)庫(kù)中讀入同一數(shù)據(jù)并修改,事務(wù)2的提交結(jié)果破壞事務(wù)1提交的結(jié)果,導(dǎo)致事務(wù)1的修改被丟失。
不可重復(fù)讀
:指事務(wù)1讀取數(shù)據(jù)后,事務(wù)2執(zhí)行更新操作,使事務(wù)1無(wú)法再現(xiàn)前一次讀取結(jié)果。
讀臟數(shù)據(jù):
指事務(wù)1修改某一數(shù)據(jù)后,事務(wù)2讀取該數(shù)據(jù),事務(wù)1由于某種原因被撤銷,這時(shí)數(shù)據(jù)又恢復(fù)到原值,事務(wù)2讀到的數(shù)據(jù)與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,稱為“臟”數(shù)據(jù)。 2.產(chǎn)生數(shù)據(jù)不一致性的原因 并發(fā)操作破壞了事務(wù)的隔離性。 二、并發(fā)控制的目標(biāo)、方法 1.目標(biāo):確保DB中的數(shù)據(jù)一致性。 2.并發(fā)事務(wù)正確性的原則 幾個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與任何一個(gè)串行執(zhí)行的結(jié)果相同。 2. 并發(fā)控制的方法 DBMS一般采用“封鎖”技術(shù),保證并發(fā)操作的可串行化。 一、 封鎖(Locking) 1. 什么叫封鎖? SQL Server自動(dòng)強(qiáng)制封鎖,并且會(huì)將封鎖粒度控制在合適的級(jí)別,用戶不必考慮封鎖問(wèn)題。 2. 封鎖類型 排它鎖(X鎖):事務(wù)T對(duì)數(shù)據(jù)A加X(jué)鎖,其它事務(wù)不能再對(duì)A加鎖,即其它事務(wù)不能讀取和修改A。 共享鎖(S鎖):事務(wù)T對(duì)數(shù)據(jù)A加S鎖,其它事務(wù)只能再對(duì)A加S鎖,即其它事務(wù)只能讀A,不能修改A。 3. 封鎖粒度 封鎖對(duì)象可以是屬性列、元組、關(guān)系、整個(gè)數(shù)據(jù)庫(kù)。封鎖對(duì)象的大小稱為封鎖粒度。 封鎖粒度越小,并發(fā)度越高,但并發(fā)控制的開(kāi)銷越大。 4. 封鎖協(xié)議 ① 事務(wù)T在修改數(shù)據(jù)A之前,必須對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。 ② 事務(wù)T在讀取數(shù)據(jù)A之前,必須對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。 遵循封鎖協(xié)議,可以解決三種數(shù)據(jù)不一致性問(wèn)題: 丟失修改 不可重復(fù)讀 讀“臟”數(shù)據(jù) 四、死鎖和活鎖 封鎖技術(shù)可以解決并發(fā)操作的不一致性問(wèn)題,但也帶來(lái)新的問(wèn)題,即死鎖和活鎖。 1. 死鎖: ① 定義:兩個(gè)事務(wù)已經(jīng)各自鎖定一個(gè)數(shù)據(jù),但是又要訪問(wèn)被對(duì)方鎖定的數(shù)據(jù),造成了循環(huán)等待,稱為死鎖。 ② 避免死鎖的方法: 順序封鎖法:若規(guī)定封鎖順序?yàn)锳,B,則T1,T2只能先封鎖A,再封鎖B。 2.活鎖: ① 定義:若多個(gè)事務(wù)請(qǐng)求封鎖同一個(gè)數(shù)據(jù)時(shí),其中的某個(gè)事務(wù)總處于等待狀態(tài),則稱為活鎖。 ② 避免活鎖的方法:先來(lái)先服務(wù) 事務(wù)可串行化調(diào)度:兩段鎖協(xié)議