程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 數據庫-關系數據庫

數據庫-關系數據庫

編輯:DB2教程

數據庫-關系數據庫


關系數據庫

提出關系模型的是美國IBM公司的E.F.Codd (Edgar Frank Codd,1923-2003) , “關系數據庫之父”
1970年提出關系數據模型
E.F.Codd, “A Relational Model of Data for Large 
Shared Data Banks”, 《Communication of the 
ACM》,1970
E.F.Codd 1923年出生在英格蘭多塞特郡波特蘭市的一個大家庭中。他曾經就讀於牛津大學,主修數學,獲得學士與碩士學位。第二次世界大戰期間曾在皇家空軍服役。第二次世界大戰後,動身前往美國成為IBM的一名程序員。
在40歲的時候,重返校園,在密歇根大學主修計算機與通信專業,於1965年獲得博士學位。
因為在數據庫管理系統的理論和實踐方面的傑出貢獻於1981年獲圖靈獎。
 1984年從IBM退休, 於2003年謝世。

關系

單一的數據結構—-關系
現實世界的實體以及實體間的各種聯系均用關系來表示
邏輯結構—-二維表
從用戶角度,關系模型中數據的邏輯結構是一張二維表
關系模型建立在集合代數的基礎上,這裡從集合論的角度給出關系數據結構的形式化定義

⒈ 域(Domain)

域是一組具有相同數據類型的值的集合。例:
整數
實數
介於某個取值范圍的整數
長度小於25字節的字符串集合
{‘男’,‘女’}
……………..
笛卡爾積(Cartesian Product)
笛卡爾積
   給定一組域D1,D2,…,Dn,這些域中可以有相同的。
    D1,D2,…,Dn的笛卡爾積為:
    D1×D2×…×Dn =
             {(d1,d2,…,dn)|di?Di,i=1,2,…,n}
所有域的所有取值的一個組合
 元組(Tuple)
笛卡爾積中每一個元素(d1,d2,…,dn)叫作一個n元組(n-tuple)或簡稱元組(Tuple)
(張清玫,計算機專業,李勇)、(張清玫,計算機專業,劉晨)等都是元組 

分量(Component)
笛卡爾積元素(d1,d2,…,dn)中的每一個值di叫作一個分量
張清玫、計算機專業、李勇、劉晨等都是分量 
基數(Cardinal number)

笛卡爾積的表示方法
笛卡爾積可表示為一個二維表
表中的每行對應一個元組,表中的每列對應一個域
關系(Relation)
1) 關系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的
關系,表示為

         R(D1,D2,…,Dn)

R:關系名
n:關系的元,或目或度(Degree)
2) 元組
關系中的每個元素是關系中的元組,通常用t表示。
3) 單元關系與二元關系
當n=1時,稱該關系為單元關系(Unary relation)
                               或一元關系                             
當n=2時,稱該關系為二元關系(Binary relation)
4) 關系的表示
關系也是一個二維表,表的每行對應一個元組,表的每
列對應一個域

5)屬性
關系中不同列可以對應相同的域
為了加以區分,必須對每列起一個名字,稱為屬性(Attribute)
n目(元)關系必有n個屬性
6) 碼
候選碼(Candidate key)
    若關系中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼 (教材上給出的此定義是否嚴謹?)
    簡單的情況:候選碼只包含一個屬性
全碼(All-key)
    最極端的情況:關系模式的所有屬性組是這個關系模式的候選碼,稱為全碼(All-key)
6) 碼
候選碼(Candidate key)
    若關系中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼 (教材上給出的此定義是否嚴謹?)
    簡單的情況:候選碼只包含一個屬性
全碼(All-key)
    最極端的情況:關系模式的所有屬性組是這個關系模式的候選碼,稱為全碼(All-key)
D1,D2,…,Dn的笛卡爾積的某個子集才有實際含義
例:表2.1 的笛卡爾積沒有實際意義
      取出有實際意義的元組來構造關系
關系:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
假設:導師與專業:1:1,   導師與研究生:1:n
主碼:POSTGRADUATE(假設研究生不會重名) 
      SAP關系可以包含三個元組
     { (張清玫,計算機專業,李勇),
    (張清玫,計算機專業,劉晨),
    (劉逸,信息專業,王敏)  }
7) 三類關系
基本關系(基本表或基表)
實際存在的表,是實際存儲數據的邏輯表示
查詢表
查詢結果對應的表
視圖表
由基本表或其他視圖表導出的表,是虛表,不對
應實際存儲的數據
8)基本關系的性質
① 列是同質的(Homogeneous)
② 不同的列可出自同一個域
其中的每一列稱為一個屬性
不同的屬性要給予不同的屬性名
③ 列的順序無所謂,列的次序可以任意交換
④ 任意兩個元組的候選碼不能相同
⑤ 行的順序無所謂,行的次序可以任意交換

