概敘 關係資料庫的基本特征是使用關係模型的組織數據,20世紀80年代以後,在商用DBMS中,關係模型逐步取代早期的網狀模型和層次模型。 關係數據模型 作為數據模型,關係模型包含三個組成要素:關係數據結構、關係操作集合和關係完整性約束。 關係數據結構 重點 結構只包含單一的數據結構(關係),現實世界的 ...
概敘
關係資料庫的基本特征是使用關係模型的組織數據,20世紀80年代以後,在商用DBMS中,關係模型逐步取代早期的網狀模型和層次模型。
關係數據模型
作為數據模型,關係模型包含三個組成要素:關係數據結構、關係操作集合和關係完整性約束。
關係數據結構
結構只包含單一的數據結構(關係),現實世界的實體與實體間的各種聯繫均用關係來表示。關係模型是吧資料庫比賽為關係的集合,並以二維表格的形式組織數據。
錄入一張二維表格如:
學號 | 姓名 | 性別 | 籍貫 | 民族 | ... |
---|---|---|---|---|---|
001 | 張三 | 男 | 陝西 | 漢 | ... |
002 | 李四 | 男 | 湘西 | 苗 | ... |
003 | 王五 | 男 | 河北 | 漢 | ... |
004 | 趙六 | 男 | 東北 | 漢 | ... |
... |
基本術語
表(Table)
:也稱為關係,是二維數據結構,由表名、構成表的各列及若幹行數據組成,每個表由唯一的表名,每一行數據描述一條具體的記錄值。關係(Relation)
:一個關係邏輯上對應一張二維表,可以為每個關係取一個名稱來標識。關係有三種類型:基本關係(基表,實際存在的表,是實際存儲數據的邏輯表示)、查詢表(查詢結構對應的表)和視圖表(由基本表或其他視圖導出的表,不對應實際存儲的數據)。列(Column)
:稱為欄位(Field)或屬性(Attribute)。每一列有一個名稱,表示實體屬性,具有相同數據類型。在一個資料庫中,表名,欄位名必須唯一,不同的表可以有相同的欄位名,且命名須有意義,簡單。屬性(Attribute)
:表列即屬性,給屬性起名即屬性名。屬性的個數稱為關係的元或度。列值為屬性值;取值範圍為值域。行(Row)
:稱為元組(Tuple)或記錄(Record)。表中的數據按行存儲,一行數據即一條記錄或元組,每行又若幹個欄位值組成。分量(Component)
:元組的屬性值為分量碼/鍵(key)
:在一個關係中,有一個屬性或屬性組,能用來標識該關係的元組,則為該關係的碼或鍵。超碼或超鍵(Super Key)
:從碼中去除某個屬性,它仍然是對應關係的碼,則為超碼;每個關係至少有一個預設的超碼(所有屬性的集合)。候選碼或鍵(Candidate Key)
:關係中的一個碼或鍵中,不能去除任何一個屬性,否則它就不是對應關係表的碼或鍵,則此碼為候選碼(鍵),它是關係表中最小的超碼或超鍵。主鍵/碼(Primary Key)
:在一張關係表中的若幹候選鍵中指定一個用來唯一標識該關係的元組,則該候選鍵為主鍵。全鍵/碼(All-Key)
:一個關係中所有的屬性集合是是這個關係是主鍵/碼,則為全鍵/碼。主/非屬性(Primary Attribute/Nonprimary Attribute)
:關係中包含任何一個候選鍵/碼的屬性為主/碼屬性,不包含任何一個候選碼的屬性為非主/碼屬性。外鍵/碼(Foreign Key)
:關係中的某個屬性或屬性組不是這個關係的主鍵或候選鍵,而是另一個關係的主鍵,則該屬性(屬性組)為關係的外鍵/碼。參照關係(Referencing Relation)/被參照關係(Referenced Relation)
:參照關係也稱從關係,被參照關係又稱主關係,它們指以外碼相關聯的兩個關係。而以外碼為主碼的關係為被參照關係;外碼所在的關係為參照關係,這種聯繫通常是一對多關聯。域(Domain)
:指屬性取值範圍。數據類型(Data Type)
:每列(元關係)都有相應的數據類型,用於限制該列中存儲的數據。關係模式(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 的優化機制來完成。
- 代數方式:主要有關係代數,通過對關係的操作來表達查詢要求
- 邏輯方式:主要有關係演算,是用謂詞來表達查詢要求,關係演算又按謂詞變元的基本對象(元組變數或域變數),分為元組關係演算和域關係演算。
- 介於前兩者之間的結構化查詢語言(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)
待續。。。