數(shù)據(jù)字典
數(shù)據(jù)庫系統(tǒng)中存放三層結(jié)構(gòu)定義的數(shù)據(jù)庫稱為數(shù)據(jù)字典(DD)爆阶,
對數(shù)據(jù)庫的操作都要通過DD才能實現(xiàn)。
DD系統(tǒng)中還存放數(shù)據(jù)庫運行是的統(tǒng)計信息溶褪。
管理DD的系統(tǒng)稱為DD系統(tǒng)
DBMS
是指數(shù)據(jù)庫系統(tǒng)中對數(shù)據(jù)進(jìn)行管理的軟件系統(tǒng)币旧,它是數(shù)據(jù)庫系統(tǒng)
的核心組成部分。對DB的一切操作猿妈,包括定義吹菱、查詢巍虫、更新及控制,
都是通過DBMS進(jìn)行的鳍刷。
DBMS的主要功能
- DDL
- DML
- 數(shù)據(jù)庫保護(hù)功能:4個數(shù)據(jù)控制子系統(tǒng)
- 數(shù)據(jù)庫的維護(hù)功能:各個實用程序構(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ù)庫的主體;另一類是各級數(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ù)工作
三層模式兩級映像
- 外模式 用戶與數(shù)據(jù)庫的接口
- 邏輯模式 數(shù)據(jù)庫中全部數(shù)據(jù)的整體邏輯結(jié)構(gòu)的描述嗜愈。
- 內(nèi)模式
高度的數(shù)據(jù)獨立性
應(yīng)用程序和數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)之間相互獨立旧蛾。其分為兩類,一是物理數(shù)據(jù)獨立性蠕嫁;二是邏輯數(shù)據(jù)獨立性锨天。
目的是為了保存外模式和應(yīng)用程序不受影響。
關(guān)系模型基本概念
字段 剃毒、 屬性 病袄、 列
字段值 、 屬性值
記錄類型迟赃、 關(guān)系模式
記錄 元組陪拘、 行
屬性相同的元組集合厂镇、 關(guān)系纤壁、 表
屬性個數(shù)、 元數(shù)
元組個數(shù)捺信、 基數(shù)
域 值得集合酌媒、 屬性值的取值范圍
元組數(shù)目無限、 無限關(guān)系迄靠、 計算機(jī)研究有限關(guān)系
關(guān)系模式的3類完整性規(guī)則
實體完整性秒咨、 主鍵不為空
參照完整性、 外鍵是否為空視具體而定
備注:1外鍵的值必須參照相應(yīng)主鍵的表中的主鍵值掌挚,或者可以為空雨席。
2主鍵和外鍵可以在同一個關(guān)系模式中
用戶自定義完整性、 具體的數(shù)據(jù)約束
關(guān)系模式的3層體系結(jié)構(gòu)
關(guān)系模式吠式、 記錄類型陡厘、 邏輯模式
子模式抽米、 用戶描述、 外模式
存儲模式糙置、 描述如何物理存儲云茸、 內(nèi)模式
關(guān)系模式的形式定義和優(yōu)點
數(shù)據(jù)結(jié)構(gòu)、 簡明精確
數(shù)據(jù)操作谤饭、 獨立于數(shù)據(jù)存儲
數(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é)生
錯誤方式 πSNAME萍倡,AGE(σCNO≠‘C2’(S?SC))
一定要用“差”的形式:
πSNAME,AGE(S)-πSNAME辟汰,AGE(σCNO=‘C2’(S?SC))
全部特征列敲、 除法操作
πSNO,CNO(SC)÷πCNO(C)
SQL基本概念
基本表帖汞、 本身獨立的表戴而、 一個關(guān)系一個基本表、 一個基本表一個存儲文件 一個表諾干索引
視圖翩蘸、 一個以上基本表導(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集的最小依賴集惜浅、 (超鍵之于候選鍵)
- 每個FD左邊不冗余
- FD間不冗余
- 每個FD右邊單屬性
候選碼的求法
首先來看候選鍵的定義:若關(guān)系中的某一屬性組的值能唯一地標(biāo)識一個元組瘫辩。
若W是候選鍵,則必須滿足兩個條件:W的閉包是U;W沒有冗余伐厌。
設(shè)關(guān)系模式R中U=ABC.......等N個屬性阅仔,U中的屬性在FD中的情況:
- 只在左部出現(xiàn); 一定存在于某候選碼當(dāng)中
- 不在左右出現(xiàn); 一定存在于所有候選碼中
- 只在右部出現(xiàn); 一定不在候選碼中
- 左右出現(xiàn); 與候選碼組合,滿足屬性集閉包是U弧械,確定候選碼八酒。
關(guān)系模式的分解
模式分解、 計算機(jī)中數(shù)據(jù)存儲刃唐、 不在泛關(guān)系r羞迷、 在數(shù)據(jù)庫模式中
無損分解、 損失分解画饥、 投影連接能否恢復(fù)衔瓮、 寄生元組
泛關(guān)系假設(shè)、 先存在r泛關(guān)系再討論分解抖甘、 無假設(shè)之與懸掛元組(自然連接被丟失的)
模式分解優(yōu)點热鞍、 消除冗余操作異常、 分解的數(shù)據(jù)庫可以存儲懸掛元組存儲泛關(guān)系中無法存儲的信息
模式分解缺點衔彻、 檢索需連接薇宠、 有泛關(guān)系可能寄生元組、 無泛關(guān)系可能懸掛元組
無損分解測試
建立表格
- 屬性Aj做列艰额、 模式Ri做行澄港;
- 行列有交叉填aj、 行列無交叉填bij柄沮。
追蹤C(jī)hase - 根據(jù)依賴集F|=X->Y回梧;
- 兩行X相同則修改使兩行Y也相同
- 兩行Y、 aj > 下標(biāo)小的bij
有一個行全aj 是無損分解
無損分解充分必要定理:
- Ri是關(guān)系模式R的一個分解
- (R1交R2)->(R1-R2)或(R2-R1) 注釋:即推導(dǎo)屬于FD祖搓,在依賴集中
保持函數(shù)依賴FD的分解特性
- 1驗證F中的每個FD是否被任意數(shù)據(jù)庫模式邏輯蘊(yùn)涵
- 2 關(guān)系模式函數(shù)依賴閉包F+ = 全部的數(shù)據(jù)庫模式函數(shù)依賴閉包
- 無損分解特性與保持函數(shù)依賴分解特性無關(guān)狱意、 結(jié)合模式分解的優(yōu)缺點
- 模式分解與模式等價、 數(shù)據(jù)等價+語義等價
- 數(shù)據(jù)等價拯欧、 不會丟失信息详囤,無損分解特性
- 語義等價、 數(shù)據(jù)庫模式有相同的依賴集閉包哈扮,保持FD分解特性
分解特性舉例纬纪、 兩個特性
關(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)過時、 3NF捅膘、 BCNF
- 1NF添祸、 關(guān)系r的屬性值不可再分
- 2NF、 1NF+每個非主屬性完全函數(shù)依賴于候選鍵
- 3NF寻仗、 1NF+每個非主屬性都不傳遞依賴與R的候選鍵刃泌。(如果有,分解后署尤,這便是外鍵的由來)
- DCNF耙替、 1NF+每個屬性都不傳遞依賴于R的候選鍵
- 平凡FD: 類似 A ->AB ;ABC->ABC等無價值的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就是一個傳遞依賴。此時需要R分解為2個模式
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合并性
- 對每個最小依賴集中的FD X->Y 去構(gòu)成一個模式XY
- 構(gòu)成的模式集中垦江,如果每個模式都不包含R的候選鍵帽馋,那么把候選鍵單獨作為一個模式。
分解3NF舉例
關(guān)系模式R(ABCDE),R的最小依賴集{A->B,C->D}。
從依賴集可知R的候選碼為ACE绽族。
先根據(jù)最小依賴集 生成ρ{AB,CD}模式姨涡,不包含候選碼ACE
加入候選碼的模式,得到 ρ{AB,CD,ACE}
局部依賴和傳遞依賴是模式產(chǎn)生冗余和異常的兩個重要原因吧慢,
由于3NF只消除了非主屬性對候選鍵的局部依賴和傳遞依賴涛漂,
雖然性能已經(jīng)很好了,但仍然還可能有小部分存儲異常检诗。
模式設(shè)計方法
- ρ是BCNF或3NF模式集
- 無損分解
- 保持函數(shù)依賴集
錯題集
數(shù)據(jù)庫系統(tǒng)的核心是( D )
A) 編譯系統(tǒng) B)數(shù)據(jù)庫 C)操作系統(tǒng) D)數(shù)據(jù)庫管理系統(tǒng)表達(dá)用戶使用觀點的數(shù)據(jù)庫局部邏輯結(jié)構(gòu)的模型是( C )
A) 概念模型 B)邏輯模型 C)外部模型 D)內(nèi)部模型
備注: 概念模型怖喻;表達(dá)用戶使用觀點的數(shù)據(jù)庫全局邏輯結(jié)構(gòu)的模型3.對關(guān)系數(shù)據(jù)庫來講,下面( C )說法是錯誤的
A)外鍵和相應(yīng)的主鍵可以不同名岁诉,只要定義在相同值域上即可
B)不同的屬性可對應(yīng)于同一值域
C)行的順序可以任意交換锚沸,但列的順序不能任意交換
D) 關(guān)系中的任意兩個元組不能完全相同注釋
1 外鍵的值必須參照相應(yīng)主鍵的表中的主鍵值,或者可以為空涕癣。
2 主鍵和外鍵可以在同一個關(guān)系模式中4.?dāng)?shù)據(jù)庫系統(tǒng)生存期分七個階段:規(guī)劃哗蜈、需求分析、概念設(shè)計坠韩、邏輯設(shè)計距潘、物理設(shè)計、實現(xiàn)只搁、運行維護(hù)音比。
5.下面有關(guān)模式分解的敘述中,不正確的是(D )
A) 若一個模式分解保持函數(shù)依賴氢惋,則該分解一定具有無損連接性洞翩。
B) 若要求分解保持函數(shù)依賴,那么模式分解可以達(dá)到3NF焰望,但不一定能達(dá)到BCNF
C) 若要求分解既具有無損連接性骚亿,又保持函數(shù)依賴,則模式分解可以達(dá)到3NF熊赖,但不一定能達(dá)到BCNF
D) 若要求分解具有無損連接性来屠,那么模式分解一定可以達(dá)到BCNF注釋
A選項,保持FD—>無損分解震鹉,不能逆推
B選項俱笛,BCNF->3NF,不能逆推
C選項, BCNF 滿足無損分解,不一定滿足保持FD分解传趾;所以優(yōu)先采用BCNF分解迎膜,如果不行才選用3NF分解。3.下述哪一條不是由于關(guān)系模式設(shè)計不當(dāng)而引起的(B )
A) 數(shù)據(jù)冗余 B) 丟失修改 C) 插入異常 D) 修改異常1.任何一個二元關(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對候選鍵的局部依賴兼贸。
2 R分解為:R1(AD)主鍵是A;
R2(ABC)主鍵是AB吃溅,外鍵是A溶诞。
對于3NF的判斷:是否?非主屬性傳遞依賴于候選鍵
SQL模式定義
SQL模式决侈、 模式名和模式擁有者的賬戶螺垢、 包含每個元素定義(基本表、視圖赖歌、索引等)枉圃;
一個模式 、 一個存儲空間庐冯、 基本表的集合孽亲;模式建立 : Creat Schema <模式名> Authorization 用戶名;
模式撤銷、 Drop Schema STU [Cascade(級聯(lián))|Restrict(約束)]展父;
Cascade級聯(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為外鍵且非空且指定了對應(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ù)運算符
- 邏輯運算符 and 鲸睛、 or 、 not
- 集合成員資格運算符 in 坡贺、 not in
- 謂詞 exists官辈、 all箱舞、 some、 unique(唯一)
- 聚合函數(shù) avg拳亿、min 晴股、 max 、 sum 肺魁、 count
- 子句的運算對象可以是另一個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 因為可以選修多門鹅经,加了distinct寂呛,說明統(tǒng)計選課的人數(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子句指定列的值分組,同時提取滿足having子句中組條件表達(dá)式的那些組
- 按select子句中給出的列名或列表達(dá)式求值輸出
- order子句對輸出的目標(biāo)進(jìn)行排序胖缤,升序排列Asc或者降序排列Desc尚镰。
(1)使用帶有EXISTS謂詞的子查詢:查詢所有選修了1號課程的學(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號課程的學(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á)式]```
>>將一個新學(xué)生記錄(學(xué)號: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ī)科學(xué)系全體學(xué)生的成績置零杏节。
UPDATE SC
SET grade=0
WHERE 'CS'=(select Sdept FROM Student WHERE Student.Sno = SC.Sno)
>>刪除計算機(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. 行列子集視圖(從單個基本表選擇歹啼、投影導(dǎo)出的玄渗,且包含主鍵)
2. 允許更新的視圖在定義時必須加上"with check option"