數(shù)據(jù)庫四大范式

18.7.24
一空凸、概念
在創(chuàng)建一個數(shù)據(jù)庫的過程中,必須依照一定的準(zhǔn)則寸痢,這些準(zhǔn)則被稱為范式呀洲,從第一到第六共六個范式。
二、背景
數(shù)據(jù)庫的規(guī)范化(上一篇博客有寫到)的程度不同道逗,便有了這么多種范式丛楚。數(shù)據(jù)庫范式是數(shù)據(jù)庫設(shè)計必不可少的知識,沒有對范式的理解憔辫,就無法設(shè)計出高效率趣些、優(yōu)雅的數(shù)據(jù)庫,甚至設(shè)計出錯誤誤的數(shù)據(jù)庫贰您。
三坏平、目標(biāo)
一般數(shù)據(jù)庫設(shè)計只要遵循第一范式,第二范式锦亦,和第三范式就足夠了舶替,滿足這些規(guī)范的數(shù)據(jù)庫是簡潔的、結(jié)構(gòu)明晰的杠园,同時顾瞪,不會發(fā)生插入(insert)、刪除(delete)和更新(update)操作異常抛蚁。
使用正確的數(shù)據(jù)結(jié)構(gòu)陈醒,不僅有助于對數(shù)據(jù)庫進行相應(yīng)的存取操作,還可以極大地簡化應(yīng)用程序中的其他內(nèi)容(查詢瞧甩、窗體钉跷、報表、代碼等)肚逸,按照“數(shù)據(jù)庫規(guī)范化”對表進行設(shè)計爷辙,其目的就是減少數(shù)據(jù)庫中的數(shù)據(jù)冗余,以增加數(shù)據(jù)的一致性朦促。
四膝晾、概念
1、候選鍵:唯一識別該表的屬性或?qū)傩越M务冕。而其任何血当、子集都不能再標(biāo)識,則稱該屬性組為(超級碼)候選碼洒疚。
例如:在學(xué)生實體中歹颓,“學(xué)號”是能唯一的區(qū)分學(xué)生實體的,同時又假設(shè)“姓名”油湖、“班級”的屬性組合足以區(qū)分學(xué)生實體巍扛,那么{學(xué)號}和{姓名,班級}都是(超級碼)候選碼乏德。
2撤奸、所謂依賴出嘹,就是函數(shù)依賴舅列,就是映射炭序《逯辏可以一對一,可以一對多府喳,可以多對多蒲肋。
五、六大范式

  1. 第一范式(1NF):屬性不可拆分 或 無重復(fù)的列
    一個屬性不允許再分成多個屬性來建立列钝满。事實上兜粘,在目前的DBMS中是不可能拆分屬性的,因為他們不允許這么做弯蚜。
    如果出現(xiàn)重復(fù)的屬性孔轴,就可能需要定義一個新的實體,新的實體由重復(fù)的屬性構(gòu)成碎捺,新實體與原實體之間為一對多關(guān)系路鹰。第一范式的模式要求屬性值不可再分裂成更小部分,即屬性項不能是屬性組合或是由一組屬性構(gòu)成收厨。
    簡而言之晋柱,第一范式就是無重復(fù)的列。例如帽氓,由“職工號”“姓名”“電話號碼”組成的表(一個人可能有一部辦公電話和一部移動電話)趣斤,這時將其規(guī)范化為1NF可以將電話號碼分為“辦公電話”和“移動電話”兩個屬性俩块,即職工(職工號黎休,姓名,辦公電話玉凯,移動電話)势腮。

  2. 第二范式(2NF):(就是有一個唯一主鍵,并且非主屬性對候選鍵是完全依賴漫仆。)(候選鍵可以是一個捎拯,也可以是兩個,如果是關(guān)系表盲厌,一個候選鍵中一般有兩個主屬性署照,所以非主屬性對候選鍵中的兩個主屬性的依賴,就要看是否是完全依賴吗浩。部分依賴會引起數(shù)據(jù)冗余建芙。)
    第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)懂扼。第二范式(2NF)要求數(shù)據(jù)庫表中的每個實例或行必須可以被唯一地區(qū)分禁荸。為實現(xiàn)區(qū)分通常需要為表加上一個列右蒲,以存儲各個實例的唯一標(biāo)識。
    完全函數(shù)依賴
    先講講什么是部分函數(shù)依賴赶熟。
    部分函數(shù)依賴瑰妄,就是多個屬性決定另一個屬性,但事實上映砖,這多個屬性是有冗余的间坐。例如,(學(xué)號邑退,班級)->姓名眶诈,事實上,只需要學(xué)號就能決定姓名瓜饥,因此班級是冗余的逝撬,應(yīng)該去掉。
    如果關(guān)系模型R為第一范式乓土,并且R中的每一個非主屬性完全函數(shù)依賴于R的某個候選鍵宪潮,則稱R為第二范式模式(如果A是關(guān)系模式R的候選鍵的一個屬性,則稱A是R的主屬性趣苏,否則稱A是R的非主屬性)狡相。
    因此第二范式的目標(biāo)就是消除函數(shù)依賴關(guān)系中左邊存在的冗余屬性。
    例如食磕,在選課關(guān)系表(學(xué)號尽棕,課程號,成績彬伦,學(xué)分)滔悉,關(guān)鍵字為組合關(guān)鍵字(學(xué)號,課程號)单绑,但由于非主屬性學(xué)分僅依賴于課程號回官,對關(guān)鍵字(學(xué)號,課程號)只是部分依賴搂橙,而不是完全依賴歉提,因此此種方式會導(dǎo)致數(shù)據(jù)冗余以及更新異常等問題,解決辦法是將其分為兩個關(guān)系模式:學(xué)生表(學(xué)號区转,課程號苔巨,分?jǐn)?shù))和課程表(課程號,學(xué)分)废离,新關(guān)系通過學(xué)生表中的外關(guān)鍵字課程號聯(lián)系侄泽,在需要時進行連接。
    3.第三范式(3NF):消除傳遞依賴
    滿足第三范式的數(shù)據(jù)庫必須先滿足第二范式厅缺。
    也就是蔬顾,數(shù)據(jù)庫中的非主屬性僅能依賴于候選鍵宴偿,不存在與其他非主屬性的關(guān)聯(lián)。
    例如诀豁,圖書窄刘,圖書室的關(guān)系。圖書包括編號舷胜、出版商娩践、頁碼等信息,圖書室包括圖書室編號烹骨、所存圖書(外鍵)翻伺。其中,圖書室的表中不應(yīng)該存儲任何圖書的具體信息(例如沮焕,出版商吨岭。。)峦树,而只能通過主鍵圖書編號來獲得對應(yīng)圖書的信息辣辫。(這個例子只說明了不能部分依賴,跟傳遞依賴沒啥關(guān)系魁巩,真是水凹泵稹)
    以學(xué)生表(學(xué)號,姓名谷遂,課程號葬馋,成績)為例,其中學(xué)生姓名無重名肾扰,所以該表有兩個候選碼(學(xué)號畴嘶,課程號)和(姓名,課程號)白对,故存在函數(shù)依賴:學(xué)號——>姓名掠廓,(學(xué)號,課程號)——>成績甩恼,唯一的非主屬性成績對碼不存在部分依賴,也不存在傳遞依賴沉颂,所以屬性屬于第三范式条摸。
    簡而言之,第三范式(3NF)要求一個數(shù)據(jù)庫表中不包含已在其它表中已包含的非主屬性信息铸屉。例如钉蒲,存在一個部門信息表,其中每個部門有部門編號(dept_id)彻坛、部門名稱顷啼、部門簡介等信息踏枣。那么在的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關(guān)的信息再加入員工信息表中钙蒙。如果不存在部門信息表茵瀑,則根據(jù)第三范式(3NF)也應(yīng)該構(gòu)建它,否則就會有大量的數(shù)據(jù)冗余躬厌。簡而言之马昨,第三范式就是屬性不依賴于其它非主屬性。
    總結(jié)一下:兩個表相關(guān)聯(lián)扛施,一個表只能有另一個表的一個依賴鸿捧。
    一般系統(tǒng)設(shè)計需要符合第三范式。第三范式簡而言之兩個關(guān)聯(lián)的表疙渣,一個表只能有另一個表的候選鍵匙奴,不能有共同的非主屬性。
    即妄荔,兩個關(guān)聯(lián)表饥脑,一個表A有另一個表B的非主屬性c,表A有候選鍵a和b懦冰,b也是表B的候選鍵灶轰,此時的傳遞依賴關(guān)系為:A-B,B-c刷钢。此時不滿足第三范式笋颤。
    4.BC范式(BCNF):(候選鍵存在多個屬性時,多個主屬性直接要消除傳遞依賴關(guān)系)
    (1)所有非主屬性對每一個碼都是完全函數(shù)依賴内地;
    (2)所有的主屬性對于每一個不包含它的碼伴澄,也是完全函數(shù)依賴;
    (3)沒有任何屬性完全函數(shù)依賴于非碼的任意一個組合阱缓。
    R屬于3NF非凌,不一定屬于BCNF,如果R屬于BCNF荆针,一定屬于3NF敞嗡。

     就是對于候選碼中包含多個屬性時,里面的關(guān)鍵字段互相沒有依賴航背。
     假設(shè)倉庫管理關(guān)系表(倉庫號喉悴,存儲物品號,管理員號玖媚,數(shù)量)箕肃,滿足一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品今魔,則存在如下關(guān)系:
    

