一、關系模型的數據結構以及形式化定義
? ? ? ? 1.關系
? ? ? ? 域:一組具有相同數據結構的值的集合。
? ? ? ? 笛卡爾積:域上的一種集合運算。多個集合做笛卡爾積的結果是每個集合取一個元素組合得到的一個新的集合。
? ? ? ? 域的基數:一個域上允許的不同取值的個數。
? ? ? ? 關系:在關系模型D1、D2、D3、...的笛卡爾積是沒有實際語意的,只有它的某個真子集才有實際含義。
????????給定一組域D1,D2,D3,…,Dn,允許其中某些域是相同的,D1,D2,D3,…,Dn。的笛卡兒積D1×D2xD3×...Dn的子集稱為這組域上的關系,表示為R(D1,D2,…,Dn)。
????????這里R表示關系名,n是關系的目或度(degree)。
????????當n=1時,稱該關系為一元關系(unary?relation)或單元關系、單目關系。
????????當n=2時,稱該關系為二元關系(binary?relation)或二目關系。
????????關系中的每個元素是關系中的元組,通常用t來表示。
????????關系是笛卡兒積的有限子集,所以關系是一張二維表,表的每一行對應一個元組,表的每一列對應一個域。由于域可以相同,為了加以區分,必須對每一列起一個名字,稱為屬性。n目關系必有n個屬性。
????????關系可以有三種類型:基本關系 (通常又稱為基本表或基表)、查詢結果和視圖。其中,基本關系是實際存在的表,它是實際存儲數據的邏輯表示;查詢結果是查詢執行產生的結果對應的臨時表;視圖是由基本表或其他視圖導出的虛表,不存儲實際數據。
????????基本關系具有6條性質:①.列是同質的(homogeneous),即每一列中的分量是同一類型的數據,來自同一個域。②.不同的列可出自同一個域,稱其中的每一列為一個屬性,不同的屬性要給予不同的屬性名。③.列的順序無所謂,即列的次序可以任意交換。由于列順序是無關緊要的,因此在許多實際的關系數據庫產品中增加新屬性時,永遠是將其插至最后。④.任意兩個元組的碼不能取相同的值。⑤.行的順序無所謂,即行的次序可以任意交換。⑥.分量必須取原子值,即每一個分量都必須是不可分的數據項。
????????關系模型要求關系必須滿足一定的規范條件,其最基本的一條就是元組的每一個分量必須是一個不可分的數據項。
????????規范化的關系簡稱為范式(normal?form,?NF)
? ? ? ? 2.關系模式
? ? ? ? 關系模式是“型”,關系是“值”。
????????關系的描述稱為關系模式(relation?schema)。它可以形式化地表示為
????????R(U,D,DOM,F)
????????其中R為關系名,U為組成該關系的屬性的屬性名集合,D為U中屬性所來自的域,DOM為屬性向域的映像集合,F為屬性間數據依賴關系的集合。
????????關系模式通常簡記為
R(U)或者
R(A1,A2,…,An)
????????其中R為關系名,A,A,…,A,為屬性名;而域名及屬性向域的映像則常直接說明為屬性的類型、長度。
????????若關系模式中的某一個屬性或一組屬性的值能唯一地標識一個元組,而它的真子集不能唯一地標識一個元組,則稱該屬性或屬性組為候選碼(candidate?key)。
????????若一個關系有多個候選碼,則選定其中一個為主碼(primary?key),或稱主鍵。
????????候選碼的諸屬性稱為主屬性(prime?atnbute)。
????????不包含在任何候選碼中的屬性稱為非主屬性(non?prime?attribute)或非碼屬性(non-key?atribute)。
????????在最簡單的情況下,候選碼只包含一個屬性。在最極端的情況下,關系模式的所有屬性是這個關系模式的候選碼,稱為全碼(all-key)。
????????關系是關系模式在某一時刻的狀態或內容。
????????關系模式是靜態的、穩定的,而關系是動態的、隨時間不斷變化的,這是因為關系操作在不斷地更新著數據庫中的數據。
????????在實際工作中,人們常常把關系模式和關系都籠統地稱為關系。
? ? ? ? 3.關系數據庫
????????支持關系模型的數據庫系統稱為關系數據庫系統。在關系模型中,實體以及實體間的聯系都是用關系來表示的。
????????例如,“學生”實體、“課程”實體、學生與課程之間選修課程的多對多聯系都可以分別用一個關系模式來描述。
????????“學生”關系模式:Student(Sno,Sname,Ssex,Sbirthdate,Smajor),包括學號、姓名、性別、出生日期和主修專業等屬性。
????????“課程”關系模式:Course(Cno,Cname,Ccredit,Cpno),包括課程號、課程名、學分、先修課(直接先修課)等屬性。
????????“學生選課”關系模式:SC(Sno,Cno,Grade,Semester,Teachingclass),包括學號、課程號、成績、開課學期、教學班等屬性。
????????在一個關系數據庫中,某一時刻所有關系模式對應的關系的集合構成一個關系數據庫。
????????關系數據庫也有類型和值之分。
????????關系數據庫的類型就是關系數據庫中所有關系模式的集合,是對關系數據庫的描述,通常稱為關系數據庫模式。
????????關系數據庫的值是這些關系模式在某一時刻對應的關系的集合,通常將為關系數據庫。
? ? ? ? 4.關系模型的存儲結構
????????關系模型是關系數據的邏輯結構,用關系數據定義語言描述。例如關系數據庫標準語言SQL。
????????支持關系模型的關系數據庫管理系統(relational?database?management?system,?RDBMS)將以一定的組織方式存儲和管理數據,即設計和實現關系模型的存儲結構,這是關系數據庫管理系統的重要職責之一。
????????例如,有的關系數據庫管理系統中一個表對應一個操作系統文件,將物理數據組織的許多任務交給操作系統完成;有的關系數據庫管理系統則從操作系統那里申請若干個大的文件,自己劃分文件空間,組織表、索引等存儲結構并進行存儲管理。
二、關系操作
? ? ? ? 1.基本的關系操作
????????關系模型中常用的關系操作包括查詢(query)操作和更新操作兩大部分,而更新操作又可分為插入(insert)、刪除(delete)、修改(update)等操作。
? ? ? ? 關系的查詢表達能力很強,因此查詢操作是關系操作中最主要的部分。查詢操作又可進一步分為選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、差(difference)、交(intersection)、笛卡兒積等操作。其中選擇、投影、并、差、笛卡兒積是5種基本操作,其他操作可以用基本操作來定義和導出,就像乘法可以用加法來定義和導出一樣。?
????????關系操作的特點是集合操作方式,即操作的對象和結果都是集合。這種操作方式也稱為成組數據處理(set-at-a-time?processing),即一次一個集合的操作方式。相應地,層次模型和網狀模型的數據操作方式則為一次一個記錄(record-at-a-time)的方式。
????????這里強調一下,關系操作的所有輸入和輸出均是關系,包括關系操作的中間結果也是關系。
????????2.關系數據語言的分類
????????早期的關系操作能力通常用代數方式或邏輯方式來表示,分別稱為關系代數(relational?al-gebra)和關系演算(relational?calculus)。
????????關系代數用對關系的運算來表達查詢要求,關系演算則用謂詞來表達查詢要求。
????????關系演算又可按謂詞變元的基本對象是元組變量還是域變量分為元組關系演算和域關系演算。
????????一個關系數據語言能夠表示關系代數可以表示的查詢,稱為具有完備的表達能力,簡稱關系完備性。
????????此外,還有一種結構化查詢語言(structured?query?language,?SQL)。SQL不僅具有豐富的查詢功能,而且具有數據定義和數據控制功能,是集數據查詢語言(data?query?language,?DQL)、數據定義語言(DDL)、數據操縱語言(DML)和數據控制語言(data?control?language,?DCL)于一體的關系數據語言。它充分體現了關系數據語言的特點和優點,自20世紀80年代起成為關系數據庫的標準語言。
三、關系的完整性
????????關系模型的完整性約束是對關系的其種約束條件。也就是說關系的值隨著時間變化時應該滿足一些的約束條件,這些約束系件實際上是現實世界的要求。任何關系在任何時刻都要滿足這些語義約束。
????????關系模型中有三類完整性約束:實體完整性(cntiy?iteoity)、參照完整性(refecntial?inte
2)和用戶定義的完整性(ir-?Ihfind?imegrity)。
????????其中實體完整性和參照完整性是關系模型必級滿足的完整性約束,被稱作是關系的兩個不變性,應該由關系系統自動支持。用戶定義的完整性是應用領域需要遵循的約束條件,體現了具體領域中的語義約束。
? ? ? ? 1.實體完整性
????????關系數據庫中每個元組應該是可區分的,是唯一的。這樣的約束條件用實體完整性來保證。
????????實體完整性約束:若屬性(指一個或一組屬性)A是基本關系R的主屬性,則A不能取空值(null?value)。其中空值就是“不知道”或“不存在”或“無意義”的值。
????????對于實體完整性約束說明:
????????????????①.實體完整性約束是針對基本關系而言的。一個基本表通常對應現實世界的一個實體集。例如,“學生”關系對應學生的集合。
????????????????②.現實世界中的實體是可區分的,即它們具有某種唯一性標識。例如,每個學生都是獨立的個體,是不一樣的。
????????????????③.關系模型中以主碼作為唯一性標識。
????????????????④.主碼中的屬性不能取空值,如果取了空值,就說明存在某個不可標識的實體,即存在不可區分的實體。
? ? ? ? 2.參照完整性
????????現實世界中的實體之間往往存在某種聯系,在關系模型中實體及實體間的聯系都是用關系來描述的,這樣就自然存在著關系與關系間的引用。
????????定義? 設F是基本關系R的一個或一組屬性,但不是關系R的碼,Ks 是基本關系S的主碼。如果F與Ks相對應,則稱F是R的外碼(foreign key), 并稱基本關系R為參照關系(relerencing relation), 基本關系S為被參照關系( referenced relation) 或目標關系( targetrlation)。關系R和S不一定是不同的關系。顯然,目標關系S的主碼K。和參照關系R的外碼F必須定義在同一個(或同一組)域上。
? ? ? ? 外碼并不一定要與相應的主碼同名。
????????參照完整性約束就是定義外碼與主碼之間的引用規則。
? ? ? ? 參照完整性約束:若屬性( 或屬性組)F是基本關系R的外碼,它與基本關系S 的主碼K相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值 必須:
????????①或者取空值(F的每個屬性值均為空值)。
????????②或者等于S中某個元組的主碼值。
? ? ? ??在參照完整性約束中,R與S可以是同一個關系。
? ? ? ? 3.用戶定義完整性
????????任何關系數據庫系統都應該支持實體完整性和參照完整性,這是關系模型所要求的。除此
之外,不同的關系數據庫根據其應用場景不同,往往還需要一些特殊的約束條件。 用戶定義的
完整性就是針對某一具體關系數據庫的約束條件,它反映某一縣體應用所涉及的數據必須滿足
的語義要求。例如,某個屬性必須取唯一值,某個非主屬性不能取空值等。
????????關系模型應提供定義和檢驗這類完整性約束的機制,以便用統一的系統的方法處理它們,
而不需要由應用程序承擔這一功能。
四、關系代數
? ? ? ? 關系代數是一種抽象的查詢語言,它用對關系的運算來表達查詢。
? ? ? ? 運算對象、運算符、運算結果是運算的三大要素。
????????關系代數的運算對象是關系,運算結果亦為關系。關系代數用到的運算符包括兩類:集合運算符和專門的關系運算符。
? ? ??
????????