資料庫學習二 關聯式模型

📢 本文由 gemini-3-flash-preview 翻譯

SQL 系列

資料庫學習一 資料庫導論: https://blog.yexca.net/archives/86
資料庫學習二 關聯式模型: 本文
資料庫學習三 SQL 語言: https://blog.yexca.net/archives/88
資料庫學習四 關聯式資料庫理論: https://blog.yexca.net/archives/89
資料庫學習五 範式: https://blog.yexca.net/archives/90
資料庫學習六 資料庫設計: https://blog.yexca.net/archives/91
資料庫學習七 資料庫的控制功能: https://blog.yexca.net/archives/92

關聯式模型中的基本術語

關聯式資料庫系統是支援關聯式模型的資料庫系統。有關關聯式模型的一些基本術語如下:

  • 關聯 (Relation):一個關聯就是一張二維表,每個關聯有一個關聯名稱
  • 元組 (Tuple):表中的一行即為一個元組,對應儲存檔案中的一個記錄值
  • 屬性 (Attribute):表中的列稱為屬性,每一列有一個屬性名稱,屬性值相當於記錄中的資料項或者欄位值
  • 域 (Domain):屬性的取值範圍,即不同元組對同一個屬性的值所限定的範圍
  • 關聯式模式 (Relation Schema):對關聯的描述稱為關聯式模式,由關聯名稱和其屬性集合構成,關聯式模式的格式為:關聯名(屬性名 1,···,屬性名 n)

通常一個關聯式模式對應一個關聯檔案的結果

  • 候選鍵 (Candidate Key):屬性或屬性組合,其值能夠唯一地識別一個元組
  • 主鍵 (Primary Key):在一個關聯中可能有多個候選鍵,從中選擇一個作為主鍵
  • 主屬性:包含在任何候選鍵中的屬性稱為主屬性,不包含在任何候選鍵中的屬性稱為非主屬性
  • 外鍵 (Foreign Key):如果一個關聯中的屬性或屬性組並非該關聯的鍵,但它們是另外一個關聯的鍵,則稱其為該關聯的外鍵
  • 全鍵 (All-key):關聯式模式的所有屬性組是這個關聯式模式的候選鍵,稱為全鍵
  • 超鍵 (Super Key):一個包含鍵的屬性集稱為超鍵

關聯式模型的定義

關聯的描述稱為關聯式模式,它可以形式化地表示為:R(U, D, dom, F)

其中 R 為關聯名,U 為組成該關聯的屬性名集合,D 為屬性組 U 中屬性所來自的域,dom 為屬性向域的映射集合,F 為屬性間資料的相依關係集合

通常簡記為 R(U) 或 R($A_1$, $A_2$, ···),其中 R 為關聯名,U 為屬性名集合,$A_1$、··· 為各屬性名

關聯式模型由關聯資料結構、關聯操作集合和關聯完整性限制三部分組成

關聯資料結構

關聯式模型中資料的邏輯關係是一張二維表格

關聯操作集合

關聯式模型給出了關聯操作的能力

常見的關聯操作有:選擇、投影、連接、除法、聯集、交集、差集等查詢操作和增加、刪除操作等

關聯完整性限制

關聯式模型中的三個完整性規則如下:

  • 實體完整性 (Entity Integrity):關聯中主鍵的值不能為空或部分為空,也就是說,主鍵中屬性即主屬性不能取空值
  • 參照完整性 (Referential Integrity):如果關聯 $R_2$ 的外鍵 X 與關聯 $R_1$ 的主鍵相對應 (基本關聯 $R_1$ 和 $R_2$ 不一定是不同的關聯,即它們可以是同一個關聯),則外鍵 X 的每一個值必須在關聯 $R_1$ 中主鍵的值中找到,或者為空值
  • 使用者定義完整性 (User-defined Integrity):指使用者對某一具體資料指定的約束條件進行檢驗

關聯代數運算子

運算子符號含義
集合運算子


×
聯集 (Union)
差集 (Difference)
交集 (Intersection)
笛卡兒積 (Cartesian Product)
專門的關聯運算子σ
π

÷
選擇 (Selection)
投影 (Projection)
連接 (Join)
除法 (Division)
比較運算子




大於
大於等於
小於
小於等於
等於
不等於
邏輯運算子¬

非 (NOT)
與 (AND)
或 (OR)

傳統的集合運算

img

專門的關聯運算子

  1. 連接 (Join)

連接有 θ 連接、等值連接與自然連接

  • θ 連接:連接條件不為等於
  • 等值連接:連接條件為等於
  • 自然連接:除去重複屬性的等值連接。最常用的連接運算
  1. 投影 (Projection)

投影運算是從關聯的垂直方向進行運算,在關聯 R 中選出若干屬性列 A 組成新的關聯,記作 $π_A(R)$

  1. 選擇 (Selection)

選擇運算是從關聯的水平方向進行運算,是從關聯 R 中選擇滿足給定條件的元組,記作 $σ_F(R)$

img

  1. 外連接 (Outer Join)

外連接運算是連接運算的擴展,可以處理由於連接運算而缺失的資訊

  • 左外連接 (Left Outer Join):取出左側關聯中所有與右側關聯中任一元組都不匹配的元組,用空值 null 填充所有來自右側關聯的屬性
  • 右外連接 (Right Outer Join):取出右側關聯中所有與左側關聯中任一元組都不匹配的元組,用空值 null 填充所有來自左側關聯的屬性
  • 全外連接 (Full Outer Join):完成左外連接和右外連接的操作
  1. 除法 (Division)

img

符號轉 SQL 語言

關聯 R:

ABC
123
456
789

投影轉 SQL 語言

$π_?(?)$

1
select ? from ?

$π_{A, B, C}(R)$ 或者 $π_{1, 2, 3}(R)$

1
select A, B, C from R

註:SQL 語言不支援列 (屬性) 的序號

選擇轉 SQL 語言

$π_?(σ_?(?))$

1
select ? from ? where ?

$π_{A, B, C}(σ_{B >= '5'}(R))$ 或者 $π_{1, 2, 3}(σ_{2 >= '5'}(R))$

1
2
3
select A, B, C from R where B >= '5'
# 或者
select A, B, C from R where B >= 5

笛卡兒積轉 SQL 語言

$π_{R.A, R.B, R.C, S.A, S.B, S.D}(R×S)$

1
2
3
4
select R.A, R.B, R.C, S.A, S.B, S.D
from R, S
# 遞增排序
order by R.A asc

自然連接轉 SQL 語言

關聯 R(A, B, C) 與 S(B, C, D)

$π_{R.A, R.B, R.C, S.D}(σ_{R.B = S.B ∩ R.C = S.C}(R×S))$

1
2
3
select R.A, R.B, R.C, S.D
from R, S
where R.B = S.B and R.C = S.C
This post is licensed under CC BY-NC-SA 4.0 by the author.