(倉庫號勺像,存儲物品號)——>(管理員號障贸,數(shù)量)
(管理員號,存儲物品號)——>(倉庫號吟宦,數(shù)量)
所以篮洁,(倉庫號,存儲物品號)和(管理員號督函,存儲物品號)都是倉庫管理關(guān)系表的候選碼嘀粱,表中唯一非關(guān)鍵字段為數(shù)量,它是符合第三范式的辰狡。但是锋叨,由于存在如下決定關(guān)系:
(倉庫號)——>(管理員號)
(管理員號)——>(倉庫號)
即存在關(guān)鍵字段決定關(guān)鍵字段的情況,因此其不符合BCNF宛篇。把倉庫管理關(guān)系表分解為兩個關(guān)系表倉庫管理表(倉庫號娃磺,管理員號)和倉庫表(倉庫號,存儲物品號叫倍,數(shù)量)偷卧,這樣這個數(shù)據(jù)庫表是符合BCNF的,并消除了刪除異常吆倦、插入異常和更新異常听诸。

5.第四范式(4NF):(一個表的主鍵只對應(yīng)一個多值)
對于每一個X->Y,X都能找到一個候選碼( 若關(guān)系中的某一屬性組的值能唯一地表示一個元組,而其真子集不行,則稱該屬性組為候選碼)蚕泽。
設(shè)R是一個關(guān)系模型晌梨,D是R上的多值依賴集合。如果D中存在凡多值依賴X->Y時须妻,X必是R的超鍵仔蝌,那么稱R是第四范式的模式。

