關係模型

用於資料庫管理的關係模型（Relational model）是基於謂詞邏輯和集合論的一種資料模型，廣泛被使用於資料庫之中。最早於 1969 年由埃德加・科德提出。

模型

關係模型的基本假定是所有資料都表示為數學上的關係，就是說 n 個集合的笛卡兒積的一個子集，有關這種資料的推理透過二值（就是說沒有 NULL）的謂詞邏輯來進行，這意味著對每個命題都有兩種可能的賦值：要麼是真要麼是假。資料透過關係演算和關係代數的一種方式來操作。關係模型是採用二維表格結構表達實體型別及實體間聯絡的資料模型.

關係模型允許設計者透過資料庫規範化的提煉，去建立一個資訊的一致性的模型。和其他實現與操作細節由 DBMS 引擎來處理，而不應該反映在邏輯模型中。這與 SQL DBMS 普遍的實踐是對立的，在 SQL DBMS 中，經常需要改變邏輯模型。

基本的關係建造塊是域或者叫資料型別。元組是屬性的有序多重集（multiset），屬性是域和值的有序對。（relvar）是域和名字的有序對（序偶）的集合，它充當關係的標頭（header）。關係是元組的集合。儘管這些關係概念是數學上的定義的，它們可以寬鬆的對映到傳統資料庫概念上。表是關係的公認的可視表示；元組類似於行的概念。

關係模型的基本原理是資料庫：所有資訊都表示為關係中的資料值。所以，關係變數在是相互無關聯的；反而，設計者在多個關係變數中使用相同的域，如果一個屬性依賴於另一個屬性，則透過參照完整性來強制這種依賴性。

競爭者

歷史

關係模型是由埃德加・科德博士作為資料的一般模型而發明的，隨後由克里斯托佛・達特和（Hugh Darwen）等人維護和開發。在第三次宣言（1995 年）中他們展示瞭如何向關係模型擴充套件上面向物件特徵而不用妥協它的基本原理。

SQL 標準與關係模型

SQL 最初作為關係資料庫的標準語言而提出，而在實際上總是違背它。所以 SQL DBMS 實際上不是真正的 RDBMS，並且當前 ISO SQL 標準不提及關係模型或者使用關係術語或概念。

實現

已經有很多嘗試去生成埃德加・科德、克里斯多佛・戴特、休・達溫等人開發的關係資料庫模型的真正實現。但都沒有獲得流行性成功。 Rel 是其中最新的嘗試之一。SQL 使用概念「表」、「列」和「行」來替代「關係變數」、「屬性」和「元組」。

爭論

科德自己提議了關係模型的一個三值邏輯版本，而且四值邏輯版本也被提議了，用來處理缺失資訊。但是這些都未被實現，大概是由於顧及到了複雜性。SQL NULL 意圖成為三值邏輯系統的一部分，但是由於在標準和它的實現中的邏輯上的錯誤而沒有達到目標。

設計

資料庫規範化通常在設計關係資料庫時進行，用來增進的邏輯上的一致性和事務處理效能。

有兩種常用的圖解系統來輔助關係模型的視覺化：實體 - 聯絡模式圖（實體關係圖），和美國空軍在 ERD 基礎上建立的 IDEF1X 方法中所使用的關聯 IDEF 模式圖。

樣例資料庫

一些關係變數和它們的屬性的一個理想化和非常簡單的例子：

Customer（Customer ID, Tax ID, Name, Address, City, State, Zip, Phone）

Order（Order No, Customer ID, Invoice No, Date Placed, Date Promised, Terms, Status）

Order Line（Order No, Order Line No, Product Code, Qty）

Invoice（Invoice No, Customer ID, Order No, Date, Status）

Invoice Line（Invoice No, Line No, Product Code, Qty Shipped）

Product（Product Code, Product Description）

在這個設計中我們有六個：Customer, Product, Order, Order Line, Invoice, 和 Invoice Line. 粗體字有下劃線的屬性是候選鍵。非粗體字有下劃線的屬性是外部索引鍵。

通常任意選擇一個候選鍵叫做主鍵並且優先於其他候選鍵，它們也就被叫做。

候選鍵是強制元組不重複的唯一性識別符號；否則關係就違背了集合的基本定義，而成為多重集了。鍵 (碼) 可以是複合的，就是說可以由多個屬性組合而成。下面是我們的例子顧客關係變數的一個表格化描述；關係可以被認為是歸結到一個關係變數的值。

集合理論公式

關係模型中的基本概念是關係名字和屬性名字。我們通常把他們表示為如 “Person” 和 “name” 這樣的字串，並且我們通常使用變數 r、s、t、…… 和 a、b、c 來涉及它們。另一個基本概念原子值的集合包含著如數值和字串這樣的值。

我們的第一個定義關注元組的概念，它是表格中行或記錄的概念的形式化。

 定義元組是從一組屬性名字到一組原子值的偏函式。

 定義表頭是屬性名字的有限集合。

 定義元組 t 在屬性的有限集合 A 上的投影是 tA = {(a, v) : (a, v) ∈ t, a ∈ A }。

