關係型資料庫概要

zyhmz發表於2018-07-03

rails的ORM用得有點多了,對於其底層封裝的關係型資料庫的記憶反而不是很清晰了,讓我們來重新回顧一下吧。有很多初學的同學可能對關係型資料庫有一些誤解,以為關係型資料庫就是mysql,其實不然,關係型資料庫是指一種關係模型,甚至可以認為是一種資料模型,mysql只是一種實現,還有pg等一大票資料庫的應用層實現。《資料庫系統概念》是一本好書,可惜囉裡八嗦說了好多晦澀的話,搞得我每次看了之後都會忘記所看過的東西,可能這就是學術的嚴謹性吧。在這裡,希望可以去粗取精,加深印象。

在關係模型的術語中,關係(relation)代表用來指代表,而元組(trule)用來指代行。類似地,屬性用來指代表中的列。對於某個關係中的每個屬性,都存在一個允許取值的集合,我們稱之為該屬性的。比如在某一個關係中,存在一個屬性season,而這屬性的域就是[spring, summer, autumn, winter],這個屬性的取值就是隻能在這裡面四取一。這些概念其實在我們工作的時候常會混淆,區分好這些會利於我們的思維表達。

其次在我們討論資料庫的時候,我們必須區分好資料庫模式資料庫例項的區別。前者是資料庫的邏輯設計,而後者是給定時刻資料庫中的資料的一個快照,通俗一點說,這個快照就是我們真實的資料,我們把這些資料按照我們所設計的模式存放。

好,繼續往前走,我們再來看看關係型資料庫中的key,這幾種key分別是主鍵,候選鍵,和超鍵。首先,超鍵是一個或者多個屬性的集合,這些屬性的組合可以使我們在一個關係中唯一地標識一個元組。比如,某一個描述學校組織的關係中,ID屬性足以將不同的教師元組區別開來。因此,ID是一個超碼,另一方面,name屬性卻不是一個超碼,因為有幾個老師可能重名。然而,超碼中可能會包含一下一些無關緊要的屬性,比如說,ID和Name的集合也是一個超碼,但是name這個屬性確實冗餘的,去掉冗餘屬性之後的最小超碼稱為候選碼。現在,主鍵的含義很明顯了,他就是用來標示某個元組在它所存在的關係中是是唯一的。

一個關係模式(r1)可能在它的屬性中包含另一個關係模式(r2)的主鍵,這個屬性在r1上被稱為外來鍵,關係r1被稱為外碼依賴的參照關係,r2叫做外碼的被參照關係。參照完整性約束要求在參照關係中任意元組在外來鍵取值上的取值必然等於被參照關係中主鍵取值。

相關文章