Just for funnnnnnnnnnnn
也許你經常聽到SQL server,Oracle,MySQL等名詞,人們將它們統稱為資料庫。這些服務軟體的完整名稱其實叫做資料庫管理系統(Database-Management System,DBMS),它由資料庫(即一些資料的集合)與用來對資料庫進行管理(比如訪問、建立、刪除、修改)的程式組成。
基於不同的資料模型,資料庫又被分為很多種。目前最常見的,被廣泛實現的是關係資料庫,它基於關係模型。比如開頭所說的三個DBMS中包含的均為關係資料庫。
關係資料庫是表的集合,下圖即為MySQL(一款免費的關係資料庫系統)中的一張表(命名為person)。通常把這一張表稱作一個關係(relation),表中的每一列代表了一個屬性(attribute)
人們常常提到資料庫模式(database schema)
之前已經提到在同一個關係中沒有兩個完全相同的元組,那麼是怎麼樣區分關係中不同元組的呢?其實是通過屬性,如果一個屬性不夠就用多個屬性。通常我們把能夠區分關係中所有不同元組的一組屬性的集合叫做超碼(superkey);然而這組超碼中可能有冗餘的屬性,即去掉這個屬性也能區分所有的元組,如果把超碼中所有的冗餘屬性去掉,就得到了候選碼(candidate key)
在這三種碼之外,還有一種碼叫做外碼(foreign key),不過它是用來對屬性值進行約束的。也許我們在一個表A中記錄了所有學生正確的學號(且恰為主碼),在表B中記錄學生的學號和其它詳細資訊。很明顯,在表B中出現的學號必須已經出現在表A中,否則它就是錯誤的學號。那麼,我們定義B中的學號屬性為A中的學號屬性的外碼,B也被稱為外碼依賴的參照關係(referencing relation),A為外碼的被參照關係(referenced relation)。簡單來說,B在它的屬性中包含A的主碼(假設為屬性num),那麼num在B上稱為參照A的外碼。