關係模型

用於資料庫管理的關係模型是基於謂詞邏輯和集合論的一種資料模型，廣泛被使用於資料庫之中。最早於1970年由埃德加·科德提出。模型.關係模型的基本假定是所有資料都表示為數學上的關係，就是說"n"個集合的笛卡兒積的一個子集，有關這種資料的推理透過二值的謂詞邏輯來進行，這意味著對每個命題都有兩種可能的賦值：要麼是真要麼是假。資料透過關係演算和關係代數的一種方式來操作。關係模型是採用二維表格結構表達實體型別及實體間聯絡的資料模型.關係模型允許設計者透過資料庫規範化的提煉，去建立一個資訊的一致性的模型。訪問計劃和其他實現與操作細節由DBMS引擎來處理，而不應該反映在邏輯模型中。這與SQL DBMS普遍的實踐是對立的，在它們那裡效能調整經常需要改變邏輯模型。基本的關係建造塊是域或者叫資料型別。元組是屬性的有序多重集。關係是元組的集合。儘管這些關係概念是數學上的定義的，它們可以寬鬆的對映到傳統資料庫概念上。表是關係的公認的可視表示；元組類似於"行"的概念。關係模型的基本原理是資訊原理：所有資訊都表示為關係中的資料值。所以，關係變數在設計時刻是相互無關聯的；反而，設計者在多個關係變數中使用相同的域，如果一個屬性依賴於另一個屬性，則透過參照完整性來強制這種依賴性。競爭者.其他模型還有層次模型和網狀模型。使用這些舊體系的一些系統現在仍在一些資料中心中使用，那裡有高資料容量需求或者現存系統複雜得使遷移到採用關係模型的系統花費巨大；還要注意新的物件資料庫，儘管它們中很多都是DBMS構造工具，而不是嚴格的DBMS。關係模型是第一個形式化的資料庫模型。在它被定義之後，非形式化模型被用做描述層次資料庫。層次和網狀資料在關係資料庫之前就存在了，但是隻在關係模型被定義之後才作為模型來描述，用來建立比較的基礎。歷史.關係模型是由埃德加·科德博士作為資料的一般模型而發明的，隨後由克里斯托佛·達特和休·達溫中他們展示瞭如何向關係模型擴充套件上面向物件特徵而不用妥協它的基本原理。SQL標準與關係模型.SQL最初作為關係資料庫的標準語言而提出，而在實際上總是違背它。所以SQL DBMS實際上不是真正的RDBMS，並且當前ISO SQL標準不提及關係模型或者使用關係術語或概念。實現.已經有很多嘗試去生成埃德加·科德、克里斯多佛·戴特、休·達溫等人開發的關係資料庫模型的真正實現。但都沒有獲得流行性成功。Rel 是其中最新的嘗試之一。SQL使用概念"表"、"列"和"行"來替代"關係變數"、"屬性"和"元組"。爭論.科德自己提議了關係模型的一個三值邏輯版本，而且四值邏輯版本也被提議了，用來處理缺失資訊。但是這些都未被實現，大概是由於顧及到了複雜性。SQL NULL意圖成為三值邏輯系統的一部分，但是由於在標準和它的實現中的邏輯上的錯誤而沒有達到目標。設計.資料庫規範化通常在設計關係資料庫時進行，用來增進資料庫設計的邏輯上的一致性和事務處理效能。有兩種常用的模式圖系統來輔助關係模型的可視表示：實體-聯絡模式圖，和美國空軍在ERD基礎上建立的IDEF1X方法中所使用的關聯IDEF模式圖。樣例資料庫.一些關係變數和它們的屬性的一個理想化和非常簡單的例子：CustomerOrderOrder LineInvoiceInvoice LineProduct在這個設計中我們有六個關係變數：Customer, Product, Order, Order Line, Invoice,和Invoice Line.粗體字有下劃線的屬性是"候選鍵 (碼)"。非粗體字有下劃線的屬性是"外來鍵 (碼)"。通常任意選擇一個候選鍵 (碼)叫做主鍵 (碼)並且優先於其他候選鍵，它們也就被叫做可選鍵 (碼)。"候選鍵"是強制元組不重複的唯一性識別符號；否則關係就違背了集合的基本定義而成為是叫做包的東西了。鍵 (碼)可以是複合的，就是說可以由多個屬性組合而成。下面是我們的例子顧客關係變數的一個表格化描述；關係可以被認為是歸結到一個關係變數的值。集合理論公式.關係模型中的基本概念是"關係名字"和"屬性名字"。我們通常把他們表示為如“Person”和“name”這樣的字串，並且我們通常使用變數"r"、"s"、"t"、……和"a"、"b"、"c"來涉及它們。另一個基本概念"原子值"的集合包含著如數值和字串這樣的值。我們的第一個定義關注"元組"的概念，它是表格中行或記錄的概念的形式化。定義"元組"是從一組屬性名字到一組原子值的偏函式。定義"表頭"是屬性名字的有限集合。定義元組"t"在屬性的有限集合"A"上的"投影"是"t"["A"] = { ("a", "v") : ("a", "v") ∈ "t", "a" ∈ "A" }。下一個定義定義了"關係"，它是關係模型中對錶格內容的形式化。定義"關係"是帶有表頭"H"和表體"B"的一個元組，表體是都有域"H"的元組的集合。這種關係緊密的對應於在一階邏輯中通常叫做謂詞外延的東西，除了我們這裡用屬性名字標識在謂詞中的位置之外。在關係模型中資料庫模式是由一組關係名字，與這些名字相關聯的表頭，和在資料庫模式的每個例項上保持的約束構成的。定義在表頭"H"上的"關係全集""U"是有表頭"H"的關係的非空集合。定義"關係模式"由表頭"H"和對有表頭"H"的所有關係"R"定義的謂詞"C"("R")構成。定義 如果關係有表頭"H"並滿足"C"則它滿足關係模式。鍵約束和函式依賴.最簡單和最重要的一類關係約束是"鍵約束"。它告訴我們在特定關係模式的所有例項中元組可以透過它特定屬性的值來標識。定義 "超鍵"被寫為屬性名字的有限集合。定義超鍵中保持，條件是"K" ⊆ "H"並且在"B"中沒有兩個不同的元組"t1"和"t2"使"t1"["K"] = "t2"["K"]。定義超鍵在表頭"H"之上的關係全集"U"中保持，條件是它在"U"中的所有關係中保持。定義超鍵。定義 "函式依賴"被寫為"X"-&gt;"Y"，"X"和"Y"是屬性名字的有限集合。定義函式依賴 "X"-&gt;"Y"在關係中保持，條件是"X"和"Y"是"H"的子集並且對於在"B"中所有的元組"t1"和"t2"使得如果"t1"["X"] = "t2"["X"]則't1"["Y"] = "t2"["Y"]。定義函式依賴"X"-&gt;"Y"在表頭"H"之上的關係全集"U"中保持，條件是它在"U"中的所有關係中保持。定義函式依賴在表頭"H"下是"不證自明的"，條件是它在"H"下的所有關係全集中保持。定理FD "X"-&gt;"Y"在表頭"H"下是不證自明的，當且僅當"Y" ⊆ "X" ⊆ "H"。定理超鍵"K"在"H"之上的關係全集"U"中保持，當且僅當"K" ⊆ "H"並且"K"-&gt;"H"在"U"中保持。定義設"S"是FD的集合，則"S"在表頭"H"下的"閉包"寫為"S"+，它是"S"的符合如下規律的最小超集:(自反律)如果"Y" ⊆ "X" ⊆ "H"，則"X"-&gt;"Y"在"S"+中。(傳遞律)如果"X"-&gt;"Y"在"S"+中並且"Y"-&gt;"Z"在"S"+中，則"X"-&gt;"Z"在"S"+中。(增廣律)如果"X"-&gt;"Y"在"S"+中並且"Z" ⊆ "H"，則"X"∪"Z" -&gt; "Y"∪"Z"在"S"+中。定理Armstrong規則是可靠的和完備的，就是說給定一個表頭"H"和只包含"H"的子集的FD集合"S"，則FD "X"-&gt;"Y"在"S"+中，當且僅當在它在"H"之上的其中所有的"S"中的FD都保持的所有的關係全集中保持。定義如果"X"是屬性的有限集合並且"S"是FD的有限集合，則"X"在"S"下的"補集"寫為"X"+，它是符合如下規律的"X"的最小超集：如果"Y"-&gt;"Z"在"S"中並且"Y" ⊆ "X"+則"Z" ⊆ "X"+。屬性集合的補集可以用來計算特定的依賴是否在FD集合的閉包中。定理給定表頭"H"和只包含"H"的子集的 FD的集合"S"，"X"-&gt;"Y"保持在"S"+中，當且僅當"Y" ⊆ "X"+。演算法)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-&gt;Y" in "S" do"K' ":= ("K" - "Y") ∪ "X"; // 推導新超鍵if "K' "⊂ "K"then"minimal" := false;"Q" := "Q" ∪ { "K' "};fiodif "minimal" and沒有"K"的子集在"C"中then從"C"中去除"K"的所有超集;"C" := "C" ∪ { "K" };fiodend定義給定表頭"H"和只包含"H"的子集的FD的集合"S"，"S"的"不可簡約覆蓋"是符合如下規律的FD的集合"T"# "S"+ = "T"+# 沒有"T"的真子集"U"使"S"+ = "U"+，# 如果"X"-&gt;"Y"在"T"中則"Y"是單元素集合並且# 如果"X"-&gt;"Y"在"T"中並且"Z"是"X"的真子集則"Z"-&gt;"Y"不在"S"+中。