例如荒吏,職工表(職工編號敛惊,職工孩子姓名,職工選修課程)绰更,在這個表中瞧挤,同一個職工可能會有多個職工孩子姓名,同樣动知,同一個職工也可能會有多個職工選修課程皿伺,即這里存在著多值事實,不符合第四范式盒粮。如果要符合第四范式,只需要將上表分為兩個表奠滑,使它們只有一個多值事實丹皱,例如職工表一(職工編號妒穴,職工孩子姓名),職工表二(職工編號摊崭,職工選修課程)讼油,兩個表都只有一個多值事實,所以符合第四范式呢簸。

6矮台、總結(jié):
第一范式、第二范式是對于本表內(nèi)根时。第三范式瘦赫、BC范式和第四范式涉及多表。
1蛤迎、第一范式比較簡單确虱,屬性不可拆分。電話號碼一個字段可以分為手機號碼和座機號碼兩個字段替裆。
2校辩、第二范式不難理解,非主屬性對候選鍵完全依賴辆童,不能存在部分依賴宜咒。候選鍵只有一個主屬性時則一定符合第二范式。
候選鍵包含多個主屬性時把鉴,可能出現(xiàn)不符合第二范式的情況故黑,就是非主屬性對多屬性候選鍵部分函數(shù)依賴。在非主屬性對多屬性候選鍵完全函數(shù)依賴時纸镊,才符合第二范式倍阐。
3、第三范式去除冗余逗威,非主屬性只能存在一個表中峰搪,不應(yīng)該存在多個表中,要去除無意義的數(shù)據(jù)冗余凯旭。
4概耻、BC范式則不應(yīng)存在關(guān)鍵字決定關(guān)鍵字的情況。也就是在關(guān)聯(lián)關(guān)系表中罐呼,一個表有多個屬性構(gòu)成復(fù)合的候選鍵鞠柄,主屬性直接不應(yīng)該有互相依賴。工號和身份證號是相互依賴嫉柴。
5厌杜、第四范式,對于候選鍵只能存在不超過1個多值屬性。要求把同一表內(nèi)的多對多關(guān)系刪除夯尽。

