資料庫應用程式開發入門篇—— 關聯式資料庫中的基本概念
資料庫應用程式開發入門篇—— 關聯式資料庫中的基本概念
寫在前面:關聯式資料庫是目前應用最廣泛的的資料庫,瞭解關係型資料庫的基本概念,有助於應用開發。
1.關聯式資料庫中基本概念
關聯式資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的資料。現實世界中的各種實體以及實體之間的各種聯絡均用關係模型來表示。關聯式資料庫中涉及的基本概念(碼和鍵是同個意思,主碼即主鍵)如下:
關係(Relation):一個關係對應通常說的一張表
元組(Tuple): 表中的一行即為一個元組
屬性(Attribute): 表中的一列即為一個屬性,給每一個屬性起一個名稱即屬性名
候選碼(Candidate key):若關係中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼。 簡單的情況:候選碼只包含一個屬性
元組(Tuple): 表中的一行即為一個元組
屬性(Attribute): 表中的一列即為一個屬性,給每一個屬性起一個名稱即屬性名
候選碼(Candidate key):若關係中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼。 簡單的情況:候選碼只包含一個屬性
全碼(All-key):最極端的情況下關係模式的所有屬性組是這個關係模式的候選碼,稱為全碼(All-key)。
主碼(Primary key):表中的某個屬性組,它可以唯一確定一個元組。若一個關係有多個候選碼,則選定其中一個為主碼。
主碼(Primary key):表中的某個屬性組,它可以唯一確定一個元組。若一個關係有多個候選碼,則選定其中一個為主碼。
外碼(Foreign Key):概念見下面參照完整性裡面。
主屬性(Prime attribute):候選碼的諸屬性稱為主屬性(Prime attribute)
非主屬性( Non-Prime attribute):不包含在任何侯選碼中的屬性稱為非主屬性( Non-Prime attribute)或非碼屬性(Non-key attribute)
域(Domain):屬性的取值範圍。
主屬性(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)。
例如,有教師授課關係模型如下:
課程(課號,課名,學分)
教師(工號,姓名,職稱,課號)
參考書(書號,書名,課號)
其中,關係教師中的屬性“課號”不是主碼,該屬性與關係課程中的主碼“課號”相對應。
設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) 非空值,但此值必須為被參照關係課程中某一門課程的“課號”。
例如,在上述教師授課關係模型中,關係教師中的外碼“課號”只能是下面兩類值:
(1) 空值。表示還未給該教師安排課。
(2) 非空值,但此值必須為被參照關係課程中某一門課程的“課號”。
在關聯式資料庫中,表與表之間的聯絡是通過公共屬性實現的。這個公共屬性往往是一個表的主碼,同時是另一個表的外碼。
注意:在實際應用中,外碼不一定與對應的主碼同名。
注意:在實際應用中,外碼不一定與對應的主碼同名。
3)使用者定義完整性
任何關聯式資料庫系統都應該支援實體完整性和參照完整性。除此之外,關聯式資料庫系統根據現實世界中應用環境的不同,往往還需要另外的約束條件。使用者定義的完整性就是針對某一具體要求來定義的約束條件,它反映某一具體應用所涉及的資料必須滿足的語義要求。
例如,某個屬性必須取惟一值;某些屬性之間應滿足一定的函式關係;某個屬性的取值範圍在0—400之間等。關係模型應提供定義和檢驗這類完整性的機制,以便系統用統一的方法處理它們,而不需要由應用程式來承擔這一功能。
例如,某個屬性必須取惟一值;某些屬性之間應滿足一定的函式關係;某個屬性的取值範圍在0—400之間等。關係模型應提供定義和檢驗這類完整性的機制,以便系統用統一的方法處理它們,而不需要由應用程式來承擔這一功能。
4)完整性約束規則的檢查——如何在實際操作中執行完整性約束規則
為了維護資料庫中資料的完整性,在對關聯式資料庫執行插入、刪除和修改操作時,就要檢查是否滿足以上三類完整性規則。
(1) 當執行插入操作時,首先檢查實體完整性規則,插入行的主碼屬性上的值,是否已經存在。若不存在,可以執行插入操作;否則不可以執行插入操作。再檢查參照完整性規則,如果是向被參照關係插入,不需要考慮參照完整性規則;如果是向參照關係插入,插入行在外碼屬性上的值是否已經在相應被參照關係的主碼屬性值中存在。若存在,可以執行插入操作;否則不可以執行插入操作,或將插入行在外碼屬性上的值改為空值後再執行插入操作(假定該外碼允許取空值)。最後檢查使用者定義完整性規則,檢查被插入的關係中是否定義了使用者定義完整性規則,如果定義了,檢查插入行在相應屬性上的值是否符合使用者定義完整性規則。若符合,可以執行插入操作;否則不可以執行插入操作。
(2) 當執行刪除操作時,一般只需要檢查參照完整性規則。如果是刪除被參照關係中的行,則應檢查被刪除行在主碼屬性上的值是否正在被相應的參照關係的外碼引用,若沒被引用,可以執行刪除操作,若正在被引用,有三種可能的做法:不可以執行刪除操作(拒絕刪除),或將參照關係中相應行在外碼屬性上的值改為空值後再執行刪除操作(空值刪除),或將參照關係中相應行一起刪除(級聯刪除)。
(3)當執行修改操作時,因為修改操作可看成先執行刪除操作,再執行插入操作,因此是上述兩種情況的綜合。
(1) 當執行插入操作時,首先檢查實體完整性規則,插入行的主碼屬性上的值,是否已經存在。若不存在,可以執行插入操作;否則不可以執行插入操作。再檢查參照完整性規則,如果是向被參照關係插入,不需要考慮參照完整性規則;如果是向參照關係插入,插入行在外碼屬性上的值是否已經在相應被參照關係的主碼屬性值中存在。若存在,可以執行插入操作;否則不可以執行插入操作,或將插入行在外碼屬性上的值改為空值後再執行插入操作(假定該外碼允許取空值)。最後檢查使用者定義完整性規則,檢查被插入的關係中是否定義了使用者定義完整性規則,如果定義了,檢查插入行在相應屬性上的值是否符合使用者定義完整性規則。若符合,可以執行插入操作;否則不可以執行插入操作。
(2) 當執行刪除操作時,一般只需要檢查參照完整性規則。如果是刪除被參照關係中的行,則應檢查被刪除行在主碼屬性上的值是否正在被相應的參照關係的外碼引用,若沒被引用,可以執行刪除操作,若正在被引用,有三種可能的做法:不可以執行刪除操作(拒絕刪除),或將參照關係中相應行在外碼屬性上的值改為空值後再執行刪除操作(空值刪除),或將參照關係中相應行一起刪除(級聯刪除)。
(3)當執行修改操作時,因為修改操作可看成先執行刪除操作,再執行插入操作,因此是上述兩種情況的綜合。
3.關係模型上的操作
關聯式資料庫所使用的操作可以由抽象的關係代數和關係演算來表達,這部分內容涉及集合操作等簡單數學問題,主要使用抽象符號來表示,能夠脫離具體語言來表達查詢、更新和控制等操作,對於理解資料庫操作十分有用,在這裡不做過多介紹,還是等到後面學習SQL語句時感受吧。
4.參考資料
(1)資料庫原理及開發應用 清華大學出版社 周屹等編著
(2)http://shujuku.zjwchc.com/
相關文章
- 寫給關聯式資料庫開發者的 TDengine 入門指南資料庫
- 後端開發中關聯式資料庫的開發管理新思路後端資料庫
- 關聯式資料庫與文件資料庫對比資料庫
- 關聯式資料庫很快會替代向量資料庫資料庫
- Go Web 程式設計入門--應用資料庫GoWeb程式設計資料庫
- 資料庫 - 關聯式資料庫標準語言SQL資料庫SQL
- 從關聯式資料庫遷移到NoSQL雲資料庫資料庫SQL
- 【轉載】關聯式資料庫還是NoSQL資料庫資料庫SQL
- Web Sql 關聯式資料庫WebSQL資料庫
- 關聯式資料庫設計資料庫
- 關聯式資料庫之父 (轉)資料庫
- Oracle資料庫-----資料庫的基本概念Oracle資料庫
- 如何將傳統關聯式資料庫的資料匯入Hadoop?資料庫Hadoop
- 關聯式資料庫的封建迷信資料庫
- 資料庫應用開發一、vs資料庫
- 關聯式資料庫分片原則資料庫
- 漸進式web應用開發---promise式資料庫(五)WebPromise資料庫
- 分散式資料庫入門:以國產資料庫 TDSQL 為例分散式資料庫SQL
- 在關聯式資料庫中儲存RDF (轉)資料庫
- iOS開發資料庫篇—SQLite常用的函式iOS資料庫SQLite函式
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 鍵值資料庫與關聯式資料庫有沒有融合的可能?資料庫
- 使用反應式關聯式資料庫連線規範R2DBC操作MySQL資料庫資料庫MySql
- 資料庫開發(21)高階應用開發資料庫
- 從關聯式資料庫遷移到CouchDB資料庫
- 資料庫在資料分析中如何應用資料庫
- 響應式關聯式資料庫處理R2DBC資料庫
- MongoDB資料庫入門MongoDB資料庫
- 如何將Bitcoin比特幣區塊鏈資料匯入關聯式資料庫比特幣區塊鏈資料庫
- 資料庫系統原理-關聯式資料庫的規範化理論總結資料庫
- 資料庫關聯問題資料庫
- 資料庫應用系統中的資料庫完整性(上)KP資料庫
- 《MySQL 入門教程》第 03 篇 管理資料庫MySql資料庫
- 從關聯式資料庫向NoSQL遷移資料庫SQL
- 關聯式資料庫SQL語言略解資料庫SQL
- NoSQL資料庫探討之一 - 為什麼要用非關聯式資料庫?SQL資料庫
- 前端的資料庫:IndexedDB入門前端資料庫Index
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite