1. 程式人生 > >Just for funnnnnnnnnnnn

Just for funnnnnnnnnnnn

也許你經常聽到SQL server,Oracle,MySQL等名詞,人們將它們統稱為資料庫。這些服務軟體的完整名稱其實叫做資料庫管理系統(Database-Management System,DBMS),它由資料庫(即一些資料的集合)與用來對資料庫進行管理(比如訪問、建立、刪除、修改)的程式組成。

基於不同的資料模型,資料庫又被分為很多種。目前最常見的,被廣泛實現的是關係資料庫,它基於關係模型。比如開頭所說的三個DBMS中包含的均為關係資料庫。

關係資料庫是表的集合,下圖即為MySQL(一款免費的關係資料庫系統)中的一張表(命名為person)。通常把這一張表稱作一個關係(relation),表中的每一列代表了一個屬性(attribute)

,而每一行為表中的一條記錄,又稱為元組(tuple)。比如該表第一行的元組,是一個姓名為li ming的female,她的id為1。可以看出,li ming,female,1這三者的對應關係通過表連線了起來,這也是它被稱作關係資料庫的原因。 在這裡插入圖片描述 關係資料庫是關係(或者說表)的集合,而關係則是元組的集合。比如在上圖中,四個元組構成了這個關係。不過有以下幾點要注意:1.既然關係是元組的集合,那麼元組間其實是沒有順序的(因為集合沒有順序),當然你可以規定它展示在螢幕上時的順序。2.集合中沒有兩個完全相同的元素,這意味著同一個表中沒有兩個完全相同的元組

人們常常提到資料庫模式(database schema)

資料庫例項(database instance) 這兩個概念。資料庫模式是指資料庫的邏輯設計,是指使用DBMS支援的標準語言描述的資料庫的結構;而資料庫例項則是某一時刻資料庫中資料的快照。關係資料庫的模式又稱關係模式,它由屬性序列及其對應的域組成。比如在上圖中的關係模式為person(name,sex,id)。

之前已經提到在同一個關係中沒有兩個完全相同的元組,那麼是怎麼樣區分關係中不同元組的呢?其實是通過屬性,如果一個屬性不夠就用多個屬性。通常我們把能夠區分關係中所有不同元組的一組屬性的集合叫做超碼(superkey);然而這組超碼中可能有冗餘的屬性,即去掉這個屬性也能區分所有的元組,如果把超碼中所有的冗餘屬性去掉,就得到了候選碼(candidate key)

,候選碼是能夠區分所有不同元組的最小屬性集合。我們從候選碼中選出來一個作為用來區分關係中不同元組的碼,這個碼稱為主碼(primary key)。這三種碼都有區分不同元組的能力,我們真正選出來進行區分的是主碼。

在這三種碼之外,還有一種碼叫做外碼(foreign key),不過它是用來對屬性值進行約束的。也許我們在一個表A中記錄了所有學生正確的學號(且恰為主碼),在表B中記錄學生的學號和其它詳細資訊。很明顯,在表B中出現的學號必須已經出現在表A中,否則它就是錯誤的學號。那麼,我們定義B中的學號屬性為A中的學號屬性的外碼,B也被稱為外碼依賴的參照關係(referencing relation),A為外碼的被參照關係(referenced relation)。簡單來說,B在它的屬性中包含A的主碼(假設為屬性num),那麼num在B上稱為參照A的外碼。