關系模型簡述
提出
- 最早由E.F.Cod在1970年提出
- 是從表( Table)及表的處理方式中抽象出來的,是在對傳統表及其操作進行
數學化嚴格定義基礎上,引入集合理論與邏輯學理論提出的
*是數據庫的三大經典數據模型之一,也是現在大多數商品化數據庫系統所
仍然使用的數據模型 - 標准的數據庫語言(SQL語言)是建立在關系模型基礎之上的,數據庫領域
的眾多理論也都是建立在關系模型基礎之上的
研究內容
- 形象地說,一個關系( relation)就是一個 Table
- 關系模型就是處理 Tablel的,它由三個部分組成
- 描述DB各種數據的基本結構形式( Table/ Relation
- 描述 Table與 Table之間所可能發生的各種操作(關系運算)
- 描述這些操作所應遵循的約束條件(完整性約束)
就是要學習: Table1如何描述,有哪些操作、結果是什么、有哪些約束等?
三要素
- 基本結構:Realtion/Table
- 基本操作:Relation Operator
- 完整性約束:實體完整性,參照完整性和用戶自定義完整性
關系模型與數據庫語言的關系
- 關系運算:關系代數和關系演算;關系演算:元組演算和與域演算.
- 關系代數示例:
- 元組演算示例:
- 域演算示例:
關系的定義
表的基本要素構成
- 列的取值范圍"域(Domain)"
- 一組值的集合,這組值具有相同的數據類型
- 如整數的集合、字符串的集合、全體學生的集合
- 再如,由8位數字組成的數字串的集合,由0到100組成的整數集合
- 集合中元素的個數稱為域的基數( Cardinality)
- 元組及所有可能的元組:笛卡兒積
- 一組域D1×D2×...×Dn ={(d1,d2,...dn|di∈Di,i=1,...,n)}
- 笛卡爾積的每個元素(d1,d2,...dn稱作一個n-元組(n-tuple)
- 元組(d1,d2,...dn)的每一個值di叫做一個分量(component)
- 元組(d1,d2,...dn)是從每一個域任取一個值的一種組合,笛卡爾積是所有這種可能組合的集合,即:笛卡爾積是由n個域形成的所有可能的n-元組的集合
- 若Di的基數為mi,則笛卡爾積的基數,即元組的個數為
m1</sub.× m2 ×...× mn
關系
- 一組域D1,D2,...,Dn的笛卡爾積的子集
- 笛卡爾積中具有某一方面意義的那些元組被稱作一個關系( Relation)
- 由於關系的不同列可能來自同一個域,為區分,需要為每一列起一個名
字,該名字即為屬性名。
- 關系模式:
關系模式與關系
- 同一關系模式下,可有很多的關系
- 關系模式是關系的結構,關系是關系模式在某一時刻的數據
- 關系模式是穩定的;而關系是某一時刻的值,是隨時間可能變化的
關系特性
列
列是同質:即每一列中的分量來自同一域,是同一類型的數據
不同的列可來自同一個域,稱其中的每一列為一個屬性,不同的屬性要給予
不同的屬性名。
- 關系模式RA:D1,A2:D2,…An:Dn)中,A(=1,n)必須是不同的,而
D(=1,n)可以是相同的 - 例,我們定義一個域為 Person=所有男人、女人和兒童的集合={李基,張
鵬,王芳,劉玉,李健,張睿,張崢},則下述“家庭”關系的三個列將來自同
一個域 Person,因此需要不同的屬性名“丈夫”“妻子"“子女”以示區分
- 列位置互換性:區分哪一列是靠列名
- 行位置互換性:區分哪一行是靠某一或某幾列的值(關鍵字/鍵字/碼字)
關系是以內容(名字或值)來區分的,而不是屬性在關系的位置來區分 - 如下面兩個關系是完全相同的關系
元組
*理論上,關系的任意兩個元組不能完全相同。(集合的要求:集合內不能有
相同的兩個元素);現實應用中,表( Table)可能並不完全違守此特性。
- 元組相同是指兩個元組的每個分量都相同。
屬性
- 屬性不可再分性:有被稱為關系第一范式
- 主屬性與非主屬性
- 包含在任何一個候選碼中的屬性被稱作主屬性,而其他屬性被稱作非主屬性
- 如“選課”中的S#,C#為主屬性,而 Sname, Cname, Grade!則為非
主屬性 - 最簡單的,候選碼只包含一個屬性
- 最極端的,所有屬性構成這個關系的候選碼,稱為全碼(AlI-Key).
- 比如:關系“教師授課”(T#,C#)中的候選碼(「T,C護就是全碼。
鍵
- 候選碼/候選鍵
- 關系中的一個屬性組,其值能唯一標識一個元組,若從該屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。
- 例如:“學生(S, Sname,Sage, Sclass)”,S#就是一個候選碼,在此關系中,任何兩個元組的S#是一定不同的,而這兩個元組的 Sname,Sage, Sclass都可能相同(同名、同齡、同班),所以S#是候選碼。
- 再如:“選課(S#,C, Sname, Cname, Grade)”,(S#,C胡)聯合起來是一
個候選碼
- 主碼/主鍵
*當有多個候選碼時,可以選定一個作為主碼。
*DBMS以主碼為主要線索管理關系中的各個元組。
*例如可選定屬性S作為“學生”表的主碼,也可以選定屬性組( Sname,Address)作為“學生”表的主碼。選定 EMPID為 Employee的主碼。 - 外碼/外鍵
- 關系R中的一個屬性組,它不是R的候選碼,但它與另一個關系S的候選碼相對應,則稱這個屬性組為R的外碼或外鍵。
- 例如“合同”關系中的客戶號不是候選碼,但卻是外碼。因它與“客戶”關系中的候選碼“客戶號”相對應。
- 兩個關系通常是靠外碼連接起來的。
小結
關系完整性
實體完整性
- 關系的主碼中的屬性值不能為空值;
- 空值:不知道或無意義的值;
- 意義;關系中的元組對應到現實世界相互之間可區分的一個個個體,這些個體是通過主碼來唯一標識的;若主碼為空,則出現不可標識的個體,這是不容許的。
參照完整性
用戶自定義完整性
- 用戶針對具體的應用環境定義的完整性約束條件
- 如S#要求是10位整數,其中前四位為年度,當前年度與他們的
差必須在4以內 - 再如:
DBMS對關系完整性的支持
- 實體完整性和參照完整性由DBMS系統自動支持
- DBMS系統通常提供了如下機制:
- (1)它使用戶可以自行定義有關的完整性約束條件
- (2)當有更新操作發生時,DBMS將自動按照完整性約束條件檢驗更新操作的正確性,即是否符合用戶自定義的完整性