下一個定義定義了關係，它是關係模型中對錶格內容的形式化。

 定義關係是帶有表頭 H 和表體 B 的一個元組（H, B），表體是都有域 H 的元組的集合。

這種關係緊密的對應於在一階邏輯中通常叫做謂詞外延的東西，除了我們這裡用屬性名字標識在謂詞中的位置之外。在關係模型中資料庫模式是由一組關係名字，與這些名字相關聯的表頭，和在資料庫模式的每個例項上保持的約束（Constraints）構成的。

 定義在表頭 H 上的關係全集 U 是有表頭 H 的關係的非空集合。

 定義關係模式（H, C）由表頭 H 和對有表頭 H 的所有關係 R 定義的謂詞 C (R) 構成。

 定義 如果關係有表頭 H 並滿足 C 則它滿足關係模式（H, C）。

9.1 鍵（碼）約束和函式依賴

最簡單和最重要的一類關係約束是鍵（碼）約束。它告訴我們在特定關係模式的所有例項中元組可以透過它特定屬性的值來標識。

 定義 超鍵（碼）被寫為屬性名字的有限集合。

 定義超鍵（碼）K 在關係（H, B）中保持，條件是 K ⊆ H 並且在 B 中沒有兩個不同的元組 t1 和 t2 使 t1K = t2K。

 定義超鍵（碼）在表頭 H 之上的關係全集 U 中保持，條件是它在 U 中的所有關係中保持。

 定義超鍵（碼）K 保持為在 H 之上的關係全集 U 的一個候選鍵，條件是它保持為 U 的超鍵（碼）並且沒有 K 的真子集也保持為 U 的超鍵（碼）。

 定義 函式依賴（簡寫為 FD）被寫為 X->Y，X 和 Y 是屬性名字的有限集合。

 定義函式依賴 X->Y 在關係（H, B）中保持，條件是 X 和 Y 是 H 的子集並且對於在 B 中所有的元組 t1 和 t2 使得如果 t1X = t2X 則 't1Y = t2Y。

 定義函式依賴 X->Y 在表頭 H 之上的關係全集 U 中保持，條件是它在 U 中的所有關係中保持。

 定義函式依賴在表頭 H 下是不證自明的，條件是它在 H 下的所有關係全集中保持。

 定理 FD X->Y 在表頭 H 下是不證自明的，當且僅當 Y ⊆ X ⊆ H。

 定理超鍵（碼）K 在 H 之上的關係全集 U 中保持，當且僅當 K ⊆ H 並且 K->H 在 U 中保持。

 定義（Armstrong 規則）設 S 是 FD 的集合，則 S 在表頭 H 下的閉包寫為 S+，它是 S 的符合如下規律的最小超集:

: (自反律) 如果 Y ⊆ X ⊆ H，則 X->Y 在 S + 中。

: (傳遞律) 如果 X->Y 在 S + 中並且 Y->Z 在 S + 中，則 X->Z 在 S + 中。

: (增廣律) 如果 X->Y 在 S + 中並且 Z ⊆ H，則 X∪Z -> Y∪Z 在 S + 中。

 定理 Armstrong 規則是可靠的和完備的，就是說給定一個表頭 H 和只包含 H 的子集的 FD 集合 S，則 FD X->Y 在 S + 中，當且僅當在它在 H 之上的其中所有的 S 中的 FD 都保持的所有的關係全集中保持。

 定義如果 X 是屬性的有限集合並且 S 是 FD 的有限集合，則 X 在 S 下的補集寫為 X+，它是符合如下規律的 X 的最小超集：

: 如果 Y->Z 在 S 中並且 Y ⊆ X + 則 Z ⊆ X+。

屬性集合的補集可以用來計算特定的依賴是否在 FD 集合的閉包中。

 定理給定表頭 H 和只包含 H 的子集的 FD 的集合 S，X->Y 保持在 S + 中，當且僅當 Y ⊆ X+。

 演算法（從 FD 推導候選鍵（碼）)

INPUT: 只包含表頭 H 的子集的 FD 的集合 S

OUTPUT: 在 H 之上的其中所有的 S 中的 FD 都保持的所有的關係全集中

保持為候選鍵（碼）的超鍵（碼）的集合 C

begin

C := ∅; // 找到的候選鍵（碼）

Q := {H}; // 包含候選鍵的超鍵（碼）

while Q ∅ do

設 K 是來自 Q 的某個元素；Q := Q - {K};

minimal := true;

for each X->Y in S do

K' := (K - Y) ∪ X; // 推導新超鍵（碼）

if K' ⊂ K

then

minimal := false;

Q := Q ∪ {K'};

fi

od

if minimal and 沒有 K 的子集在 C 中

then

從 C 中去除 K 的所有超集；C := C ∪ {K};

fi

od

end

 定義給定表頭 H 和只包含 H 的子集的 FD 的集合 S，S 的不可簡約覆蓋是符合如下規律的 FD 的集合 T

S+ = T+
沒有 T 的真子集 U 使 S+ = U+，
如果 X->Y 在 T 中則 Y 是單元素（singleton）集合並且
如果 X->Y 在 T 中並且 Z 是 X 的真子集則 Z->Y 不在 S + 中。