1. 程式人生 > >關係資料模型

關係資料模型

概敘

關係資料庫的基本特徵是使用關係模型的組織資料,20世紀80年代以後,在商用DBMS中,關係模型逐步取代早期的網狀模型和層次模型。

關係資料模型

作為資料模型,關係模型包含三個組成要素:關係資料結構、關係操作集合和關係完整性約束。

關係資料結構

結構只包含單一的資料結構(關係),現實世界的實體與實體間的各種聯絡均用關係來表示。關係模型是吧資料庫比賽為關係的集合,並以二維表格的形式組織資料。

錄入一張二維表格如:

學號 姓名 性別 籍貫 民族 ...
001 張三 陝西 ...
002 李四 湘西 ...
003 王五 河北 ...
004 趙六 東北 ...
...

基本術語

  1. 表(Table):也稱為關係,是二維資料結構,由表名、構成表的各列及若干行資料組成,每個表由唯一的表名,每一行資料描述一條具體的記錄值。
  2. 關係(Relation):一個關係邏輯上對應一張二維表,可以為每個關係取一個名稱來標識。關係有三種類型:基本關係(基表,實際存在的表,是實際儲存資料的邏輯表示)、查詢表(查詢結構對應的表)和視圖表(由基本表或其他檢視匯出的表,不對應實際儲存的資料)。
  3. 列(Column):稱為欄位(Field)或屬性(Attribute)。每一列有一個名稱,表示實體屬性,具有相同資料型別。在一個數據庫中,表名,欄位名必須唯一,不同的表可以有相同的欄位名,且命名須有意義,簡單。
  4. 屬性(Attribute):表列即屬性,給屬性起名即屬性名。屬性的個數稱為關係的元或度。列值為屬性值;取值範圍為值域。
  5. 行(Row):稱為元組(Tuple)或記錄(Record)。表中的資料按行儲存,一行資料即一條記錄或元組,每行又若干個欄位值組成。
  6. 分量(Component):元組的屬性值為分量
  7. 碼/鍵(key):在一個關係中,有一個屬性或屬性組,能用來標識該關係的元組,則為該關係的碼或鍵。
  8. 超碼或超鍵(Super Key):從碼中去除某個屬性,它仍然是對應關係的碼,則為超碼;每個關係至少有一個預設的超碼(所有屬性的集合)。
  9. 候選碼或鍵(Candidate Key):關係中的一個碼或鍵中,不能去除任何一個屬性,否則它就不是對應關係表的碼或鍵,則此碼為候選碼(鍵),它是關係表中最小的超碼或超鍵。
  10. 主鍵/碼(Primary Key):在一張關係表中的若干候選鍵中指定一個用來唯一標識該關係的元組,則該候選鍵為主鍵。
  11. 全鍵/碼(All-Key):一個關係中所有的屬性集合是是這個關係是主鍵/碼,則為全鍵/碼。
  12. 主/非屬性(Primary Attribute/Nonprimary Attribute):關係中包含任何一個候選鍵/碼的屬性為主/碼屬性,不包含任何一個候選碼的屬性為非主/碼屬性。
  13. 外來鍵/碼(Foreign Key):關係中的某個屬性或屬性組不是這個關係的主鍵或候選鍵,而是另一個關係的主鍵,則該屬性(屬性組)為關係的外來鍵/碼。
  14. 參照關係(Referencing Relation)/被參照關係(Referenced Relation):參照關係也稱從關係,被參照關係又稱主關係,它們指以外碼相關聯的兩個關係。而以外碼為主碼的關係為被參照關係;外碼所在的關係為參照關係,這種聯絡通常是一對多關聯。
  15. 域(Domain):指屬性取值範圍。
  16. 資料型別(Data Type):每列(元關係)都有相應的資料型別,用於限制該列中儲存的資料。
  17. 關係模式(Relation Schema):通資料模型一樣,資料庫也有型和值,在關係資料庫中關係模式是型,關係是值,關係模式是對關係的描述。
中文欄位名 資料型別 寬度 ...
學號 字元型別 8 ...
姓名 字元型別 10 ...
身份證 字元型別 18 ...
... ... ... ...

