1.專業名詞解釋
元組:表中的一行就是一個元組。
分量:元組的某個屬性值。在關係數據庫中,屬性是“不可分的”。
碼:表中可以唯一確定一個元組的某個屬性(或者屬性組),如果這樣的碼有不止一個,那麼大家都叫候選碼,我 們從候選碼中挑一個出來做老大,它就叫主碼。
超碼:屬性組是碼跟非碼在組成的碼。(因爲碼可以是一個屬性組)
全碼:整個屬性組都是候選碼。
主屬性:候選碼。
非主屬性:非候選碼。
外碼:一個屬性(或屬性組),它不是碼,但它是別的表的碼。
2.函數依賴
函數依賴
:(根據一個屬性值可以唯一確定另一個屬性值)
定義: 設R(U)是屬性集U上的關係模式,X、Y是U的子集。若對於R(U)的任意一個可能的關係r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱Y函數依賴於X或X函數確定Y,記爲X→Y。
eg:
Sno | Sname | Sage |
---|---|---|
s1 | hang | 18 |
s2 | codekaing | 18 |
上面這張表就可以說是,Sname函數依賴於Sno,s1→hang。
再來看下面這張表,此時就不滿足函數依賴。(根據s1得到的另一個屬性值不唯一)
Sno | Sname | Sage |
---|---|---|
s1 | hang | 18 |
s1 | codekaing | 18 |
平凡函數與非平凡函數依賴
:
定義:
X→Y,Y⊈X,則稱X→Y是非平凡的函數依賴
。
X→Y,Y⊆X,則稱X→Y是平凡的函數依賴
。
eg:
在關係SC(Sno,Cno,Grade)中,
非平凡函數依賴:(Sno,Cno)→Grade
平凡函數依賴:(Sno,Cno)→Cno
完全函數依賴
:
定義:設X,Y是關係R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函數依賴於X。
eg:通過{學生學號, 選修課程名}可以得到{該生本門選修課程的成績},而通過單獨的{學生學號}或者單獨的{選修課程名}都無法得到該成績,則說明{該生本門選修課程的成績}完全依賴於{學生學號,選修課程名}
部分函數依賴
:
定義:設X,Y是關係R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數依賴於X。
eg:通過{學生學號,課程號}可以得到{該生姓名},而通過單獨的{學生學號}已經能夠得到{該生姓名},則說明{該生姓名}部分依賴於{學生學號,課程號}; 又比如, 通過{學生學號,課程號}可以得到{課程名稱},而通過單獨的{課程號}已經能夠得到{課程名稱},則說明{課程名稱}部分依賴於{學生學號,課程號}。(部分依賴會造成數據冗餘及各種異常。)
tips:將 多個字段聯合 形成主鍵時 一定會形成部分函數依賴。
傳遞函數依賴
:
定義:設X,Y,Z是關係R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數依賴於X。
eg:關係R(學號 ,宿舍, 費用)中,(學號)->(宿舍),宿舍!=學號,(宿舍)->(費用),費用!=宿舍。(傳遞依賴也會造成數據冗餘及各種異常。))
3.範式
第一範式(1NF):每個字段不可再分
↓
↓ 消除非主屬性對碼的部分函數依賴,即拆成多張表
↓
第二範式(2NF):非主屬性完全依賴於碼
↓
↓ 消除非主屬性對碼的傳遞函數依賴,即拆成多張表
↓
第三範式(3NF):屬性不依賴於其它非主屬性
↓
↓ 消除主屬性與碼的部分和傳遞函數依賴
↓
BC範式(BCNF):(一張表只能有一個老大(碼),老大(碼)可以是一個屬性組)
1.所有的非主屬性對每一個碼都是完全函數依賴。
2.所有主屬性對每一個不包含它的碼也是完全依賴。
3.所有屬性對非主屬性都不能存在函數依賴。
4.E-R圖
E-R圖也稱實體-聯繫圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯繫的方法,用來描述現實世界的概念模型。
實體之間的聯繫有:一對一(1:1),一對多(1:n),多對多(m:n)。
E-R圖表示方式:
實體型:
用矩形表示,框內寫實體名。如學生
屬性:
用橢圓表示,框內寫屬性名,並用無向邊將其與實體型連接起來。如性別、年齡等。
聯繫:
用菱形表示,框內寫聯繫名,並用無向邊分別與實體型和屬性連接,同時在無向邊旁標註聯繫的類型 (1:1,1:n,n:m)。聯繫也可以具有屬性。
補充知識(不同關係常用設計表思路)
- 多對多:
需要三張表,兩個基本表,一張關係表(含兩個引用基本表主鍵的外鍵)
。如學生與老師多對多的關係,可設計學生信息一張表(sno,sname…)、老師信息一張表(tno,tname…)、師生對應關係一張表(id,fk_sno,fk_tno)。 - 一對多:
兩張表,其中一張加外鍵
。如教室與學生一對多的關係,可設計學生信息一張表(sno,sname,fk_cno…),教室信息一張表(cno,cname…)。其中fk_cno是sno學生的所在教室編號 - 一對一:
兩張表,其中一張加唯一外鍵
。如A表id爲主鍵,B表aid(unique約束)參考A表的id字段共享主鍵
。即兩張表共用同一個主鍵,A表id爲主鍵,B表id也爲主鍵且參考A表的id字段。
5.視圖
5.1視圖特點
- 虛表,從一個或幾個基本表(或視圖)導出表。
- 只存放視圖的定義,不存放數據。
- 基本表的數據發生變化時,從視圖中查詢出的數據也會改變。
5.2建立、刪除視圖
建立視圖語句:
create view <視圖名>[<列名>,<列名>...]
as 子查詢
[with check option];
with check option
表示對視圖進行增刪改操作時要保證增刪改的行滿足視圖定義的謂詞條件(即子查詢中的條件表達式)。
子查詢
可以是任意的查詢語句。
刪除視圖語句:
drop view 視圖名字 [cascade];
cascade
:級聯刪除,刪除主表同時刪除從表——同時刪除具有主外鍵關係的表。
視圖操作與基本表的層刪改查一致,只不過它不存放數據而已。
更詳細的Mysql增刪改查可以查考我的另一篇博客:Mysql學習(全)