參考:https://blog.csdn.net/yahohi/article/details/7529710
https://blog.csdn.net/hyqsong/article/details/52245195
https://blog.csdn.net/dove_knowledge/article/details/71434960

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞧壮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匙握,更是在濱河造成了極大的恐慌咆槽,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圈纺,死亡現(xiàn)場離奇詭異秦忿,居然都是意外死亡,警方通過查閱死者的電腦和手機蛾娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門灯谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茫叭,你說我怎么就攤上這事酬屉。” “怎么了揍愁?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵呐萨,是天一觀的道長。 經(jīng)常有香客問我莽囤,道長谬擦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任朽缎,我火速辦了婚禮惨远,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘话肖。我一直安慰自己北秽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布最筒。 她就那樣靜靜地躺著贺氓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪床蜘。 梳的紋絲不亂的頭發(fā)上辙培,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音邢锯,去河邊找鬼扬蕊。 笑死,一個胖子當(dāng)著我的面吹牛丹擎,可吹牛的內(nèi)容都是我干的尾抑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛮穿!你這毒婦竟也來了庶骄?” 一聲冷哼從身側(cè)響起毁渗,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤践磅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灸异,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體府适,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年肺樟,在試婚紗的時候發(fā)現(xiàn)自己被綠了檐春。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡么伯,死狀恐怖疟暖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情田柔,我是刑警寧澤俐巴,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站硬爆,受9級特大地震影響欣舵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缀磕,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一缘圈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袜蚕,春花似錦糟把、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颠黎,卻和暖如春另锋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狭归。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工夭坪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人过椎。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓室梅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亡鼠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 參考來源 解釋一下關(guān)系數(shù)據(jù)庫的第一第二第三范式赏殃? 第一,二间涵,三和四范式 數(shù)據(jù)庫設(shè)計范式2——BC范式和第四范式 主...
    秦漢郵俠閱讀 1,327評論 0 0
  • 世界衛(wèi)生組織指出勾哩,全球吸煙者總數(shù)約為13億抗蠢,占世界人口的1/4左右,每年有500多萬人因患吸煙相關(guān)疾病死亡...
    方舟say閱讀 199評論 0 0
  • 今天漲了點新知識?“疲軟下的陰莖是向左偏還是右偏決定你的大腦左偏還是右偏”思劳,研究了下發(fā)現(xiàn)?我的尿右偏迅矛,另外??我掏...
    牛筋燉豬腳閱讀 237評論 0 1
  • 攜一抹香花與你相遇 攬一份情懷與你相知 繁華滿地的歲月里 遇見的都是奇跡 即使是一場演出 我亦是幸運的舞者 在絢麗...
    萱萱拾遺小角落閱讀 129評論 0 1
  • 一根筷子吃芝麻糊,這件小事 (老板思維與員工思維) 就在前天潜叛,一個去年服務(wù)過的客戶張總打電話給我秽褒,讓我安排約另外一...
    roycol閱讀 1,552評論 7 18