最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL之范式的使用詳解

 更新時間:2020年10月21日 11:05:07   作者:超人不會飛  
這篇文章主要介紹了MySQL之范式的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、范式

范式的英文名稱是Normal Form,它是英國人E.F.Codd(關(guān)系數(shù)據(jù)庫的老祖宗)在上個世紀(jì)70年代提出關(guān)系數(shù)據(jù)庫模型后總結(jié)出來的。范式是關(guān)系數(shù)據(jù)庫理論的基礎(chǔ),也是我們在設(shè)計數(shù)據(jù)庫結(jié)構(gòu)過程中所要遵循的規(guī)則和指導(dǎo)方法。目前有跡可尋的共有8種范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三個范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。

第一范式(1NF)

第一范式其實是關(guān)系型數(shù)據(jù)庫的基礎(chǔ),即任何關(guān)系型數(shù)據(jù)庫都是符合第一范式的。簡單的將第一范式就是每一行的各個數(shù)據(jù)都是不可分割的,同一列中不能有多個值,如果出現(xiàn)重復(fù)的屬性就需要定義一個新的尸實體。
下面數(shù)據(jù)庫便不符合第一范式:

+------------+-------------------+
| workername | company      |
+------------+-------------------+
| John    | ByteDance,Tencent |
| Mike    | Tencent      |
+------------+-------------------+

上面描述的數(shù)據(jù)所表達(dá)的意思是,Mike在Tencent工作,而John同時在ByteDance和Tencent工作(假設(shè)這是可能的)。但是這種表達(dá)方式并不符合第一范式,即列的數(shù)據(jù)必須是不可分的,要滿足第一范式,必須是下面的這種形式:

+------------+-----------+
| workername | company  |
+------------+-----------+
| Mike    | Tencent  |
| John    | ByteDance |
| John    | Tencent  |
+------------+-----------+

第二范式(2NF)

首先,一個數(shù)據(jù)庫要滿足第二范式必須要先滿足第一范式。
我們先看一個表格:

+----------+-------------+-------+
| employee | department | head |
+----------+-------------+-------+
| Jones  | Accountint | Jones |
| Smith  | Engineering | Smith |
| Brown  | Accounting | Jones |
| Green  | Engineering | Smith |
+----------+-------------+-------+

這個表描述了被雇傭者,工作部門和領(lǐng)導(dǎo)的關(guān)系。這個表所表示的關(guān)系在現(xiàn)實生活中是完全可能存在的,現(xiàn)在讓我們考慮一個問題,如果Brown接任Accounting部門的領(lǐng)導(dǎo),我們需要怎樣對表進(jìn)行修改?這個問題將會變得非常麻煩,因為我們會發(fā)現(xiàn)數(shù)據(jù)都耦合在一起了,你很難找到一個很好的能唯一確定每一行的判斷條件來執(zhí)行你的UPDATE語句。而我們把能夠唯一表示數(shù)據(jù)庫中表的一行的數(shù)據(jù)成為這個表的主鍵。 因此,沒有主鍵的表是不符合第二范式的,也就是說符合第二范式的表需要規(guī)定主鍵。

因此我們?yōu)榱耸股厦娴谋矸系诙妒?,需要將它拆分為兩個表:

+----------+-------------+
| employee | department |
+----------+-------------+
| Brown  | Accounting |
| Green  | Engineering |
| Jones  | Accounting |
| Smith  | Engineering |
+----------+-------------+

+-------------+-------+
| department | head |
+-------------+-------+
| Accounting | Jones |
| Engineering | Smith |
+-------------+-------+

在這兩個表中,第一個表的主鍵為employee,第二個表的主鍵為department。在這種情況下,完成上面的問題就顯得非常簡單了。

第三范式(3NF)

一個關(guān)系型數(shù)據(jù)庫要滿足第三范式必須要先滿足第二范式。
將第三范式前,我們同樣先看兩個表:

+-----------+-------------+---------+-------+
| studentid | studentname | subject | score |
+-----------+-------------+---------+-------+
| 1     | Mike    | Math  | 96  |
| 2     | John    | Chinese | 85  |
| 3     | Kate    | History | 100  |
+-----------+-------------+---------+-------+

+-----------+-----------+-------+
| subjectid | studentid | score |
+-----------+-----------+-------+
| 101    | 1     | 96  |
| 111    | 3     | 100  |
| 201    | 2     | 85  |
+-----------+-----------+-------+

上面的兩個表格的主鍵分別為studentid和subjectid,很顯然兩個表都符合第二范式。

但是我們會發(fā)現(xiàn)這兩個表有重復(fù)冗余的數(shù)據(jù)score。因此第三范式就是要消除冗余的數(shù)據(jù),具體到上面的情況,就是兩個表只有一個能夠存在score這一列數(shù)據(jù)。那么怎么將這兩個表聯(lián)系起來呢,這里就出現(xiàn)了外鍵。如果兩個表中有冗余重復(fù)的列,而且這個表中的一個非主鍵列在另一個表中是主鍵,那么我們?yōu)榱讼哂嗔锌梢园堰@個非主鍵列作為聯(lián)系兩個表的橋梁,也就是外鍵。 通過觀察可以發(fā)現(xiàn),studentid在第一個表中是主鍵,在第二個表中是非主鍵,所以他就是第二個表的外鍵。因此上述情況我們有了以下符合第三范式的寫法:

+-----------+-------------+---------+
| studentid | studentname | subject |
+-----------+-------------+---------+
| 1     | Mike    | Math  |
| 2     | John    | Chinese |
| 3     | Kate    | History |
+-----------+-------------+---------+

