<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 簡介  好了,上面已經介紹了我們掌握范式所需要的全部基礎概念,下面我們就來講范式。 范式可以理解為一種規范等級。 首先要明白,范式的包含關系: >  一個數據庫設計如果符合第二范式,一定也符合第一范式。如果符合第三范式,一定也符合第二范式… ## **第一范式(1NF):屬性不可分。** 第一范式的特點: * 有主關鍵字 * 主鍵不能為空 * 主鍵不能重復 * 字段不可以再分 下表是否滿足第一范式? | StudyNo? ? | Name| Sex | Contact | | -- | -- | -- | -- | | 20040901 | john | Male | Email:kkkk@ee.net,phone:222456 | | 20040901 | mary| Female | Email:kkk@fff.net phone:123455 | Ps:這個表中,屬性值“分”了: ![](https://box.kancloud.cn/94c991bb62fb987d5994cab7f5151713_425x87.png) Ps:這個表中,屬性值“分”了: ![](https://box.kancloud.cn/640d42694a00d68dcdf01a8fd9b97cad_425x115.png) 以上表格都是否滿足第一范式?(**不滿足屬性不可分!**) **注意:** 這兩種情況都不滿足第一范式。不滿足第一范式的數據庫,不是關系數據庫!所以,我們在任何關系數據庫管理系統中,做不出這樣的“表”來。 ## **第二范式(2NF):非主屬性完全依賴于碼。** 定義:如果關系模式R是第一范式的,而且關系中每一個非主屬性不部分依賴于主鍵,稱R是第二范式的。 所以第二范式的主要任務就是滿足第一范式的前提下,消除部分函數依賴。 觀察這個表格是否滿足第二范式: | StudyNo? | Name | Sex? | Email |Phone? | ClassNo??|ClassAddress | | -- | -- | -- | -- | -- | -- | -- | | 01 | john | Male | ?k@ee.net | 222456 | 200401| A樓2單元 | | 02 | mary | Female | kkk@fff.net | 123455 | 200402 | A樓3單元 | 這個表完全滿足于第一范式主鍵由`StudyNo`和`ClassNo`組成,這樣才能定位到指定行,但是,`ClassAddress`部分依賴于關鍵字(`ClassNo-〉ClassAddress`),所以要變為兩個表: 表一: | StudyNo? | Name | Sex? | Email |Phone? | ClassNo??| | -- | -- | -- | -- | -- | -- | -- | | 01 | john | Male | ?k@ee.net | 222456 | 200401| | 02 | mary | Female | kkk@fff.net | 123455 | 200402 | 表二: | ClassNo??|ClassAddress | | -- | -- | | 200401| A樓2單元 | | 200402 | A樓3單元 | ### **再來看一個例子:** ![2015-08-11/55c974dc2c250](http://box.kancloud.cn/2015-08-11_55c974dc2c250.png) **分析:** 一個學生上一門課,一定在特定某個教室。所以有(學生,課程)->教室 一個學生上一門課,一定是特定某個老師教。所以有(學生,課程)->老師 一個學生上一門課,他老師的職稱可以確定。所以有(學生,課程)->老師 一個學生上一門課,一定是特定某個教材。所以有(學生,課程)->教材 一個學生上一門課,一定在特定時間。所以有(學生,課程)->上課時間 因此(學生,課程)是一個碼。 然而,一個課程,一定指定了某個教材,一年級語文肯定用的是《小學語文1》 那么就有課程->教材。(學生,課程)是個碼,課程卻決定了教材,這就叫 不完全依賴,或者說部分依賴。出現這樣的情況,就不滿足第二范式! **思考:** 那么,如果我們希望他滿足第二范式,仿照剛才的例子我們應該怎樣做了? **解決:** 1. 校長要新增加一門課程叫“微積分”,教材是《大學數學》,怎么辦?學生還沒選課,而學生又是主屬性,主屬性不能空,課程怎么記錄呢,教材記到哪呢(插入異常) 2. 下學期沒學生學一年級語文(上)了,學一年級語文(下)去了,那么表中將不存在一年級語文(上),也就沒了《小學語文1》。這時候,校長問:一年級語文(上)用的什么教材啊?……郁悶了吧?(刪除異常) 3. 校長說:一年級語文(上)換教材,換成《大學語文》。有10000個學生選了這么課,改動好大啊!改累死了……郁悶了吧?(修改異常)那應該怎么解決呢?投影分解,將一個表分解成兩個或若干個表。 **解決:** ![2015-08-11/55c9777bbb1cd](http://box.kancloud.cn/2015-08-11_55c9777bbb1cd.png) ## **第三范式(3NF)(不依賴于其它非主屬性[消除傳遞依賴] )。** | StudyNo | Name | Sex | Email | bounsLevel | bouns | | -- | -- | -- | -- | -- | -- | | 40901 | john | Male | kkkk@ee.net | 良 | $1000 | | 40902 | mary | female | kkk@fff.net | 差 | $600 | 這個完全滿足了第二范式,但是`bounsLevel`和`bouns`存在傳遞依賴。 **解決:** 更改為: 表一: | StudyNo|Name | Sex | Email| bounsNo | | -- | -- | -- | -- | -- | | 20040901 | john | Male | kkkk@ee.net | 1 | | 20040902 | mary | Female | kkk@fff.net | 2 | 表二: | bounsNo | bounsLevel | bouns | | -- | -- | -- | | 1 | 優秀 | $1000 | | 2 | 良 | $600 | ### 再來看一個示例: ![2015-08-11/55c97a35ea926](http://box.kancloud.cn/2015-08-11_55c97a35ea926.png) 有什么問題嗎? 想想: 1. 老師升級了,變教授了,要改數據庫,表中有N條,改了N次……(修改異常) 2. 沒人選這個老師的課了,老師的職稱也沒了記錄……(刪除異常) 3. 新來一個老師,還沒分配教什么課,他的職稱記到哪?……(插入異常) 那應該怎么解決呢?和上面一樣,投影分解: | 學生 | 課程 | 老師| 教室| 上課時間 | |---- |---|---| -- |---| | 小明 | 小明 | 大寶 | 101 | 14:30 | | 老師 | 老師職稱 | |---- |---|---| | 大寶 | 副教授 | ## BC范式(BCNF):符合3NF,并且,主屬性不依賴于主屬性 若關系模式屬于第一范式,且每個屬性都不傳遞依賴于鍵碼,則R屬于BC范式。 通常BC范式的條件有多種等價的表述:每個非平凡依賴的左邊必須包含鍵碼;每個決定因素必須包含鍵碼。 BC范式既檢查非主屬性,又檢查主屬性。當只檢查非主屬性時,就成了第三 范式。滿足BC范式的關 系都必然滿足第三范式。 還可以這么說:**若一個關系達到了第三范式,并且它只有一個候選碼,或者它的每個候選碼都是單屬性,則該關系自然達到BC范式。** 一般,一個數據庫設計符合3NF或BCNF就可以了。在BC范式以上還有第四范式、第五范式。 ### 詳解: 如果關系模式R(U,F)的所有屬性(包括主屬性和非主屬性)都不傳遞依賴于R的任何候選關鍵字,那么稱關系R是屬于BCNF的。或是關系模式 R,如果每個決定因素都包含關鍵字(而不是被關鍵字所包含),則RCNF的關系模式。 例:配件管理關系模式 WPE(WNO,PNO,ENO,QNT)分別表倉庫號,配件號,職工號,數量。 有以下條件: * 一個倉庫有多個職工。 * 一個職工僅在一個倉庫工作。 * 每個倉庫里一種型號的配件由專人負責,但一個人可以管理幾種配件。 * 同一種型號的配件可以分放在幾個倉庫中。 分析: 由以上得 PNO 不能確定QNT,由組合屬性(WNO,PNO)來決定,存在函數依賴(WNO,PNO) -> ENO。由于每個倉庫里的一種配件由專人負責,而一個人可以管理幾種配件,所以有組合屬性(WNO,PNO)才能確定負責人,有(WNO,PNO)- > ENO。因為 一個職工僅在一個倉庫工作,有ENO -> WNO。由于每個倉庫里的一種配件由專人負責,而一個職工僅在一個倉庫工作,有 (ENO,PNO)-> QNT。 找一下候選關鍵字,因為(WNO,PNO) -> QNT,(WNO,PNO)-> ENO ,因此 (WNO,PNO)可以決定整個元組,是一個候選關鍵字。根據ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)也能決 定整個元組,為另一個候選關鍵字。屬性ENO,WNO,PNO 均為主屬性,只有一個非主屬性QNT。它對任何一個候選關鍵字都是完全函數依賴的,并且是直接依賴,所以該關系模式是3NF。 分析一下主屬性。因為ENO->WNO,主屬性ENO是WNO的決定因素,但是它本身不是關鍵字,只是組合關鍵字的一部分。這就造成主屬性WNO對 另外一個候選關鍵字(ENO,PNO)的部 分依賴,因為(ENO,PNO)-> ENO但反過來不成立,而P->WNO,故(ENO,PNO)-> WNO 也是傳遞依賴。 雖然沒有非主屬性對候選關鍵遼的傳遞依賴,但存在主屬性對候選關鍵字的傳遞依賴,同樣也會帶來麻煩。如一個新職工分配到倉庫工作,但暫時處于實習階段,沒 有獨立負責對某些配件的管理任務。由于缺少關鍵字的一部分PNO而無法插入到該關系中去。又如某個人改成不管配件了去負責安全,則在刪除配件的同時該職工 也會被刪除。 解決辦法: 分成管理EP(ENO,PNO,QNT),關鍵字是(ENO,PNO)工作EW(ENO,WNO)其關鍵字是ENO 缺點:分解后函數依賴的保持性較差。如此例中,由于分解,函數依賴(WNO,PNO)-> ENO 丟失了, 因而對原來的語義有所破壞。沒有體現出每個倉庫里一種部件由專人負責。有可能出現 一部件由兩個人或兩個以上的人來同時管理。因此,分解之后的關系模式降低了部分完整性約束。 ## *第四范式:* 要求把同一表內的多對多關系刪除。 ## *第五范式:* 從最終結構重新建立原始結構。 > 并且,**某些情況下,過于范式化甚至會對數據庫的邏輯可讀性和使用效率起到阻礙**。數據庫中一定程度的冗余并不一定是壞事情。 **但在絕大多數應用中不需要設計到第四和第五這兩種程度**。如果你對第四范式、第五范式感興趣可以看一看專業教材,從頭學起,并且忘記我說的一切,以免對你產生誤導。
                  <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>

                              哎呀哎呀视频在线观看