數(shù)據(jù)庫筆記(十一)—— 范式

一般而言多矮,關系數(shù)據(jù)庫的設計目標是生成一組關系模式氯析,使我們存儲信息時避免不必要的冗余缎岗,并且讓我們可以方便地獲取信息静尼。這是通過設計滿足適當范式(normal form)的模式來實現(xiàn)的。

引例

  • 首先有如下兩個模式

    • instructor( <u>ID</u>, name, dept_name, salary )
    • department( <u>dept_name</u>, building, budget )
  • 若將上面兩個模式合并成一個大的模式

    • inst_dept(ID, name, salary, dept_name, building, budget)

    • 存在數(shù)據(jù)冗余(building和budget被存儲了多份,實際上每個系的樓和預算只要存一次就好了)

    • 存在插入鼠渺、刪除和更新異常

  • 需要分解成更小的模式

  • 并不是所有模式的分解都是有益的

    • employee(ID, name, street, city, salary)

    • 分解成下面兩個模式

      • employee1(ID, name)
      • employee2(name, street, city, salary)
    • 由于可能存在同名的可能鸭巴,所以分解以后導致了數(shù)據(jù)的丟失

      • 比如有兩個叫Sunny的人,我們用其中一個Sunny的ID去查詢他的地址信息的時候系冗,因為存在兩份信息相互混淆奕扣,導致得不到正確的結果,但是在分解之前通過ID是可以得到唯一的地址的
  • 有損分解和無損分解

    • 像上面的例子中掌敬,分解以后導致信息丟失的分解稱之為有損分解(在實際進行分解時要避免這種分解)
    • 反之則稱之為無損分解(無損分解在重新合并后可以得到和分解之前一致的狀態(tài))

函數(shù)依賴

  • 什么是函數(shù)依賴惯豆?

    • 有如下模式
      • U = {Sno, Sname, Cno, Sdept, Mname, Grade} (分別代表學號、學生姓名奔害、課程號楷兽、系、系主任华临、分數(shù))
    • Sname = f(Sno) ==>學生的姓名函數(shù)依賴于學號
      • 記作:Sno→Sname
      • 讀作:Sno推出Sname
  • 非平凡函數(shù)依賴和平凡函數(shù)依賴

    • X 和 Y 為模式U中一個或多個屬性的集合
    • 非平凡函數(shù)依賴
      • X→Y芯杀,但Y?X
    • 平凡函數(shù)依賴(包含冗余)
      • X→Y,且Y∈X
  • 完全函數(shù)依賴和部分函數(shù)依賴

    寫函數(shù)依賴時雅潭,完全函數(shù)依賴和部分函數(shù)依賴的寫法中揭厚,P和F是寫在箭頭的正上方的,由于Markdown不能很好的展現(xiàn)扶供,就標在了箭頭的右上角
    所以用下面的表示法:

    • F :完全依賴
    • P :部分依賴
    • 完全函數(shù)依賴
      • 在模式R(U)中X→Y筛圆,但是對于任意X的真子集X, 都沒有X→Y, 則稱Y完全函數(shù)依賴于X椿浓,記作X→FY
      • X實際上就是能推出Y的最小集
      • 例如:(Sno, Cno)→Grade
    • 部分函數(shù)依賴
      • 在模式R(U)中X→Y太援,存在某個X的真子集X, 有X→Y, 則稱Y部分函數(shù)依賴于X扳碍,記作X→PY
      • 例如:(Sno, Cno)→Sdept
      • 而實際上:Sno→Sdept 也是可行的提岔,上面的依賴關系中,Cno是冗余的
  • 傳遞函數(shù)依賴

    • X→Y, Y→Z ==> X→Z

  • 超碼笋敞、候選碼和主碼

    • 可以沿用SQL中碼的概念
    • 超碼是可以唯一標識一個元組的屬性集(可以有多個)
    • 候選碼是每個超碼中去除不必要屬性但是仍然能夠標識一個元素的最精簡屬性集(可以有多個)
    • 主碼只有一個碱蒙,在候選碼中選一個當做主碼
  • 用函數(shù)依賴來定義

    • K為R< U, F >中的屬性或屬性組合,若K→U(→上面有一個F)(即U完全依賴于K)液样,則稱K為R的候選碼振亮,若候選碼多與一個,則選擇其中一個作為主碼
  • 主屬性與非主屬性

    • 主屬性:包含于某個候選碼的屬性
    • 非主屬性:不被任何候選碼包含的屬性

