發明歷史
網狀資料庫和
層次資料庫已經很好地解決了數據的集中和共享問題,但是在
數據獨立性和抽象級別上仍有很大欠缺。用戶在對這兩種
資料庫進行存取時,仍然需要明確數據的
存儲結構,指出存取路徑。而後來出現的
關係資料庫較好地解決了這些問題。關係資料庫理論出現於60年代末到70年代初。
關係數據模型提供了關係操作的特點和功能要求,但不對
DBMS的語言給出具體的語法要求。對關係資料庫的操作是高度非過程化的,用戶不需要指出特殊的存取路徑,路徑的選擇由
DBMS的最佳化機制來完成。
1970年,
IBM的研究員E.F.Codd博士發表《大型共享數據銀行的關係模型》一文提出了關係模型的概念,論述了
範式理論和衡量
關係系統的12條標準,如定義了某些關係代數運算,研究了數據的函式相關,定義了關係的第三範式,從而開創了資料庫的關係方法和數據規範化理論的研究,他為此獲得了1981年的圖靈獎。
後來Codd又陸續發表多篇文章,奠定了關係資料庫的基礎。關係模型有嚴格的數學基礎,抽象級別比較高,而且簡單清晰,便於理解和使用。但是當時也有人認為關係模型是理想化的數據模型,用來實現
DBMS是不現實的,尤其擔心關係資料庫的性能難以接受,更有人視其為當時正在進行中的網狀資料庫規範化工作的嚴重威脅。為了促進對問題的理解,1974年
ACM牽頭組織了一次研討會,會上開展了一場分別以Codd和Bachman為首的支持和反對關係資料庫兩派之間的辯論。這次著名的辯論推動了關係資料庫的發展,使其最終成為現代資料庫產品的主流。
此後許多人把研究方向轉到關係方法上,陸續出現了關係資料庫系統。
定義
關係數據模型是以
集合論中的關係概念為基礎發展起來的。關係模型中無論是實體還是實體間的聯繫均由單一的
結構類型——關係來表示。在實際的關係資料庫中的關係也稱表。一個關係資料庫就是由若干個表組成。
關係模型是指用二維表的形式表示實體和實體間聯繫的數據模型。
基本術語
關係模型的基本概念和基本術語共有十三個,它們分別是:
(1)關係(Relation):一個關係對應著一個二維表,二維表就是關係名。
(2)元組(Tuple):在二維表中的一行,稱為一個元組。
(3)屬性(Attribute):在二維表中的列,稱為屬性。屬性的個數稱為關係的元或度。列的值稱為屬性值;
(4)(值)域(Domain):屬性值的取值範圍為值域。
(5)分量:每一行對應的列的屬性值,即元組中的一個屬性值。
(6)關係模式:在二維表中的行定義,即對關係的描述稱為關係模式。一般表示為(屬性1,屬性2,......,屬性n),如老師的關係模型可以表示為教師(教師號,姓名,性別,年齡,職稱,所在系)。
(7)鍵(碼):如果在一個關係中存在唯一標識一個實體的一個屬性或屬性集稱為實體的鍵,即使得在該關係的任何一個關係狀態中的兩個元組,在該屬性上的值的組合都不同。
(8)候選鍵(候選碼):若關係中的某一屬性的值能唯一標識一個元組如果在關係的一個鍵中不能移去任何一個屬性,否則它就不是這個關係的鍵,則稱這個被指定的候選鍵為該關係的候選鍵或者候選碼。
例如下列學生表中“學號”或“圖書證號”都能唯一標識一個元組,則“學號”和“圖書證號”都能唯一地標識一個元組,則“學號”和“圖書證號”都可作為學生關係的候選鍵。
學號 | 姓名 | 性別 | 年齡 | 圖書證號 | 所在系 |
S3001 | 張明 | 男 | 22 | B20050101 | 外語 |
S3002 | 李靜 | 女 | 21 | B20050102 | 外語 |
S4001 | 趙麗 | 女 | 21 | B20050301 | 管理 |
而在選課表中,只有屬性組“學號”和“課程號”才能唯一地標識一個元組,則候選鍵為(學號,課程號)。
學號 | 課程號 |
S3001 | C1 |
S3001 | C2 |
S3002 | C1 |
S4001 | C3 |
(8)主鍵(主碼):在一個關係的若干候選鍵中指定一個用來唯一標識該關係的元組,則稱這個被指定的候選鍵稱為主關鍵字,或簡稱為主鍵、關鍵字、主碼。每一個關係都有並且只有一主鍵,通常用較小的屬性組合作為主鍵。例如學生表,選定“學號”作為數據操作的依據,則“學號”為主鍵。而在選課表中,主鍵為(學號,課程號)。
(9)主屬性和非主屬性:關係中包含在任何一個候選鍵中的屬性稱為主屬性,不包含在任何一個候選鍵中的屬性為非主屬性。
(10)全鍵或者全碼:一個關係模式中的所有屬性的集合。
(11)外鍵或者外碼:關係中的某個屬性雖然不是這個關係的主鍵,或者只是主鍵的,但它卻是另外一個關係的主鍵時,則稱之為外鍵或者外碼。
(12)超鍵或者超碼:如果在關係的一個鍵中移去某個屬性,它仍然是這個關係的鍵,則稱這樣的鍵為關係的超鍵或者超碼。
(13)參照關係與被參照關係:是指以外鍵相互聯繫的兩個關係,可以相互轉化。
二維表格
關係模型中,欄位稱為屬性,欄位值稱為屬性值,記錄類型稱為
關係模型。關係模式名是R。記錄稱為元組,元組的集合稱為關係或實例。一般用大寫字母A、B、C、……表示單個屬性,用小寫字母表示
屬性值。關係中屬性的個數稱為“
元數”,元組的個數稱為“
基數”。例子的關係
元數為5,基數為2。有時也稱關係為表格,元組為行,屬性為列。
鍵
鍵,又稱碼,由一個或幾個屬性組成,分為以下幾種:
a.超鍵:如果在關係的一個鍵中移除某個屬性,它仍然是這個關係的鍵,則這樣的鍵成為超鍵。
b.候選鍵:不含多餘屬性的超鍵稱為候選鍵。即在候選鍵中,若要再刪除屬性,就不是超鍵了。
c.主鍵:用戶選作元組標識的一個候選鍵稱為主鍵。一般情況下,鍵指主鍵。
關係的定義和性質
關係是個元數為K(K>=1)的元組的集合。
關係是一種規範化的表格,他有以下限制:
b.關係中不允許出現相同的元組。
c.關係中不考慮元組之間的順序。
d. 元組中屬性也是無序的。
關係模式、關係子模式和存儲模式
關係模型中,概念模式是關係模式的集合,外模式是關係子模式的集合,內模式是
存儲模式的集合。
1.關係模式
關係模式實際就是記錄類型,包括:模式名、屬性名、值
域名及模式的主鍵。他不涉及物理存儲方面的描述,只是對數據特性的描述。
2.關係子模式
子模式是用戶所用到的那部分數據的描述。除了指出用戶的數據外,還應指出模式和子模式之間的對應性。
3. 存儲模式
關係存儲時的基本組織方式是檔案,元組是檔案中的記錄。由於關係模式有鍵,因此存儲一個關係能用散列方法或
索引方法實現。
關係模型的三類完整性規則
這條規則
需求關係中元組在組成主鍵的屬性上不能有空值。如有空值,那么主鍵值就起不了唯一標識元組的作用。
如果屬性集K是關係模式R1的主鍵,K也是關係模式R2的外鍵,那么在R2的關係中,K的取值只允許有兩種可能,或為空值,或等於R1關係中某個主鍵值。
使用時應注意:
a.外鍵和相對應的主鍵能不同名,只要定義在相同的值域上即可。
b.R1和R2也能是同一個關係模式,表示了屬性之間的聯繫。
c. 外鍵值是否允許為空,應視具體問題而定。
3.用戶定義的完整性規則
這是針對具體數據的約束條件,由套用環境而定。
關係模型的形式定義
1.關係模型的基本數據結構就是關係。
3.關係模型的三類完整性規則。
二、關係代數
關係資料庫的
數據操作分為查詢和更新兩類。查詢語句用於各種檢索操作,更新操作用於插入、刪除和修改等操作。
關係查詢語言根據其理論基礎的不同分成兩大類:
1.關係代數語言:查詢操作是以集合操作為基礎運算的DML語言。
2.關係演算語言:查詢操作是以
謂詞演算為基礎運算的DML語言。
關係代數的五個基本運算
關係代數是以關係為運算
對象的一組高級運算的集合。關係定義為
元數相同的元組的集合。集合中的元素為元組,關係代數中的操作可分為兩類:
擴充的關係操作:投影,選擇,聯接和自然聯接,除。
1.並
設有兩個關係R和S具有相同的關係模式,R和S的並是由屬於R和S的元組構成的集合,記為R∪S。
2.差
設有兩個關係R和S具有相同的關係模式,R和S的差是由屬於R但不屬於S的元組構成的集合,記為R-S。
3.笛卡爾積
設關係R和S的
元數分別為r和s。定義R和S的笛卡爾積是個(r+s)元的元組集合,每個元組的前r個分量(
屬性值)來自R的一個元組,後s個分量來自S的一個元組,記為R×S。
若R有M個元組,S有n個元組,則R×S 有m×n個元組。
4.選擇
從關係中找出滿足給定條件的所有元組稱為選擇。其中的條件是以邏輯表達式給出的 ,該邏輯表達式的值為真的元組被選取。這是從行的角度進行的運算,即水平方向抽取元組。經過
選擇運算得到的結果能形成新的關係,其關係模式不變,但其中元組的數目小於或等於原來的關係中的元組的個數,他是原關係的一個子集。
記為: δF(R)≡{t?t屬於R∧F(t)=true}
5.投影
從關係中挑選若干
屬性組成的新的關係稱為投影。這是從列的角度進行運算。經過投影運算能得到一個新關係,其關係所包含的屬性個數往往比原關係少,或屬性的排列順序不同。如果新關係中包含重複元組,則要刪除重複元組。
記為:∏A(R)={t[A] ?t屬於R} A為R中的屬性列。
例如: ∏3,1(R)
關係代數的四個組合操作
1.交
關係R和S的交是由屬於R又屬於S的元組構成的集合,記為R∩S。R和S需求定義在相同的關係模式上。
R∩S≡ {t?t屬於R∧t屬於S},R和S的元數相同。
2.聯接
聯接有兩種:θ聯接和F聯接(θ是算術比較符,F是公式)。
⑴ θ聯接
θ聯接是從關係R和S的笛卡爾積中選取屬性值滿足某一θ操作的元組,記為:
R?×i θj?S,這裡i和j 分別是關係R和S中第 i個、第j個屬性的序號。
R?×i θj?S≡ δi θ (r+j)( R×S )
如果θ是等號“=”,該聯接操作稱為“等值聯接”。
⑵F聯接
F聯接操作是從關係R和S的笛卡爾積中選取屬性值滿足某一公式F的元組,記為:
R?×F?S,這裡的F是形為F1∧F2∧…∧Fn的公式,每一個f都是形為i θj的式子,而i和j 分別是關係R和S中第 i個、第j個屬性的序號。
3.自然聯接
兩個關係R和S的自然聯接用R?×?S表示。具體計算過程如下:
①計算R×S
②設R和S的公共屬性是A1,……,Ak,挑選R×S中滿足R .A1=S.A1,……,R.Ak=S.Ak的那些元組
③去掉S.A1,……, S.Ak的這些列。
如果兩個關係中沒有公共屬性,那么其自然聯接就轉化為笛卡爾積操作。
4.除法
給定關係R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中的Y和S中的Y能有不同的屬性名,但必須出自相同的域集。R和S的除運算得到一個新的關係P(X),P是R中滿足下列條件的元組在X屬性上的投影:元組在X上分量值x的象集YX包含S在Y上投影的集合。
關係代數表達式及其套用實例
在關係
代數運算中,把由五個基本操作經過有限次複合的式子稱為關係代數表達式。這種表達式的結果仍然是個關係。能使用關係代數表達式表示各種數據查詢操作。
例題:設教學庫中有三個關係:
學生關係S(S#,SNAME,AGE,SEX)
學習關係SC(S#,C#,GRADE)
課程關係C(C#,CNAME,TEACHER)
下面用關係代數表達式表達各個查詢語句
1.檢索學習課程號為C2的學生學號和成績。
2.檢索學習課程號為C2的學生學號和姓名。
3.檢索選修課程名為MATHS的學生學號和姓名。
4.檢索選修課程號為C2或C4的學生學號。
5.檢索至少選修課程號為C2或C4的學生學號。
6.檢索不學C2課的學生姓名有年齡。
7.檢索學習全部課程的學生姓名。
1. ∏S#,GRADE(δC#=‘C2’(SC))
或∏1,3(δ2=‘C2’
關係模式
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 屬性名,註:域名及屬性向域的
映象常常直接說明為屬性的類型、長度。
關係模型所具有的特點是:概念單一、
規範化、以二維表格表示。
簡介
關係模型是1970年由E.F.Codd提出的。
2.紮實的理論基礎。
b.關係模式設計理論
關係模型允許
設計者通過資料庫規範化的提煉,去建立一個
信息的一致性的模型。訪問計畫和其他實現與操作細節由
DBMS引擎來處理,而不應該反映在邏輯模型中。這與SQL DBMS普遍的實踐是對立的,在它們那裡性能調整經常需要改變邏輯模型。
基本的關係建造塊是
域或者叫
數據類型。
元組是
屬性的有序
多重集(multiset),屬性是域和值的有序對。關係變數(relvar)是域和名字的
有序對(序偶)的集合,它充當關係的
表頭(header)。
關係是元組的集合。儘管這些
關係概念是數學上的定義的,它們可以寬鬆的映射到傳統資料庫概念上。
表是關係的公認的可視表示;元組類似於
行的概念。
關係模型的基本原理是信息原理:所有
信息都表示為關係中的數據值。所以,關係變數在設計時刻是相互無關聯的;反而,設計者在多個關係變數中使用相同的
域,如果一個屬性依賴於另一個屬性,則通過
參照完整性來強制這種
依賴性。
優點
(1) 數據結構單一
關係模型中,不管是實體還是實體之間的聯繫,都用關係來表示,而關係都對應一張二維數據表,數據結構簡單、清晰。
構成關係的基本規範要求關係中每個屬性不可再分割,同時關係建立在具有堅實的理論基礎的嚴格
數學概念基礎上。
(3)概念簡單,操作方便
關係模型最大的優點就是簡單,用戶容易理解和掌握,一個關係就是一張二維表格,用戶只需用簡單的查詢語言就能對資料庫進行操作。
組成
關係數據結構
單一的數據結構——關係
現實世界的實體以及實體間的各種聯繫均用關係來表示,從用戶角度看,關係模型中數據的邏輯結構是一張二維表。
關係操作集合
常用的關係操作包括查詢操作和插入、刪除、修改操作兩大部分。其中查詢操作的表達能力最重要,包括:選擇、投影、連線、除、並、交、差等。
關係模型中的關係操作能力早期通常是用
代數方法或邏輯方法來表示,分別稱為關係代數和關係演算。關係代數是用對關係的
代數運算來表達查詢要求的方式;關係演算是用謂詞來表達查詢要求的方式。另外還有一種介於關係代數和關係演算的語言稱為
結構化查詢語言,簡稱SQL。
關係的數據完整性
包括:域完整性、
實體完整性、參照完整性和用戶自定義的完整性。
實體完整性(Entity Integrity)規則:若屬性A是基本關係R的主屬性,則屬性A不能取空值。例如:在課程表(課程號,課程名,教師,周課時數,備註)中,“課程號”屬性為主鍵,則“課程號”不能取相同的值,也不能取空值。
參照完整性規則:若屬性(或屬性組)F是基本關係R的外鍵,它與基本關係S的主鍵Ks相對應(關係R和S不一定是不同的關係),則對於關係R中每個元組在屬性F上的值必須為:
1.或者取空值(F中的每個屬性值均為空);
2.或者等於S中某個元組的主鍵值。
例如:職工(職工號,
姓名,性別,部門號,上司,工資,佣金)
部門(部門號,名稱,地點)
其中職工號是“職工”關係的主鍵,部門號是外鍵,而“部門”關係中部門號是主鍵,則職工關係中的每個元組的部門號屬性只能取下面兩類值:
第1類:空值,表示尚未給該職工分配部門;
第2類:非空值,但該值必須是部門關係中某個元組的部門號值,表示該職工不可能分配到一個不存在的部門中,即被參照關係“部門”中一定存在一個元組,它的主鍵值等於該參照關係“職工”中的外鍵值。
域
完整性、實體完整性和參照完整性是關係模型中必須滿足的完整性約束條件,只要是關係資料庫系統就應該支持域完整性、實體完整性和參照完整性。除此之外,不同的關係資料庫系統根據其套用環境的不同,往往還需要一些特殊的約束條件,用戶定義的完整性就是對某些具體關係資料庫的約束條件。例如:選課表(課程號,學號,成績),在定義關係選課表時,我們可以對成績這個屬性定義必須大於等於0的約束。