數(shù)據(jù)字典
數(shù)據(jù)庫系統(tǒng)中存放三層結(jié)構(gòu)定義的數(shù)據(jù)庫稱為數(shù)據(jù)字典(DD),
對(duì)數(shù)據(jù)庫的操作都要通過DD才能實(shí)現(xiàn)。
DD系統(tǒng)中還存放數(shù)據(jù)庫運(yùn)行是的統(tǒng)計(jì)信息。
管理DD的系統(tǒng)稱為DD系統(tǒng)
DBMS
是指數(shù)據(jù)庫系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行管理的軟件系統(tǒng),它是數(shù)據(jù)庫系統(tǒng)
的核心組成部分。對(duì)DB的一切操作,包括定義、查詢、更新及控制,
都是通過DBMS進(jìn)行的。
DBMS的主要功能
- DDL
- DML
- 數(shù)據(jù)庫保護(hù)功能:4個(gè)數(shù)據(jù)控制子系統(tǒng)
- 數(shù)據(jù)庫的維護(hù)功能:各個(gè)實(shí)用程序構(gòu)成
- 數(shù)據(jù)字典:DD子系統(tǒng)
DBS的組成
- 數(shù)據(jù)庫
- 硬件
- 軟件
- 數(shù)據(jù)庫管理員
數(shù)據(jù)庫
全部數(shù)據(jù)的集合。DB分為兩類,一類是應(yīng)用數(shù)據(jù)集合,稱為物理數(shù)據(jù)庫,
它是數(shù)據(jù)庫的主體;另一類是各級(jí)數(shù)據(jù)結(jié)構(gòu)的描述,稱為描述數(shù)據(jù)庫,由DD系統(tǒng)管理。
軟件
包括DBMS、OS、各種主語言和應(yīng)用開發(fā)支撐軟件等程序。
DBA數(shù)據(jù)庫管理員
- 定義模式
- 定義內(nèi)模式
- 與用戶聯(lián)絡(luò)
- 定義安全性規(guī)則
- 定義完整性規(guī)則
- 數(shù)據(jù)庫的轉(zhuǎn)存與恢復(fù)工作
三層模式兩級(jí)映像
- 外模式 用戶與數(shù)據(jù)庫的接口
- 邏輯模式 數(shù)據(jù)庫中全部數(shù)據(jù)的整體邏輯結(jié)構(gòu)的描述。
- 內(nèi)模式
高度的數(shù)據(jù)獨(dú)立性
應(yīng)用程序和數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)之間相互獨(dú)立。其分為兩類,一是物理數(shù)據(jù)獨(dú)立性;二是邏輯數(shù)據(jù)獨(dú)立性。
目的是為了保存外模式和應(yīng)用程序不受影響。
關(guān)系模型基本概念
字段 、 屬性 、 列
字段值 、 屬性值
記錄類型、 關(guān)系模式
記錄 元組、 行
屬性相同的元組集合、 關(guān)系、 表
屬性個(gè)數(shù)、 元數(shù)
元組個(gè)數(shù)、 基數(shù)
域 值得集合、 屬性值的取值范圍
元組數(shù)目無限、 無限關(guān)系、 計(jì)算機(jī)研究有限關(guān)系
關(guān)系模式的3類完整性規(guī)則
實(shí)體完整性、 主鍵不為空
參照完整性、 外鍵是否為空視具體而定
備注:1外鍵的值必須參照相應(yīng)主鍵的表中的主鍵值,或者可以為空。
2主鍵和外鍵可以在同一個(gè)關(guān)系模式中
用戶自定義完整性、 具體的數(shù)據(jù)約束
關(guān)系模式的3層體系結(jié)構(gòu)
關(guān)系模式、 記錄類型、 邏輯模式
子模式、 用戶描述、 外模式
存儲(chǔ)模式、 描述如何物理存儲(chǔ)、 內(nèi)模式
關(guān)系模式的形式定義和優(yōu)點(diǎn)
數(shù)據(jù)結(jié)構(gòu)、 簡(jiǎn)明精確
數(shù)據(jù)操作、 獨(dú)立于數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)完整性規(guī)則
關(guān)系查詢語言和關(guān)系演算
DML、 查詢 更新
關(guān)系查詢語言: 關(guān)系代數(shù)、 關(guān)系演算、 關(guān)系邏輯
關(guān)系代數(shù)
5基本操作: 并 差 笛卡爾積 投影 選擇
4組合操作: 交 連接 自然連接 除法
7擴(kuò)充操作: 改名 廣義投影 賦值 外連接 外部并 半連接 聚集操作
等值連接、 笛卡爾積+等值
自然連接、 等值連接+去除重復(fù)等值屬性列
否定的操作、 差操作
檢索不學(xué)C2課的學(xué)生
錯(cuò)誤方式 πSNAME,AGE(σCNO≠‘C2’(S?SC))
一定要用“差”的形式:
πSNAME,AGE(S)-πSNAME,AGE(σCNO=‘C2’(S?SC))
全部特征、 除法操作
πSNO,CNO(SC)÷πCNO(C)
SQL基本概念
基本表、 本身獨(dú)立的表、 一個(gè)關(guān)系一個(gè)基本表、 一個(gè)基本表一個(gè)存儲(chǔ)文件 一個(gè)表諾干索引
視圖、 一個(gè)以上基本表導(dǎo)出的表
復(fù)習(xí)題庫
數(shù)據(jù)庫操縱功能、 DML、 查詢更新
數(shù)據(jù)庫控制功能、 DCL、 revoke commint等
函數(shù)依賴
FD(Function Dependency)、 形為x->Y的命題 、 函數(shù)依賴
F、 函數(shù)依賴集
被F邏輯蘊(yùn)涵的函數(shù)依賴、 F |=X->Y
函數(shù)依賴集(F)的閉包、 F+、 被(F)邏輯蘊(yùn)涵的函數(shù)依賴的集合
FD和關(guān)鍵碼聯(lián)系、 超鍵、 候選碼
屬性集X的閉包、 X+ = {屬性A|F|=X->A}
FD推理規(guī)則完備性、 函數(shù)依賴集推出的X->Y都在其閉包中
FD集的最小依賴集、 (超鍵之于候選鍵)
- 每個(gè)FD左邊不冗余
- FD間不冗余
- 每個(gè)FD右邊單屬性
候選碼的求法
首先來看候選鍵的定義:若關(guān)系中的某一屬性組的值能唯一地標(biāo)識(shí)一個(gè)元組。
若W是候選鍵,則必須滿足兩個(gè)條件:W的閉包是U;W沒有冗余。
設(shè)關(guān)系模式R中U=ABC.......等N個(gè)屬性,U中的屬性在FD中的情況:
- 只在左部出現(xiàn); 一定存在于某候選碼當(dāng)中
- 不在左右出現(xiàn); 一定存在于所有候選碼中
- 只在右部出現(xiàn); 一定不在候選碼中
- 左右出現(xiàn); 與候選碼組合,滿足屬性集閉包是U,確定候選碼。
關(guān)系模式的分解
模式分解、 計(jì)算機(jī)中數(shù)據(jù)存儲(chǔ)、 不在泛關(guān)系r、 在數(shù)據(jù)庫模式中
無損分解、 損失分解、 投影連接能否恢復(fù)、 寄生元組
泛關(guān)系假設(shè)、 先存在r泛關(guān)系再討論分解、 無假設(shè)之與懸掛元組(自然連接被丟失的)
模式分解優(yōu)點(diǎn)、 消除冗余操作異常、 分解的數(shù)據(jù)庫可以存儲(chǔ)懸掛元組存儲(chǔ)泛關(guān)系中無法存儲(chǔ)的信息
模式分解缺點(diǎn)、 檢索需連接、 有泛關(guān)系可能寄生元組、 無泛關(guān)系可能懸掛元組
無損分解測(cè)試
建立表格
- 屬性Aj做列、 模式Ri做行;
- 行列有交叉填aj、 行列無交叉填bij。
追蹤C(jī)hase - 根據(jù)依賴集F|=X->Y;
- 兩行X相同則修改使兩行Y也相同
- 兩行Y、 aj > 下標(biāo)小的bij
有一個(gè)行全aj 是無損分解
無損分解充分必要定理:
- Ri是關(guān)系模式R的一個(gè)分解
- (R1交R2)->(R1-R2)或(R2-R1) 注釋:即推導(dǎo)屬于FD,在依賴集中
保持函數(shù)依賴FD的分解特性
- 1驗(yàn)證F中的每個(gè)FD是否被任意數(shù)據(jù)庫模式邏輯蘊(yùn)涵
- 2 關(guān)系模式函數(shù)依賴閉包F+ = 全部的數(shù)據(jù)庫模式函數(shù)依賴閉包
- 無損分解特性與保持函數(shù)依賴分解特性無關(guān)、 結(jié)合模式分解的優(yōu)缺點(diǎn)
- 模式分解與模式等價(jià)、 數(shù)據(jù)等價(jià)+語義等價(jià)
- 數(shù)據(jù)等價(jià)、 不會(huì)丟失信息,無損分解特性
- 語義等價(jià)、 數(shù)據(jù)庫模式有相同的依賴集閉包,保持FD分解特性
分解特性舉例、 兩個(gè)特性
關(guān)系模式R(ABC),ρ={AB,AC},分析在F1={A->B},
F2={A->C,B->C},F3={B->A},F4-{C->B},B->A}下的分解特性?
1分析無損分解:R1交R2=A 、 AB-AC=B 、 AC-AB=C;
即滿足A->B或者A->C依賴的是無損分解:F1、F2。
2分析保持FD分解:關(guān)系模式函數(shù)依賴閉包 = 全部數(shù)據(jù)庫模式函數(shù)依賴閉包;
即:F1滿足;F2不滿足,丟失B->C;F3滿足; F4不滿足,丟失C->B;
關(guān)系模式的范式、 (1NF、 2NF)過時(shí)、 3NF、 BCNF
- 1NF、 關(guān)系r的屬性值不可再分
- 2NF、 1NF+每個(gè)非主屬性完全函數(shù)依賴于候選鍵
- 3NF、 1NF+每個(gè)非主屬性都不傳遞依賴與R的候選鍵。(如果有,分解后,這便是外鍵的由來)
- DCNF、 1NF+每個(gè)屬性都不傳遞依賴于R的候選鍵
- 平凡FD: 類似 A ->AB ;ABC->ABC等無價(jià)值的FD
- 主屬性:包含候選碼的屬性組
- 傳遞依賴:類似A->C,C->B;
定理:滿足BCDF->滿足3NF
- BCNF、 無損分解、 不一定保持FD分解
- 關(guān)系模式R優(yōu)先BCDF分解,如果BCDF不滿足保持FD,則分解為3NF
3NF分解算法
關(guān)系模式R(U),主鍵W,R上還有FD X->Z。并且Z是非主屬性(Z不屬于X),
X不是候選鍵,這樣W->Z就是一個(gè)傳遞依賴。此時(shí)需要R分解為2個(gè)模式
R1(XZ),主鍵X;
R2(Y),其中Y=U-Z,主鍵仍然W,外鍵X(參照R1)。
如果R1、R2還不是3NF,那么在重復(fù)上述,直到數(shù)據(jù)庫模式為3NF。
BCNF分解算法
和3NF分解算法很像,只是FD X->Z,其中Z也可以是主屬性。
總結(jié)3NF BCNF分解算法: 消除傳遞依賴,產(chǎn)生外鍵
分解成3NF模式集的合成算法?
- 求F的最小依賴集,把左部相同的FD合并性
- 對(duì)每個(gè)最小依賴集中的FD X->Y 去構(gòu)成一個(gè)模式XY
- 構(gòu)成的模式集中,如果每個(gè)模式都不包含R的候選鍵,那么把候選鍵單獨(dú)作為一個(gè)模式。
分解3NF舉例
關(guān)系模式R(ABCDE),R的最小依賴集{A->B,C->D}。
從依賴集可知R的候選碼為ACE。
先根據(jù)最小依賴集 生成ρ{AB,CD}模式,不包含候選碼ACE
加入候選碼的模式,得到 ρ{AB,CD,ACE}
局部依賴和傳遞依賴是模式產(chǎn)生冗余和異常的兩個(gè)重要原因,
由于3NF只消除了非主屬性對(duì)候選鍵的局部依賴和傳遞依賴,
雖然性能已經(jīng)很好了,但仍然還可能有小部分存儲(chǔ)異常。
模式設(shè)計(jì)方法
- ρ是BCNF或3NF模式集
- 無損分解
- 保持函數(shù)依賴集
錯(cuò)題集
數(shù)據(jù)庫系統(tǒng)的核心是( D )
A) 編譯系統(tǒng) B)數(shù)據(jù)庫 C)操作系統(tǒng) D)數(shù)據(jù)庫管理系統(tǒng)表達(dá)用戶使用觀點(diǎn)的數(shù)據(jù)庫局部邏輯結(jié)構(gòu)的模型是( C )
A) 概念模型 B)邏輯模型 C)外部模型 D)內(nèi)部模型
備注: 概念模型;表達(dá)用戶使用觀點(diǎn)的數(shù)據(jù)庫全局邏輯結(jié)構(gòu)的模型3.對(duì)關(guān)系數(shù)據(jù)庫來講,下面( C )說法是錯(cuò)誤的
A)外鍵和相應(yīng)的主鍵可以不同名,只要定義在相同值域上即可
B)不同的屬性可對(duì)應(yīng)于同一值域
C)行的順序可以任意交換,但列的順序不能任意交換
D) 關(guān)系中的任意兩個(gè)元組不能完全相同注釋
1 外鍵的值必須參照相應(yīng)主鍵的表中的主鍵值,或者可以為空。
2 主鍵和外鍵可以在同一個(gè)關(guān)系模式中4.?dāng)?shù)據(jù)庫系統(tǒng)生存期分七個(gè)階段:規(guī)劃、需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)、物理設(shè)計(jì)、實(shí)現(xiàn)、運(yùn)行維護(hù)。
5.下面有關(guān)模式分解的敘述中,不正確的是(D )
A) 若一個(gè)模式分解保持函數(shù)依賴,則該分解一定具有無損連接性。
B) 若要求分解保持函數(shù)依賴,那么模式分解可以達(dá)到3NF,但不一定能達(dá)到BCNF
C) 若要求分解既具有無損連接性,又保持函數(shù)依賴,則模式分解可以達(dá)到3NF,但不一定能達(dá)到BCNF
D) 若要求分解具有無損連接性,那么模式分解一定可以達(dá)到BCNF注釋
A選項(xiàng),保持FD—>無損分解,不能逆推
B選項(xiàng),BCNF->3NF,不能逆推
C選項(xiàng), BCNF 滿足無損分解,不一定滿足保持FD分解;所以優(yōu)先采用BCNF分解,如果不行才選用3NF分解。3.下述哪一條不是由于關(guān)系模式設(shè)計(jì)不當(dāng)而引起的(B )
A) 數(shù)據(jù)冗余 B) 丟失修改 C) 插入異常 D) 修改異常1.任何一個(gè)二元關(guān)系在函數(shù)依賴的范疇內(nèi)必能達(dá)到( D )
A) 1NF B)2NF C)3NF D)BCNF備注 二元關(guān)系
設(shè)關(guān)系模式R(ABCD),F(xiàn)是R上成立的FD集,F(xiàn)={AB→CD,A→D}。
1)試說明R不是2NF模式的理由。
2)試把R分解成2NF模式集。注釋:
1 R的候選鍵是AB,則非主屬性為C和D,并且AB→D成立。而已知A→D,因此AB→D為非主屬性D對(duì)候選鍵的局部依賴。
2 R分解為:R1(AD)主鍵是A;
R2(ABC)主鍵是AB,外鍵是A。
對(duì)于3NF的判斷:是否?非主屬性傳遞依賴于候選鍵
SQL模式定義
SQL模式、 模式名和模式擁有者的賬戶、 包含每個(gè)元素定義(基本表、視圖、索引等);
一個(gè)模式 、 一個(gè)存儲(chǔ)空間、 基本表的集合;模式建立 : Creat Schema <模式名> Authorization 用戶名;
模式撤銷、 Drop Schema STU [Cascade(級(jí)聯(lián))|Restrict(約束)];
Cascade級(jí)聯(lián)銷毀全部元素、 Restrict約束。習(xí)慣性采用DATABASE替換Schema詞, 語句為 Create DATABASE 。
SQL語句不區(qū)分大小寫。
基本表
基本表創(chuàng)建
Create Table <表名> (<列名 類型>,<完整性約束>);
Creat Table T (t# char(4),tname char(8) Not NULL, Primary Key(t#),Foreign Key(tname)References T2(tname2#));
完整性約束了t#為主鍵,tname為外鍵且非空且指定了對(duì)應(yīng)T2表中tname2的參照完整性
基本表修改
Alter(改變成分)、 Add、 Drop、 Modify(修改)
- 新列 Alter Table <表名> Add <列名> <類型>
- 刪列 Alter Table <表名> Drop <列名> [Cascade|Restrict]
- 修改原有列的類型\寬度 Alter Table <表名> Modify <列名> <類型>
基本表撤銷
Drop Table <表名> [Cascade|restrict]
索引 : 功能僅限查詢、 起到主鍵的作用
- 創(chuàng)建索引 Create [Unique] Index <索引名> On <表名>(<列名>)
- 撤銷索引 Drop Index <索引名>
SQL數(shù)據(jù)查詢
句型 Select - From - Where -;
Where 子句、 條件表達(dá)式
- 算術(shù)運(yùn)算符
- 邏輯運(yùn)算符 and 、 or 、 not
- 集合成員資格運(yùn)算符 in 、 not in
- 謂詞 exists、 all、 some、 unique(唯一)
- 聚合函數(shù) avg、min 、 max 、 sum 、 count
- 子句的運(yùn)算對(duì)象可以是另一個(gè)select子句,即嵌套select語句
where s# in (select語句)
where exists (select語句)
Select子句
- 聚合函數(shù) count(*) count|sum|avg|max|min(<列名>)
select Count(*),Avg(age)
select count(distinct s#) form sc 因?yàn)榭梢赃x修多門,加了distinct,說明統(tǒng)計(jì)選課的人數(shù),而不是上選修課的人次樹
select完整句法
where行條件子句、 group分組子句、 having組條件子句、 order排序子句
select<列名序列或列表達(dá)式序列>
from<表和(或)視圖序列>
[where<行條件表達(dá)式>]
[group by<列名序列>
[having<組條件表達(dá)式>]]
[order by <列名[asc|desc]>,...]
select句法執(zhí)行過程:
- 讀取form子句表、視圖的數(shù)據(jù),執(zhí)行笛卡爾積操作
- 選取滿足where子句中條件表達(dá)式的元組
- 按group子句指定列的值分組,同時(shí)提取滿足having子句中組條件表達(dá)式的那些組
- 按select子句中給出的列名或列表達(dá)式求值輸出
- order子句對(duì)輸出的目標(biāo)進(jìn)行排序,升序排列Asc或者降序排列Desc。
(1)使用帶有EXISTS謂詞的子查詢:查詢所有選修了1號(hào)課程的學(xué)生姓名。
select sname from student where
exists (select sno from sc where sno=student.sno and cno='1')
> (2)查詢選修了全部課程的學(xué)生姓名。
>> ```
1.
select Sname from student where Sno IN
(select Sno from SC
group by Sno
having count(*) = (select count(*) from course ))
select Sname from student S,
(select Sno from SC
group by Sno
having count() = (select count() from course )) C
where S.sno=C.sno
>> ```
3.
select sname from student
where not exists ( select * from course where not exists (select * from sc where sc.sno=student.sno and sc.cno=course.cno))
(3)使用帶有EXISTS謂詞的子查詢:查詢所有選修了1號(hào)課程的學(xué)生姓名
select sname from student where
exists (select sno from sc where sno=student.sno and cno='1)
Unique和distinct
> Unique是約束完整性的一種,distinct用于查詢
####SQL更新 insert into 、 update set 、delect from
> 數(shù)據(jù)插入格式:
(1)單元組的插入
```INSERT INTO 基本表名 [(列名表)] VALUES(元組值)```
(2)子查詢結(jié)果的插入
``` INSERT INTO 基本表名 [(列名表)]<SELECT查詢語句>```
數(shù)據(jù)修改格式:
```UPDATE 基本表名
SET 列名=值表達(dá)式[,列名=值表達(dá)式…]
[WHERE 條件表達(dá)式]```
數(shù)據(jù)刪除格式:
```DELETE FROM基本表名
[WHERE 條件表達(dá)式]```
>>將一個(gè)新學(xué)生記錄(學(xué)號(hào):95020;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。
insert into student values('95020','陳冬','男','18','IS')
>>Student_1表的內(nèi)容插入到Student表
insert into Student1
select * from student
>>將學(xué)生95001的年齡改為22歲
update student set sage=22 where sno='95001'
>>將計(jì)算機(jī)科學(xué)系全體學(xué)生的成績(jī)置零。
UPDATE SC
SET grade=0
WHERE 'CS'=(select Sdept FROM Student WHERE Student.Sno = SC.Sno)
>>刪除計(jì)算機(jī)科學(xué)系所有學(xué)生的選課記錄。
delete FROM sc where 'CS'= (select sdept from student where student.sno=sc.sno)
####視圖 ( CREATE、DROP 、 INSERT、UPDATE、DELETE)
>
CREATE VIEW <視圖名>(列表序列)
AS <SELECT 查詢語句>
CREATE VIEW STUDENT_GRADE as
select STUDENT.Sno,SNAME,CNAME,GRADE from STUDENT,sc,course where STUDENT.sno=sc.sno and sc.cno=course.cno
DROP VIEW 視圖名
更新同表,但是更新有條件?
1. 行列子集視圖(從單個(gè)基本表選擇、投影導(dǎo)出的,且包含主鍵)
2. 允許更新的視圖在定義時(shí)必須加上"with check option"