上表是學生基本星系登記表關係的結構定義,關係則是元組的集合,是關係模式在某一時刻的狀態或內容

實際工作中關係模式和關係統稱為關係。

18.關係資料庫(Relation Database):以關係模型作為資料的邏輯模型,並採用關係作為資料組織方式的一類資料庫,其資料庫操作建立在關係代數的基礎上。在給定的應用領域中,所以關係的集合構成一個關係資料庫。
在實際的資料庫應用系統中,一般使用英文作為表名、欄位名等。因為在編寫資料庫應用程式時,表名、欄位名會作為變數名,使用中文不方便標識,且有些DBMS不能很好的相容中文。
因此上表應該變更為:

含義 欄位名 資料型別 寬度 ...
學號 studentNo 字元型別 8 ...
姓名 sutdentName 字元型別 10 ...
身份證 studentId 字元型別 18 ...
... ... ... ... ...

關係資料庫對關係的限定:

  • 每個屬性都不可分解,是關係資料庫對關係的最基本的限定,要求關係的每個分量必須是一個不可分的資料項,即不允許表中有表
  • 一個關係對應一種關係模式,模式中的屬性的資料型別及屬性的個數是相對固定的
  • 每個關係模式中的屬性必須命名,在同一模式中,屬性名必須是不同的
  • 同一關係中不允許出現候選碼或鍵值完全相同的元組
  • 關係中的元組順序是可任意交換
  • 關係中的屬性順序可以任意交換

關係操作集合

基本的關係操作

增(插入 Insert)、刪(Delete)、改(Update)、查(Query)。關係的查詢表達能力是關係操作最主要的部分。查又可分為選擇、投影、連線、除、並、差、交、笛卡爾積。集合操作方式(操作的物件和結果都是集合)。又稱為一次一集合(set-at-a-time)

關係資料語言的分類

通過關係語言實現關係操作。使用者不必請求DBM為其建立特殊的存取路徑,由 DBMS 的優化機制來完成。

  1. 代數方式:主要有關係代數,通過對關係的操作來表達查詢要求
  2. 邏輯方式:主要有關係演算,是用謂詞來表達查詢要求,關係演算又按謂詞變元的基本物件(元組變數或域變數),分為元組關係演算和域關係演算。
  3. 介於前兩者之間的結構化查詢語言(Structured Query Language,SQL):SQL具有豐富的查詢功能、資料定義和資料控制功能。集查詢、資料定義語言(DDL)、資料操作語言(DML)和資料控制語言(Data Control Language, DCL)於一體;是關係資料庫的標準語言。

關係代數

關係代數是關係操作語言中的傳統表示方式,以集合代數為基礎發展而來。任何一種操作都是將一定的操作符作用域一定的操作物件上,得到預期的操作結果。
而物件和結果均為關係。關係代數直接應用關係的運算來表達操作的目的,運算子包括集合運算子和專門的關係運算符。

關係代數的運算子
運算子 含義
集合運算子
× 笛卡爾積
專門的關係運算符 σ 選擇
π 投影
連線
÷
比較操作符 > 大於
大於等於
< 小於
小於等於
等於
不等於
比較操作符 ¬

關係代數操作經過有限次複合的式子稱為關係代數操作表示式(關係代數表示式),可使用表示式表示所需要執行的各種資料查詢和修改處理,所有關係代數是一種抽象的查詢語言,通過對關係的操作來表達查詢。

按運算子分類,關係代數操作可分為:傳統的集合運算和專門的關係運算

集合運算

傳統集合運算是二目運算,將關係看成元組集合,運算從行的角度來進行,具有 並、差、交、迪卡爾積四種運算。
example:

表 T1

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0001 張三 N101
0002 王二 N101
0003 李梅 C101

表 T2

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0004 劉八 D101
0005 趙二 B201
0003 李梅 C101
並(UNION)

表T1 和 表T2 使用並運算產生一個新表T3,(T3 = T1 ∪ T2)它是由T1和T2所有不同元組所組成,且 T1和T2屬性個數、值域相同。下表為 T1 ∪ T2的結果
表 T3

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0001 張三 N101
0002 王二 N101
0003 李梅 C101
0004 劉八 D101
0005 趙二 B201
差(DIFFERENCE)

