<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [關系模型](https://zh.wikipedia.org/wiki/%E5%85%B3%E7%B3%BB%E6%A8%A1%E5%9E%8B) 用于數據庫管理的關系模型(英語:Relational model)是基于謂詞邏輯和集合論的一種數據模型,廣泛被使用于數據庫之中。最早于1969年由埃德加·科德提出。 ## 模型 關系模型的基本假定是所有數據都表示為數學上的關系,就是說n個集合的笛卡兒積的一個子集,有關這種數據的推理通過二值(就是說沒有NULL)的謂詞邏輯來進行,這意味著對每個命題都沒有兩種可能的賦值:要么是真要么是假。數據通過關系演算和關系代數的一種方式來操作。關系模型是采用二維表格結構表達實體類型及實體間聯系的數據模型. 關系模型允許設計者通過數據庫規范化的提煉,去建立一個信息的一致性的模型。訪問計劃和其他實現與操作細節由DBMS引擎來處理,而不應該反映在邏輯模型中。這與SQL DBMS普遍的實踐是對立的,在它們那里性能調整經常需要改變邏輯模型。 基本的關系建造塊是域或者叫數據類型。元組是屬性的有序多重集(multiset),屬性是域和值的有序對。關系變量(relvar)是域和名字的有序對(序偶)的集合,它充當關系的表頭(header)。關系是元組的集合。盡管這些關系概念是數學上的定義的,它們可以寬松的映射到傳統數據庫概念上。表是關系的公認的可視表示;元組類似于行的概念。 關系模型的基本原理是信息原理:所有信息都表示為關系中的數據值。所以,關系變量在設計時刻是相互無關聯的;反而,設計者在多個關系變量中使用相同的域,如果一個屬性依賴于另一個屬性,則通過參照完整性來強制這種依賴性。 ## 競爭者 其他模型還有層次模型和網狀模型。使用這些舊體系的一些系統現在仍在一些數據中心中使用,那里有高數據容量需求或者現存系統復雜得使遷移到采用關系模型的系統花費巨大;還要注意新的面向對象數據庫,盡管它們中很多都是DBMS構造工具,而不是嚴格的DBMS。 關系模型是第一個形式化的數據庫模型。在它被定義之后,非形式化模型被用做描述描述層次數據庫(層次模型)和網狀數據庫(網狀模型)。層次和網狀數據在關系數據庫之前就存在了,但是只在關系模型被定義之后才作為模型來描述,用來建立比較的基礎。 ## 歷史 關系模型是由埃德加·科德博士作為數據的一般模型而發明的,隨后由克里斯多佛·戴特(Christopher J. Date)和休·達溫(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上的投影是t[A] = { (a, v) : (a, v) ∈ t, a ∈ A }。 下一個定義定義了關系,它是關系模型中對表格內容的形式化。 定義關系是帶有表頭H和表體B的一個元組(H, B),表體是都有域H的元組的集合。 這種關系緊密的對應于在一階邏輯中通常叫做謂詞外延的東西,除了我們這里用屬性名字標識在謂詞中的位置之外。在關系模型中數據庫模式是由一組關系名字,與這些名字相關聯的表頭,和在數據庫模式的每個實例上保持的約束構成的。 定義在表頭H上的關系全集'U是有表頭H的關系的非空集合。 定義關系模式(H, C)由表頭H和對有表頭H的所有關系R定義的謂詞C(R)構成。 定義 如果關系有表頭H并滿足C則它滿足關系模式(H, C)。 **鍵(碼)約束和函數依賴** 最簡單和最重要的一類關系約束是鍵(碼)約束。它告訴我們在特定關系模式的所有實例中元組可以通過它特定屬性的值來標識。 定義 超鍵(碼)被寫為屬性名字的有限集合。 定義超鍵(碼)K在關系(H, B)中保持,條件是K ? H并且在B中沒有兩個不同的元組t1和t2使t1[K] = t2[K]。 定義超鍵(碼)在表頭H之上的關系全集U中保持,條件是它在U中的所有關系中保持。 定義超鍵(碼)K保持為在H之上的關系全集U的一個候選鍵 (碼),條件是它保持為U的超鍵(碼)并且沒有K的真子集也保持為U的超鍵(碼)。 定義 函數依賴(簡寫為FD)被寫為X->Y,X和Y是屬性名字的有限集合。 定義函數依賴 X->Y在關系(H, B)中保持,條件是X和Y是H的子集并且對于在B中所有的元組t1和t2使得如果t1[X] = t2[X]則't1[Y] = t2[Y]。 定義函數依賴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+中。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看