2.1 關(guān)系數(shù)據(jù)庫
2.1.1關(guān)系
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)十分簡單,只包含單一的數(shù)據(jù)結(jié)構(gòu)——關(guān)系。在用戶看來,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張扁平的二維表。關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)雖然簡單卻能表達豐富的語義。在關(guān)系模型中,現(xiàn)實世界的實體以及實體之間的聯(lián)機都是用單一的關(guān)系結(jié)構(gòu)類型來表示。
-
域(domain)
定義:域是一組具有相同數(shù)據(jù)類型的值的集合。例如學生數(shù)據(jù)庫中所有的學生名字,或者性別的取值只有男或女,這就是性別的域。 -
笛卡爾積
在一組域D1,D2,D3…Dn中的笛卡爾積是:D1xD2xD3…Dn 。其中每一個元素(d1,d2,d3,…dn)稱為一個n元組,元素中每一個di稱之為一個分量一個域允許的不同取址的個數(shù)稱為這個域的基數(shù)。笛卡爾積可以表示為一個二位表,表中的每一列來自一個域。 -
關(guān)系
D1xD2xD3x…xDn的子集叫做在域D1,D2,D3…Dn上的關(guān)系,表示為R(D1,D2,D3…Dn),R表示關(guān)系的名字,n是關(guān)系的目和度。比如一個實體:學生(學號,姓名,班級,院系),其中R為學生,n為4。
關(guān)系中每個元素是關(guān)系中的元組,使用t來表示。關(guān)系是笛卡爾積的有限子集,表的每一行對應(yīng)一個元組,表的每一列對應(yīng)一個域。由于域可以相同,為了區(qū)分,必須給每一列起一個名字,稱之為屬性。n目關(guān)系有n個屬性。
如果關(guān)系中某一屬性的值能夠唯一的標識一個元組,而其子集不能,則稱該屬性組為候選碼(比如學生表中的學號,通過學號可以確定是哪個學生,但是靠班級或者性別是不行的)。如果一個關(guān)系中有多個候選碼,則可以選擇其中一個作為主碼(primary key)。候選碼的各個屬性稱為主屬性。不包含在任何候選碼中的屬性稱為非主屬性。在最簡單的情況下,關(guān)系模式所有的屬性都是這個關(guān)系模式的候選碼,稱為全碼。
關(guān)系可以有三種類型:基本關(guān)系、查詢表和視圖表?;娟P(guān)系就是實際存在的表;查詢表是查詢結(jié)果對應(yīng)的表;視圖表是由基本表或其它視圖表導出的表,是虛表,不對應(yīng)實際存儲的數(shù)據(jù)。
因此,基本關(guān)系具有一下六條性質(zhì):
(1)列是同質(zhì)的,也就是每一列中的數(shù)據(jù)都是同一類型的來自同一個域的
(2)不同的列可能來自同一個域,稱每個列為一個屬性。比如學生的出生年份和入學年份兩個不同的屬性是來自同一個域的
(3)列的順序無所謂,次序可以交換
(4)任意兩個元組的候選慢不能取相同的值
(5)行的順序也無所謂
(6)分量必須取原子值,每一個分量必須是不可分的數(shù)據(jù)項
關(guān)系模型中要求關(guān)系必須是規(guī)范化的,滿足上述條件的。規(guī)范化的關(guān)系簡稱為范式(Normal Form,NF)
2.1.2關(guān)系模式
關(guān)系是元組的集合,因此關(guān)系模式必須指出這個元組集合的結(jié)構(gòu)。關(guān)系的描述稱為關(guān)系模式,可表示為:
R(U,D,DOM,F)
R為關(guān)系名,U為組成該關(guān)系的屬性名集合,D為U中屬性來自的域,DOM為屬性向域的映像集合,F(xiàn)為屬性間數(shù)據(jù)的依賴關(guān)系集合。
2.1.3關(guān)系數(shù)據(jù)庫
在一個給定的應(yīng)用領(lǐng)域中,所有關(guān)系的集合構(gòu)成一個關(guān)系數(shù)據(jù)庫。
關(guān)系數(shù)據(jù)庫的型又稱為關(guān)系數(shù)據(jù)路模式,是對關(guān)系數(shù)據(jù)庫的描述。關(guān)系數(shù)據(jù)庫模式包含若干域的定義。
2.2 關(guān)系操作
2.2.1 基本的關(guān)系操作
常用的關(guān)系操作包括查詢(query)、插入(insert)、刪除(delete)和修改(update)。關(guān)系的查詢表達能力強,查詢的基本操作是選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、差(except)、交和笛卡爾積,這些在后面都會介紹。關(guān)系操作的特點是集合操作方式,就是操作的對象和結(jié)果都是集合。這部分會在后面詳細介紹
2.2.2關(guān)系數(shù)據(jù)語言的分類
早期的關(guān)系操作能力通常用代數(shù)方式活著邏輯方式來表示,分別稱為關(guān)系代數(shù)和關(guān)系演算。關(guān)系代數(shù)用對關(guān)系的運算來表達查詢需求,關(guān)系元算則使用謂語來表達查詢要求。另外還有一種介于關(guān)系代數(shù)和關(guān)系演算之間的結(jié)構(gòu)化查詢語言(SQL),具有豐富的查詢功能,是集查詢、數(shù)據(jù)定義和數(shù)據(jù)控制語言于一體的關(guān)系數(shù)據(jù)語言。我們的重點是在于學習SQL語言。
2.3 關(guān)系的完整性
關(guān)系模型中有三類完整性約束:實體完整性、參照完整性和用戶定義的完整性
2.3.1 實體完整性
實體完整性規(guī)則:如果屬性A是基本關(guān)系R的主屬性(主鍵),則A不能取空值。比如學生(學號、姓名、專業(yè)號、班級號)這個表中學號為主碼,則學號不可為空。
規(guī)則說明如下:
- 實體完整性規(guī)則是針對基本關(guān)系而言的,一個基本表通常對應(yīng)現(xiàn)實世界的一個實體集合(比如學生表集合對應(yīng)現(xiàn)實中的所有學生)
- 現(xiàn)實世界中的實體是可以區(qū)分的,也就是他們是具有某種唯一的標識的,錄入每個學生都是獨立的個體。相應(yīng)的,關(guān)系模型中以主碼為唯一性標識。
- 因此主碼中的屬性不能取空值,主碼為空意味著該實體無法被唯一的標識,也就是該實體是無法被區(qū)分的。
也就是在學生表中,為了區(qū)分學生,必須要求作為主鍵的學號不能為空,如果學號為空,那么一旦出現(xiàn)重名的學生,就會無法區(qū)分兩個學生,從而使得關(guān)系數(shù)據(jù)庫出現(xiàn)邏輯錯誤??傊?,實體完整性要求主鍵不能取空值。
2.3.2 參照完整性
現(xiàn)實世界之中實體之間往往存在某種聯(lián)系,在關(guān)系模型中實體和實體之間的聯(lián)系也是用關(guān)系來描述的。比如學生的班級號和班級表中的班級號是有聯(lián)系的。因此定義了一種參考關(guān)系來說明實體和實體之間的聯(lián)系,先看如下例子
比如有如下兩個表:
學生(學號、姓名、班級號、專業(yè)號)
專業(yè)(專業(yè)號、專業(yè)名)
那么學生表的專業(yè)號信息均來自于專業(yè)表,那么學生表中就不可以出現(xiàn)專業(yè)表中不存在的專業(yè)。
定義:設(shè)F是基本關(guān)系R的一個或一組屬性,但是不是R的主碼,K是基本關(guān)系S的主碼。如果F和K相對應(yīng),則稱F是R的外碼(Foreign Key),并且稱R為參照關(guān)系,S為被參照關(guān)系或目標關(guān)系。
參照完整性規(guī)則是定義外碼和主碼之間的引用關(guān)系:
若屬性或者屬性組F是基本關(guān)系R的外碼,他和基本關(guān)系S的主碼K相對應(yīng),則對于R中每個元組在F上的只必須:
- 或者取空值(F中的每個屬性值都是空值)
- 或者等于S中某個元組的主碼值
回到剛才的兩個表,其中學生表中的專業(yè)號和專業(yè)表中的專業(yè)號之間有外鍵關(guān)系:
學生(學號、姓名、班級號、專業(yè)號)
專業(yè)(專業(yè)號、專業(yè)名)
學生表中的“專業(yè)號”屬性是參照專業(yè)表中的“專業(yè)號”的,那么可以有兩種情況:
- 空值,表示還沒有給學生分配專業(yè)
- 非空,但是值必須是專業(yè)表中存在的值
也就是不可以出現(xiàn)不存在的專業(yè)號
2.3.3 用戶定義的完整性
用戶定義的完整性是針對某一具體關(guān)系數(shù)據(jù)庫的約束條件,反應(yīng)某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足語義要求。比如說規(guī)定學生成績不可以有負數(shù)等等。在很早之前的關(guān)系數(shù)據(jù)庫管理系統(tǒng)是沒有提供定義和檢驗這些完整性的功能,所有都需要應(yīng)用程序編寫者負責,麻煩而且安全性不夠高。
2.4 關(guān)系代數(shù)
關(guān)系代數(shù)是一種抽象的查詢語言,他用對關(guān)系的運算來表達查詢。關(guān)系代數(shù)的運算可以分為傳統(tǒng)集合運算和專門的關(guān)系運算兩種類型。其中傳統(tǒng)的集合運算將關(guān)系看成元組的集合,其運算是從行角度進行的;而專門電費集合關(guān)系運算不僅涉及行,而且涉及列。
2.4.1 傳統(tǒng)集合運算
傳統(tǒng)集合運算是二目運算,包含并、交、差、笛卡爾積四種。我們設(shè)計兩個表R和S
- 并集(Union)
并集使用 ∪ 表示,其中 (R ∪ S) 表示 R 和 S 的并集,見圖c。并集運算是將兩個集合中出現(xiàn)的行組成一張新表,由屬于 R 或?qū)儆?S 的行組成。 - 交集(intersection)
交集使用 ∩ 標識,其中R ∩ S 表示 R 和 S 的交集,見圖d。交集運算是將兩個集合中的公共行組合成一張新表,由既屬于 R 又屬于 S 的行組成。 - 差(expect)
差集使用 ? 表示,其中 R ? S 表示 R 和 S 的差,見圖e。差運算是提取屬于 R 但不屬于 S 的行。 - 笛卡爾積(cartesian product)
R × S 表示 R 和 S 的笛卡爾積,如圖f所示,R 和 S 的笛卡爾積是一個 n+m 列的元素的集合。元素的前 n 列是關(guān)系 R 的一個元組,后 m 列是關(guān)系 S 的一個元組。
2.4.2 專門的關(guān)系運算
專門關(guān)系運算包括選擇、投影、連接、除運算。
1.選擇(Selection)
選擇又稱為限制,在關(guān)系R中選擇滿足給定條件的元組。比如說查詢學生表中年齡大于20的學生
2.投影(Projection)
關(guān)系R上的投影上是從R中選擇若干屬性列組成新關(guān)系。比如在學生(學號,姓名,班級,專業(yè))這個關(guān)系中,選擇學號和姓名兩列組成新關(guān)系。文章來源:http://www.zghlxwxcb.cn/news/detail-748844.html
3.連接(Join)
連接是從兩個關(guān)系的笛卡爾積中選取屬性之間滿足一定條件的元組。連接分為等值連接、非等值連接和自然連接,其區(qū)別可以看下圖,下圖是對R中的B列和S中的B列進行等值、非等值和自然連接。其中:文章來源地址http://www.zghlxwxcb.cn/news/detail-748844.html
- 等值連接會從關(guān)系R和S的廣義笛卡爾積中選取A、B屬性值相等的元組。
- 非等值連接則可以使用大于或等于進行連接。
-
自然連接是一種特殊的等值連接,他要求兩個關(guān)系中進行比較的屬性必須是同名的屬性組,并且在結(jié)果中將重復的屬性列去掉。
兩個關(guān)系R和S進行自然連接的時候,選擇兩個關(guān)系在公共屬性上等值的元組構(gòu)成新的關(guān)系。此時關(guān)系R中某些元組可能在S中不存在公共屬性上相等的元組,從而造成R中這些元組被舍棄了,同樣地,S中某些元組也會被舍棄。這些被舍棄的數(shù)組稱為懸浮數(shù)組。
如果把懸浮數(shù)組也保存在結(jié)果關(guān)系中,而在其他屬性上填上空值NULL,那么這種連接稱之為外連接。在進行R join S的時候,只保留左邊關(guān)系R中的懸浮數(shù)組稱為左外連接(left join),只保留右邊關(guān)系S中的懸浮數(shù)組稱為右外連接(right join)
左外連接=自然連接+左側(cè)表的失配元組(與空元組連接)
右外連接=自然連接+右側(cè)表的失配元組(與空元組連接)
全外連接=自然連接+兩側(cè)表的失配元組(與空元組連接) - 除運算(division)
設(shè)關(guān)系R除以關(guān)系S的結(jié)果為T,則T包含所有在R但是不在S中的屬性以及其值,而且T的元組和S的元組的所有集合都在R中。
到了這里,關(guān)于【數(shù)據(jù)庫概論】第二章 關(guān)系型數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!