表T1 和 表T2 使用差運算產生一個新表T4,(T4 = T1 - T2)它有T1的所有元組但不包含T2的元組,且 T1和T2屬性個數、值域必須相同。下表為 T1 - T2的結果

表 T4

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0001 張三 N101
0002 王二 N101
交(INTERSECTION)

表T1 和 表T2 使用交運算產生一個新表T5,(T5 = T1 ∩ T2)它同時包含T1和T2相同的所有元組,且 T1和T2屬性個數、值域必須相同,交運算可由差運算表示(T1∩T2 = T1-(T1-T2))。下表為 T1 ∩ T2的結果

表 T5

學號(SNO) 姓名(SNAME) 性別(SSEX) 宿舍(SROOM)
0003 李梅 C101
笛卡爾積(CARTESIAN PRODUCT)

表T6 和 表T7 使用笛卡爾積運算產生一個新表T8,(T8 = T6 × T7)它是T6和T7的所有元組連線而成,即將兩張表的元關係合併,且T6的每一元組都對應T7所有的元組
下表為 T6 × T7的結果

表 T6

學號(SNO) 姓名(SNAME)
0001 張三
0002 王二

表 T7

課程號(CNO) 課程名(CNAME) 教室(SSEX)
1 資料庫 C-101
2 作業系統 C-102

表 T8

學號(SNO) 姓名(SNAME) 課程號(CNO) 課程名(CNAME) 教室(SSEX)
0001 張三 1 資料庫 C-101
0001 張三 2 作業系統 C-102
0002 王二 1 資料庫 C-101
0002 王二 2 作業系統 C-102
專門的關係運算

此運算即涉及行,又涉及列,分為一元專門關係操作和二元專門關係操作

  • 一元關係操作:對單個關係進行垂直分解的投影運算和進行水平分解選擇運算
  • 二元關係操作:對兩個關係進行操作,包括連運算和除運算
選擇(SELECT)

選擇運算( $σ_F(R)$ ),F為條件表示式,R為指定的被運算關係名。 從指定關係中選取滿足條件的若干元組組成一個新關係

SELECT 關係名 WHERE 條件語句(表示式)

條件語句:由常數、屬性名或列名、比較操作符及邏輯操作符組成

example:

SELECT T8 WHERE 姓名 = "張三"

表 T9

學號(SNO) 姓名(SNAME) 課程號(CNO) 課程名(CNAME) 教室(SSEX)
0001 張三 1 資料庫 C-101
0001 張三 2 作業系統 C-102
投影(PROJECTION)

投影運算( $π_A(R)$ ), R為被運算關係,A為屬性序列,從指定關係中選取指定的若干屬性值組成新關係

PROJECTION 關係名 ( 屬性名1, 屬性名2 ,... )

組成的新關係自動去重

example:

PROJECTION T8 (課程號,課程名)

表 T10

課程號(CNO) 課程名(CNAME)
1 資料庫
2 作業系統
θ連線(JOIN)

連線運算($R\cfrac{⋈}{xθy}S$),其中,R和S 代表兩個不同的關係;x 和 y 分別表示R中的第x列和S中的第y列屬性;θ表示比較運算子,從笛卡爾積R×S中選取R的第x列屬性值與S的第y列屬性值滿足θ的那些元組組成一個新關係。

JOIN 關係1 AND 關係2 WHERE 條件語句

條件語句:由比較操作符和屬性名或列名組成的表示式

  • 等值連線:θ值為 "=",從R和S的笛卡爾積中選取 x、y 屬性值相等的元組
    example:

表 T11

A B C
a b c
d e f

表 T12

D E A
g h a
b c d
JOIN  T11 AND T12 WHERE A = A

T11 × T12

A B C D E A
a b c g h a
a b c b c d
d e f g h a
d e f b c d

等值結果為:

表 T13

A B C D E A
a b c g h a
d e f b c d
  • 自然連線:是一種特殊的等值連線,要求兩個關係中比較的分量必須是

表 T14

A B C D E
a b c g h
d e f b c

自然連線是構造新關係的有效方法,投影和選擇是分解關係的有效方法,自然連線中如果兩個關係沒有公共屬性則變成笛卡爾積

除(DIVISION