數據庫——複習

關係數據庫

關係數據庫由(table)的集合構成,每個表由唯一的名字。

在關係模型的術語中:
關係指代表,元組指代行,屬性指代列,關係實例來表示一個關係的特定實例(一張實際的表),關係模式是一些屬性的集合(可以產生關係實例(即實際的表)(參考類與對象的關係))
域:對於關係中的屬性,都有一個允許取值的集合。

若域中元素是不可再分的單元,則域是原子的。

超碼:一個或多個屬性的集合,可以唯一地標識一個元組。

最小的超碼定義爲:
該超碼的任意真子集都無法當作超碼,且屬性數量不大於其他超碼。
候選碼:這樣最小的超碼定義爲候選碼。

主碼:被選中的用來識別一個關係中不同元組的候選碼。(隨意選)

外碼:一個關係模式(a)中的屬性中存在屬性是另外一個關係模式(b)的主碼,則這個屬性在a稱爲參照b的外碼。
其中 a叫外碼依賴的參照關係,b叫外碼依賴的被參照關係。


關係模型的完整性約束

類型:
1.實體完整性規則:在任何關係的任何一個元組中,主鍵的值不能爲空值、也不能取重複的值。(即滿足元組唯一)
2.參照完整性規則(引用完整性規則:不引用不存在的實體*)
3.域完整性規則(用戶自定義完整性規則:由用戶根據實際情況,定義表中屬性的取值範圍,保證數據有效性)


關係運算

在這裏插入圖片描述
選擇:σ salary>85000(instructor)

from instructor 
where salary>85000;

投影:Π ID,salary(instructor)

select ID,salary 
from instructor;

:Πname(instructor)∪Πname(student)

(select name from instructor) 
union 
(select name from student);

同理的 Except, Intersact

笛卡兒積:instructor Χ department

自然連接:instructor ⋈ department (自然連接屬性不從復,元組數更少,連接元組有意義)

自然連接Natural join與迪卡兒積Χ兩點最大不同:
1)僅包含符合連接條件的元組
2)連接屬性僅出現一次

連接方式

inner join(內連接(默認))
left outer join(左外連接):只保留出現在左外連接運算左邊的關係中的元組(未匹配到的元組)
right outer join(右外連接):同理
full outer join(全外連接):左右均保留


通配符

與 SQL LIKE 操作符一起使用,查找數據。

% 替代 0 個或多個字符
_ 替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]或[!charlist] 不在字符列中的任何單一字符

SQL中使用 REGEXP 或 NOT REGEXP 運算符 (或 RLIKE 和 NOT RLIKE) 來操作正則表達式。(第三種與第四種)

LIKE’M[^c]%’ 將搜索以字母 M 開頭,並且第二個字母不是 c 的所有名稱(如MacFeather)。

MySQL 、SQLite 只支持 % 和 _ 通配符


ER圖轉關係模型規則

(1) 一個實體型轉換爲一個關係模式,實體的屬性就是關係的屬性,實體的碼
就是關係的碼.

(2) 一個1 : 1的聯繫可以轉換爲一個獨立的關係模式,也可以與任意一端對
應的關係模式合併.如果轉換爲一個獨立的關係模式,則與該聯繫相連的各實體
的碼及聯繫本身的屬性均轉換爲關係的屬性,每個實體的碼均是該關係的候選
鍵.

(3) 一個l:n聯繫可以轉換爲一個獨立的關係模式,也可以與任意n端對應
的關係模式合併。如果轉換爲一個獨立模式,則與該聯繫相連的各實體的碼及聯
系本身的屬性均轉換爲關係的屬性,而關係的碼爲n端的實體的碼。如果與n端
實體對應的關係模式合併,則需要在該關係模式的屬性中加入1端關係模式的碼
和聯繫本身的屬性。



(4) 一個m:n的聯繫可以轉換爲一個獨立的關係模式,與該聯繫相連的各實體
的碼及聯繫本身的屬性均轉換爲關係的屬性,而關係的碼爲各實體碼的組合。