關系模式

關系模式(Relation Schema)是型
關系是值
關系模式是對關系的描述
元組集合的結構
屬性構成
屬性來自的域
屬性與域之間的映象關系
元組語義以及完整性約束條件
屬性間的數據依賴關系集合

關系模式可以形式化地表示為:
R(U,D,DOM,F)
R 關系名
U 組成該關系的屬性名集合
D 屬性組U中屬性所來自的域
DOM 屬性向域的映象集合
F 屬性間的數據依賴關系集合
例:
導師和研究生出自同一個域——人,
取不同的屬性名,並在模式中定義屬性向域
的映象,即說明它們分別出自哪個域:

   DOM(SUPERVISOR-PERSON)
= DOM(POSTGRADUATE-PERSON)
=PERSON

關系模式通常可以簡記為
R (U) 或 R (A1,A2,…,An)
R: 關系名
A1,A2,…,An : 屬性名
注:域名及屬性向域的映象常常直接說明為
屬性的類型、長度

關系數據結構

關系數據庫的型: 關系數據庫模式
對關系數據庫的描述。
關系數據庫模式包括
若干域的定義
在這些域上定義的若干關系模式
關系數據庫的值: 關系模式在某一時刻對應的關系的集合,簡稱為關系數據庫
常用的關系操作
查詢:選擇、投影、連接、除、並、交、差、笛卡爾積
數據更新:插入、刪除、修改
查詢的表達能力是其中最主要的部分
選擇、投影、並、差、笛卡爾積是5種基本操作,其他操作可以由基本操作導出
關系操作的特點
集合操作方式:操作的對象和結果都是集合,一次一集合的方式
關系代數語言
用對關系的運算來表達查詢要求
代表:ISBL
關系演算語言:用謂詞來表達查詢要求
元組關系演算語言
謂詞變元的基本對象是元組變量
代表:APLHA, QUEL
域關系演算語言
謂詞變元的基本對象是域變量
代表:QBE
具有關系代數和關系演算雙重特點的語言
代表:SQL(Structured Query Language)

關系的三類完整性約束

實體完整性和參照完整性:
關系模型必須滿足的完整性約束條件
稱為關系的兩個不變性,應該由關系系統自動支持
用戶定義的完整性:
應用領域需要遵循的約束條件,體現了具體領域中的語義約束

實體完整性

規則2.1 實體完整性規則(Entity Integrity)
若屬性A是基本關系R的主屬性,則屬性A不能取空值
例:
SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
POSTGRADUATE:
主碼(假設研究生不會重名)
不能取空值

實體完整性規則的說明
(1)實體完整性規則是針對基本關系而言的。一個基本表通常對應現實 世界的一個實體集。
(2) 現實世界中的實體是可區分的,即它們具有某種唯一性標識。
(3) 關系模型中以主碼作為唯一性標識。
(4) 主碼中的屬性即主屬性不能取空值。

參照完整性

例2 學生、課程、學生與課程之間的多對多聯系
學生(學號,姓名,性別,專業號,年齡)
課程(課程號,課程名,學分)
選修(學號,課程號,成績)
設F是基本關系R的一個或一組屬性,但不是關系R的碼。如果F與基本關系S的主碼Ks相對應,則稱F是基本關系R的外碼
基本關系R稱為參照關系(Referencing Relation)
基本關系S稱為被參照關系(Referenced Relation)
或目標關系(Target Relation)
參照完整性規則
若屬性(或屬性組)F是基本關系R的外碼它與基本關系S的主碼Ks相對應(基本關系R和S不一定是不同的關系),則對於R中每個元組在F上的值必須為:
或者取空值(F的每個屬性值均為空值)
或者等於S中某個元組的主碼值


[例1]:
學生關系中每個元組的“專業號”屬性只取兩類值:
(1)空值,表示尚未給該學生分配專業
(2)非空值,這時該值必須是專業關系中某個元組的“專業號”值,表示該學生不可能分配一個不存在的專業
〔例2〕 :
選修(學號,課程號,成績)
“學號”和“課程號”可能的取值 :
 (1)選修關系中的主屬性,不能取空值
 (2)只能取相應被參照關系中已經存在的主碼值
〔例3〕:
學生(學號,姓名,性別,專業號,年齡,班長)
“班長”屬性值可以取兩類值:
(1)空值,表示該學生所在班級尚未選出班長
(2)非空值,該值必須是本關系中某個元組的學號值

用戶定義的完整性

針對某一具體關系數據庫的約束條件,反映某一具體應用所涉及的數據必須滿足的語義要求
關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統的方法處理它們,而不要由應用程序承擔這一功能

例:
     課程(課程號,課程名,學分)
“課程號”屬性必須取唯一值
非主屬性“課程名”也不能取空值
“學分”屬性只能取值{1,2,3,4}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved