目錄
第二章 關係模型介紹
2.1 關係數據庫的結構
表(table)、關係(relation)、元組(tuple)、屬性(attribute)、行、列。
表中的一行代表了一組值之間的關係(relation)。關係常用來指代表。
元組(tuple)就用來指代行。
屬性(attribute)就用來指代列。
關係實例(relation instance):一個關係的特定實例,就是所包含的一組特定的行。
域(domain):每個屬性所允許的取值的集合,稱爲該屬性的域。
原子的(atomic):如果域中元素被看做是不可再分的單元,則域是原子的。
空值(null):是一種特殊的值,表示值未知或者不存在。
2.2 數據庫模式
數據庫模式(database schema):數據庫的邏輯設計
數據庫實例(database instance):給定時刻數據庫中數據的一個快照
關係(relation)的概念對應於程序設計語言中變量的概念
關係模式(relation schema)的概念對應程序設計語言中類型定義的概念。一般來說,關係模式由屬性序列和屬性對應的域組成。
關係實例(relation schema)的概念對應於程序設計語言中變量的值的概念。
2.3 碼
一個元組的屬性值必須是能夠唯一區分元組的,即:一個關係中沒有兩個元組在所有屬性上的取值都相同。
超碼(superkey):是一個或多個屬性的集合,這些屬性的組合可以唯一標識一個元組。超碼的任意超集也是超碼。
候選碼(candidate key):如果該超碼的任意真子集都不能成爲超碼,那麼該集合就是候選碼。
主碼(primary key):代表被數據庫設計者選中的,主要用來在一個關係中區分不同元組的候選碼。
- 主碼應該選擇那些值從不或者很少發生變化的屬性。
外碼(foreign key):一個關係模式(r1)可能在它的屬性中包括另一個關係模式(r2)的主碼。這個屬性在關係模式r1上被稱作參照r2的外碼。關係r1也被稱作外碼依賴的參照關係(referencing relation),r2叫做外碼的被參照關係(referenced relation)。
參照完整性約束(referential integrity constraint):在參照關係中任意元組在特定屬性上的取值必然等於被參照關係中某個元組在特定屬性上的取值。
2.4 模式圖
一個含有主碼和外碼約束的數據庫模式可以用模式圖(schema diagram)表示。
每一個關係用一個矩形來表示;關係的名字在矩形上方;矩形內部列出各屬性。
主碼屬性用下劃線標註。外碼依賴用從參照關係的外碼屬性到被參照關係的主碼屬性之間的箭頭來表示。
2. 5 關係查詢語言
查詢語言(query language):用戶從數據庫中請求獲取信息的語言。
查詢語言可分爲:
- 過程化語言(procedural language):用戶指導系統對數據庫執行一系列操作以計算所需結果。
- 非過程化語言(non-procedural language):用戶只需要描述所需信息,而不用給出獲取該信息的具體過程。、
實際使用的查詢語言,既包括過程化語言,也包括非過程化語言。
2. 6 關係運算
關係運算的結果總是單個的關係。
常用的關係運算有:
- 謂詞運算:從單個關係(如instructor)中選出滿足一些特定爲此(如salary>85000美元)的特殊元組。
- 投影運算:從一個關係中選出特定的列
- 連接運算:把分別來自兩個關係的元組對合併成單個元組
- 自然連接:兩個關係的自然連接運算所匹配的元組在兩個關係共有的所有屬性上取值相同。
- 笛卡爾積:其結果包括來自兩個關係元組的所有對,無論他們的屬性值是否匹配
- 集合運算:並集,交集,集合差
總結
- 關係數據模型(relational data model)建立在表的集合的基礎上。數據庫系統的用戶可以對這些表進行查詢、插入、刪除以及更新炒作。
- 關係的模式(schema)是指它的邏輯涉及,而關係的實例(instance)是指它在特定時刻的內容。關係的模式包括:屬性、屬性的類型和關係上的約束,如:主碼和外碼。
- 關係的超碼(superkey)是一個或多個屬性的集合,這些屬性上的取值保證可以唯一識別出關系的元組;候選碼是一個最小的超碼,就是說它是一組構成超碼的屬性集,但這組屬性的任意子集都不是超碼。數據庫設計者可以選擇一個關係的候選碼作爲主碼(primary key)。
- 在參照關係中的外碼(foreign key)是這樣的一個屬性集合:對於參照關係中的每個元組來說,它在外碼屬性上的取值肯定等於被參照關係中某個元組在主碼上的取值。
- 模式圖(schema diagram):是數據庫中模式的圖形化表示,它顯示了數據庫中的關係,關係的屬性,主碼和外碼。
- 關係查詢語言(relational query language):定義了一組運算集,這些運算可以作用在表上,並輸出表作爲結果。這些運算可以組合成表達式,表達所需的查詢。
- 關係代數(relational algebra)提供了一組運算,它們以一個或多個關係爲輸入,返回一個關係作爲輸出。SQL是基於關係代數的,但增加了一些有用的語法特徵。
習題
- 2.14 列出在數據庫中引入空值的兩個原因。
使用空值的原因是因爲在現實生活中,數據庫屬性的值可能是未知或者不存在。例如:地址可能是不存在,或者不知道新的地址。
- 2.15 討論過程化和非過程化語言的相對優點。
非過程化語言能夠簡化查詢語句,用戶不用擔心查詢如何執行。
過程化語言需要用戶能夠指定查詢方式和期望查詢結果,需要費更大的精力。