+-----------+-----------+-------+
| subjectid | studentid | score |
+-----------+-----------+-------+
| 101    | 1     | 96  |
| 111    | 3     | 100  |
| 201    | 2     | 85  |
+-----------+-----------+-------+

可以發(fā)現(xiàn)在設(shè)定了外鍵之后,第一個表即使刪除了score列,也可以通過studentid在第二個表中查找到相應(yīng)的score的值,這樣即消除了數(shù)據(jù)的冗余,又不會影響查找,滿足第三范式。

二、范式的優(yōu)點和缺點

范式的優(yōu)點

  • 范式化的更新操作通常要比反范式化要快。
  • 當(dāng)數(shù)據(jù)較好地范式化時,就只有很少或者沒有重復(fù)的數(shù)據(jù),所以只需要修改更少的數(shù)據(jù)。
  • 范式化的表通常都比較小,可以更好的放在內(nèi)存中,所以執(zhí)行操作會更快。
  • 很少有多余的數(shù)據(jù)意味著檢索列表數(shù)據(jù)時更少需要DISTINCT或者GROUP BY語句。

范式的缺點

  • 范式化的缺點就是通常需要關(guān)聯(lián)。稍微復(fù)雜一些的查詢語句在符合范式的數(shù)據(jù)庫上都可能需要至少一次關(guān)聯(lián),也許更多,這不但代價昂貴,也可能使一些索引策略無效。

到此這篇關(guān)于MySQL之范式的使用詳解的文章就介紹到這了,更多相關(guān)MySQL 范式 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Centos 6.4源碼安裝mysql-5.6.28.tar.gz教程

    Centos 6.4源碼安裝mysql-5.6.28.tar.gz教程

    這篇文章主要為大家詳細(xì)介紹了Centos 6.4源碼安裝mysql-5.6.28.tar.gz教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SQL語句解析執(zhí)行的過程及原理

    SQL語句解析執(zhí)行的過程及原理

    這篇文章主要介紹了SQL語句解析執(zhí)行的過程及原理,文章主要通過獲得SqlSession對象后就能執(zhí)行各種CRUD方法展開全文內(nèi)容需要的小伙伴可以參考一下,希望對你有所幫助
    2022-03-03
  • 詳解mysql數(shù)據(jù)去重的三種方式

    詳解mysql數(shù)據(jù)去重的三種方式

    本文主要介紹了mysql數(shù)據(jù)去重的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MySQL8.0修改Root密碼的方法步驟

    MySQL8.0修改Root密碼的方法步驟

    MySQL在初次安裝之后默認(rèn)設(shè)置了root用戶的密碼,對于一些情況下需要修改root用戶密碼的操作,本文主要介紹了MySQL8.0修改Root密碼的方法步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • mysql一鍵安裝教程 mysql5.1.45全自動安裝(編譯安裝)

    mysql一鍵安裝教程 mysql5.1.45全自動安裝(編譯安裝)

    這篇文章主要介紹了mysql一鍵安裝教程,一鍵安裝MySQL5.1.45,全自動安裝MySQL SHELL程序,實現(xiàn)編譯安裝,感興趣的
    2016-06-06
  • 詳解mysql基本操作語句命令

    詳解mysql基本操作語句命令

    本文介紹了 鏈接Mysql,以及增刪改查等功能,需要的朋友可以參考
    2017-04-04
  • MySQL備份與恢復(fù)之保證數(shù)據(jù)一致性(5)

    MySQL備份與恢復(fù)之保證數(shù)據(jù)一致性(5)

    這篇文章主要介紹了MySQL備份與恢復(fù)之保證數(shù)據(jù)一致性,感興趣的小伙伴們可以參考一下
    2015-08-08
  • MySQL數(shù)據(jù)庫開發(fā)的36條原則(小結(jié))

    MySQL數(shù)據(jù)庫開發(fā)的36條原則(小結(jié))

    這篇文章主要介紹了MySQL數(shù)據(jù)庫開發(fā)的36條原則(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MySQL啟動1053錯誤解決方法

    MySQL啟動1053錯誤解決方法

    創(chuàng)建mysql服務(wù)時,系統(tǒng)已提示創(chuàng)建服務(wù)成功,但是net start命令提示啟動失敗,并在services.msc中提示1053錯誤
    2012-11-11
  • 詳解MySQL如何交換兩列值數(shù)據(jù)

    詳解MySQL如何交換兩列值數(shù)據(jù)

    最近遇到了需要將表里的兩列值進(jìn)行互換,原因是存庫時值存放反了,在編碼語言中,我們一般可以通過定義一個臨時變量c,將b賦值給c,a賦值給b,c賦值給a就能實現(xiàn)a和b的值互換,那么,在mysql中,非儲存過程的sql語句,沒有定義變量的過程,如何實現(xiàn)呢,接下來由小編給大家介紹一下
    2024-01-01

最新評論

军事| 岑巩县| 清河县| 沛县| 理塘县| 安徽省| 永川市| 澄城县| 巴里| 哈尔滨市| 陵水| 登封市| 互助| 本溪| 堆龙德庆县| 皮山县| 通辽市| 东至县| 牡丹江市| 梁平县| 溧阳市| 东港市| 泽普县| 色达县| 全椒县| 安新县| 南部县| 颍上县| 天峻县| 乌兰浩特市| 泽库县| 安多县| 灵寿县| 靖西县| 南城县| 镇原县| 积石山| 柳林县| 夏津县| 嘉义县| 新昌县|