范式

  • 首先還是構造一個例子

    • R< U, F>

    • U = {Sno, Sdept, Sloc, Cno, Grade} (分別代表學號鞭莽、系坊秸、系所在樓、課程號澎怒、分數(shù))

    • F = {(Sno, Cno)→F Grade, Sno→Sdept, (Sno, Cno)→P Sdept, Sno→Sloc, (Sno, Cno)→PSloc}

    • 主屬性:Sno, Cno

    • 非主屬性:Sdept, Sloc, Grade

    • 上面的依賴關系可以用下面的圖示表示

      1.png
  • 第一范式(1NF)

    • 一個域是原子的(atomic)褒搔,則該域的元素被認為是不可分的單元

      • 比如name屬性就可以不是原子的阶牍,name(first_name, middle_name, last_name)
    • 一個關系模式R屬于第一范式(1NF)==>R上的所有屬性都是原子的

    • 上述例子中的每個屬性都是原子的,所以滿足第一范式

  • 第二范式(2NF)

    • R ∈ 1NF星瘾,并且每一個非主屬性完全依賴于碼(實際上就是在1NF的基礎上走孽,去除了非主屬性對碼的部分函數(shù)依賴

    • 上述例子中存在非主屬性對碼的部分函數(shù)依賴,故不滿足2NF

    • 對上述例子作出如下分解

      • R1< {Sno, Cno, Grade}, {(Sno, Cno)→FGrade} >

      • R2< {Sno, Sdept, Sloc}, {Sno→Sdept, Sdept→Sloc}>

        • ps:其中R2隱含了Sno→Sloc (由之后即將學習的AmStrong公理可以推算出來)
      • 上面的依賴關系可以用下面的圖示表示

        2.png
    • 經(jīng)過上面的分解之后琳状,每一個非主屬性都完全依賴于碼了磕瓷,所以分解之后的模式滿足2NF

  • 第三范式(3NF)

    • R∈2NF, 并且不存在非主屬性對碼的傳遞依賴(實際上就是在2NF的基礎上去除了非主屬性對碼的傳遞依賴

    • 上述經(jīng)過分解以后的模式中存在非主屬性對碼的傳遞依賴,故不滿足3NF

      • Sno→Sdept, Sdept→Sloc ==> Sno→Sloc
    • 對上面的模式進行進一步的分解

      • R1< {Sno, Cno, Grade}, {(Sno, Cno)→FGrade} >

      • R2< {Sno, Sdept}, {Sno→Sdept} >

      • R3< {Sdept, Sloc}, {Sdept→Sloc} >

      • 上面的依賴關系可以用下面的圖示表示

        3.png
    • 經(jīng)過上面的進一步分解之后念逞,就不存在非主屬性對碼的傳遞依賴了困食,故進一步分解之后的模式滿足3NF

2NF和3NF中的約束都是針對于非主屬性的。在日常開發(fā)的時候只要ER圖設計好翎承,一般都是滿足到3NF的硕盹,3NF也是可以保證無損分解的最高范式

  • Boyce-Codd范式(BCNF)

    • R ∈ 3NF, 并且不存在主屬性間的部分函數(shù)依賴和傳遞函數(shù)依賴 (實際上就是在3NF的基礎上叨咖,去除了主屬性的部分函數(shù)依賴和傳遞函數(shù)依賴

    • 舉個栗子

      • R< U, F >

      • U = {S, T, J}

      • F = { (S, J)→T, (S, T)→J, T→J }

      • 從上面的函數(shù)依賴易判斷出:S瘩例、T、J都是主屬性

        • 因為{S, J}甸各, {S, T} 都是候選碼

        • 因為不存在非主屬性垛贤,所以該模式已經(jīng)滿足到3NF

      • 上面模式的依賴可以用下面的圖示表示

        4.png
    • 上面的栗子中的模式主屬性中存在部分函數(shù)依賴,所以不滿足BCNF

    • 作出如下分解

      • R1< {S, T, J}, { (S, J)→T, (S, T)→J } >

      • R2< {T, J}, { T→J } >

      • 上面的依賴關系可以用下圖表示

        5.png
    • 經(jīng)過分解之后的模式就不存在主屬性間的部分函數(shù)依賴和傳遞函數(shù)依賴趣倾, 故滿足BCNF

    當我們分解不屬于BCNF的模式的時候南吮,產(chǎn)生的模式中可能有一個或多個不屬于BCNF。在這種情況中誊酌,需要進一步分解,其最終結果是一個BCNF的模式集合

更高的范式還有第四范式和第五范式露乏,但是應用較少碧浊,且考綱不要求,這里就不再贅述了

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘟仿,一起剝皮案震驚了整個濱河市箱锐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劳较,老刑警劉巖驹止,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異观蜗,居然都是意外死亡臊恋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門墓捻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抖仅,“玉大人,你說我怎么就攤上這事〕仿” “怎么了环凿?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長放吩。 經(jīng)常有香客問我智听,道長,這世上最難降的妖魔是什么渡紫? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任到推,我火速辦了婚禮寿谴,結果婚禮上裁良,老公的妹妹穿的比我還像新娘。我一直安慰自己揭璃,他們只是感情好集灌,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布悔雹。 她就那樣靜靜地躺著,像睡著了一般欣喧。 火紅的嫁衣襯著肌膚如雪腌零。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天唆阿,我揣著相機與錄音益涧,去河邊找鬼。 笑死驯鳖,一個胖子當著我的面吹牛闲询,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浅辙,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扭弧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了记舆?” 一聲冷哼從身側響起鸽捻,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泽腮,沒想到半個月后御蒲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡诊赊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年厚满,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豪筝。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡痰滋,死狀恐怖摘能,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敲街,我是刑警寧澤团搞,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站多艇,受9級特大地震影響逻恐,放射性物質發(fā)生泄漏。R本人自食惡果不足惜峻黍,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一复隆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姆涩,春花似錦挽拂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宏赘,卻和暖如春绒北,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背察署。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工闷游, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贴汪。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓脐往,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扳埂。 傳聞我的和親對象是個殘疾皇子钙勃,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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