資料庫應用程式開發入門篇—— 關聯式資料庫中的基本概念

hy_fighting發表於2013-04-12

資料庫應用程式開發入門篇—— 關聯式資料庫中的基本概念

寫在前面:關聯式資料庫是目前應用最廣泛的的資料庫,瞭解關係型資料庫的基本概念,有助於應用開發。

1.關聯式資料庫中基本概念

關聯式資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的資料。現實世界中的各種實體以及實體之間的各種聯絡均用關係模型來表示。關聯式資料庫中涉及的基本概念(碼和鍵是同個意思,主碼即主鍵)如下:
關係(Relation):一個關係對應通常說的一張表
元組(Tuple): 表中的一行即為一個元組
屬性(Attribute):  表中的一列即為一個屬性,給每一個屬性起一個名稱即屬性名
候選碼(Candidate key):若關係中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼。 簡單的情況:候選碼只包含一個屬性
全碼(All-key)最極端的情況下關係模式的所有屬性組是這個關係模式的候選碼,稱為全碼(All-key)。
主碼(Primary key):表中的某個屬性組,它可以唯一確定一個元組。若一個關係有多個候選碼,則選定其中一個為主碼。
外碼(Foreign Key):概念見下面參照完整性裡面。
主屬性(Prime attribute)候選碼的諸屬性稱為主屬性(Prime attribute)
非主屬性( Non-Prime attribute):不包含在任何侯選碼中的屬性稱為非主屬性( Non-Prime attribute)或非碼屬性(Non-key attribute) 
域(Domain):屬性的取值範圍。
分量:元組中的一個屬性值。
關係模式對關係的描述,形式化的表示為:關係名(屬性1,屬性2,…,屬性n)
                        例如,學生(學號,姓名,年齡,性別,系,年級)

2.關係模型的三類完整性

關係資料模型由關係資料結構、關係操作、關係中的完整性約束規則三個基本部分組成。重點了解三類完整性約束規則和關係上的操作。
關係模型中有三類完整性約束:實體完整性、參照完整性和使用者定義的完整性

1)實體完整性

實體完整性規則:若屬性A是關係R的主屬性,則A不能取空值。
實體完整性規則規定,關係的主碼中的屬性(即主屬性)不能取空值。空值(NULL)不是0,也不是空字串,而是沒有值。換言之,所謂空值就是“不知道”或“無意義”的值。由於主碼是實體的惟一標識,如果主屬性取空值,關係中就會存在某個不可標識的實體,即存在不可區分的實體,這與實體的定義矛盾,因此,這個規則稱為實體完整性規則。
注意:實體完整性規則規定基本關係的所有主鍵的各屬性都不能取空值,而不僅是主鍵整體不能取空值。
例如,選課(學號,課程號,成績)關係中,屬性組“學號”和“課程號”為主鍵,同時也是主屬性,則這兩個屬性均不能取空值。

2)參照完整性

a.  外碼和參照關係(重要概念)
設F是基本關係R的一個或一組屬性,但不是關係R的主碼(或候選碼)。如果F與基本關係S的主碼KS相對應,則稱F是基本關係R的外碼(Foreign Key),並稱基本關係R為參照關係(Referencing Relation),稱基本關係S為被參照關係(Referenced  Relation)。
例如,有教師授課關係模型如下:
課程(課號,課名,學分)
教師(工號,姓名,職稱,課號
參考書(書號,書名,課號
其中,關係教師中的屬性“課號”不是主碼,該屬性與關係課程中的主碼“課號”相對應。
因此,“課號”是關係教師的外碼。關係教師是參照關係,關系課程是被參照關係。

b.參照完整性規則
參照完整性規則:若屬性(或屬性組)F是基本關係R的外碼,它與基本關係S的主碼KS相對應,則對於R中的每個元組在F上的值必須滿足:或者取空值(F的每個屬性均為空值),或者等於S中某個元組的主碼值。
例如,在上述教師授課關係模型中,關係教師中的外碼“課號”只能是下面兩類值:
(1) 空值。表示還未給該教師安排課。
(2) 非空值,但此值必須為被參照關係課程中某一門課程的“課號”。
在關聯式資料庫中,表與表之間的聯絡是通過公共屬性實現的。這個公共屬性往往是一個表的主碼,同時是另一個表的外碼。
注意:在實際應用中,外碼不一定與對應的主碼同名。

3)使用者定義完整性

任何關聯式資料庫系統都應該支援實體完整性和參照完整性。除此之外,關聯式資料庫系統根據現實世界中應用環境的不同,往往還需要另外的約束條件。使用者定義的完整性就是針對某一具體要求來定義的約束條件,它反映某一具體應用所涉及的資料必須滿足的語義要求。
例如,某個屬性必須取惟一值;某些屬性之間應滿足一定的函式關係;某個屬性的取值範圍在0—400之間等。關係模型應提供定義和檢驗這類完整性的機制,以便系統用統一的方法處理它們,而不需要由應用程式來承擔這一功能。

4)完整性約束規則的檢查——如何在實際操作中執行完整性約束規則

為了維護資料庫中資料的完整性,在對關聯式資料庫執行插入、刪除和修改操作時,就要檢查是否滿足以上三類完整性規則。
(1) 當執行插入操作時,首先檢查實體完整性規則,插入行的主碼屬性上的值,是否已經存在。若不存在,可以執行插入操作;否則不可以執行插入操作。再檢查參照完整性規則,如果是向被參照關係插入,不需要考慮參照完整性規則;如果是向參照關係插入,插入行在外碼屬性上的值是否已經在相應被參照關係的主碼屬性值中存在。若存在,可以執行插入操作;否則不可以執行插入操作,或將插入行在外碼屬性上的值改為空值後再執行插入操作(假定
該外碼允許取空值)。最後檢查使用者定義完整性規則,檢查被插入的關係中是否定義了使用者定義完整性規則,如果定義了,檢查插入行在相應屬性上的值是否符合使用者定義完整性規則。若符合,可以執行插入操作;否則不可以執行插入操作。
(2) 當執行刪除操作時,一般只需要檢查參照完整性規則。如果是刪除被參照關係中的行,則應檢查被刪除行在主碼屬性上的值是否正在被相應的參照關係的外碼引用,若沒被引用,可以執行刪除操作,若正在被引用,有三種可能的做法:不可以執行刪除操作(拒絕刪除),或將參照關係中相應行在外碼屬
性上的值改為空值後再執行刪除操作(空值刪除),或將參照關係中相應行一起刪除(級聯刪除)。
(3)當執行修改操作時,因為修改操作可看成先執行刪除操作,再執行插入操作,因此是上述兩種情況的綜合。

3.關係模型上的操作

關聯式資料庫所使用的操作可以由抽象的關係代數和關係演算來表達,這部分內容涉及集合操作等簡單數學問題,主要使用抽象符號來表示,能夠脫離具體語言來表達查詢、更新和控制等操作,對於理解資料庫操作十分有用,在這裡不做過多介紹,還是等到後面學習SQL語句時感受吧。

4.參考資料

(1)資料庫原理及開發應用      清華大學出版社 周屹等編著
(2)http://shujuku.zjwchc.com/

相關文章