(5) 三個以上實體間的一個多元聯繫可以轉換爲一個獨立的關係模式,與該聯
系相連的各實體的碼及聯繫本身的屬性均轉換爲關係的屬性,而關係的碼爲各實
體碼的組合。



S1:處理強實體
建立一個新表T,將所有簡單屬性(複合屬性拆解爲簡單屬性)添加進表,確定主碼;
S2:處理1:1的弱實體W
找到其依附的強實體所映射的表T,將弱實體所有簡單屬性(複合屬性拆解爲簡單屬性)
添加進該表;
S3:處理1:N或M:N的弱實體W
建立一個新表T,將W所有簡單屬性(複合屬性拆解爲簡單屬性)添加進T表;
如果是1:N的弱實體,添加W依附的強實體的主碼爲外碼到T表,T表的主碼由該外碼和W的鑑別器組成;
如果是N:M的弱實體,建立新的具有唯一值的一列爲主碼;

S4:處理1:1的聯繫R
確定參與該聯繫的表S和T,選定全參與的一方S,將另一方T的主碼作爲外碼加入S,將聯繫R的所有屬性(複合屬性拆解爲簡單屬性)添加入S;

S5:處理1:N的聯繫R
確定處於N端的實體S和處於1端的實體T,將T的主碼作爲外碼加入S,將聯繫R的所有屬性(複合屬性拆解爲簡單屬性)添加入S:

S6:處理N:M的聯繫R
建立新表T,將參與該關係的實體的主碼作爲外碼加入T,將聯繫R的所有屬性(複合屬性拆解爲簡單屬性)添加入T:

S7:處理多值屬性A
建立新表T,將A的所有屬性(複合屬性拆解爲簡單屬性)添加入T,將A所屬的實體或聯繫的主碼作爲外碼加入T,將該外碼和A對應的屬性作爲T的主碼。


關係模式的分解

有的時候爲了更好的設計模式,我們往往會將當前的幾個關係模式合併爲新的關係模式,或者將當前的關係模式分解爲新的幾個關係模式。

**函數依賴:**函數依賴可形式化表示爲: X→Y, 其中 X and Y 是屬性集。
如果對於關係實例r中的任意一對元組t1和t2,有t1.X = t2.X 邏輯蘊涵 t1.Y =t2.Y,那麼,函數依賴 X→Y在關係r中成立。
即關係r中給定兩個元組,如果 X 屬性值相等,則 Y 的值也必須相等. (X 和 Y 是屬性集)
平凡的函數依賴: X->Y(Y⊆X)

函數依賴的規律:
(增廣律): If X → Y, then XZ → YZ for any Z
(傳遞律): If X → Y and Y → Z, then X → Z
(增補率): If X → Y and Z爲一個屬性集, then ZX → ZY
(合併率): If X → Y and X → Z ,then X → YZ
(分解率): If X → YZ, then X → Y and X → Z

非主屬性:包含在任何一個候選碼中的屬性成爲主屬性。除了主屬性以外的就是非主屬性。

範式

第一範式(1NF): 關係的屬性具有原子性
第二範式(2NF): 在1NF的基礎上,非碼屬性必須完全依賴於候選碼(在1NF基礎上消除非主屬性對主碼的部分函數依賴)
第三範式(3NF): 在2NF基礎上,任何非主屬性不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)
巴斯-科德範式(BCNF): 在3NF基礎上,任何非主屬性不能對主鍵子集依賴(在3NF基礎上消除對主碼子集的依賴)

數據庫語言

SQL(Structure Query Language)結構化查詢語言
DQL(data query language)數據查詢語言:SELECT … FROM … WHERE。
DML(data manipulation language)數據操作語言,主要是數據庫增刪改三種操作:INSERT、UPDATE、DELETE。
DDL(data defination language)數據庫定義語言,主要是建表、刪除表、修改表字段等操作:CREATE,DROP,ALTER。
DCL(data control language)數據庫控制語言,如commit,revoke之類的,在默認狀態下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人員纔有權力執行DCL:GRANT、REVOKE。
TCL:事務控制語言。關鍵字:COMMIT、ROLLBACK、SAVEPOINT。

發佈了90 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章