關係模式範式分解教程 3NF與BCNF口訣

来源:https://www.cnblogs.com/kungfupanda/archive/2020/02/25/12362163.html
-Advertisement-
Play Games

https://blog.csdn.net/sumaliqinghua/article/details/86246762 【通俗易懂】關係模式範式分解教程 3NF與BCNF口訣!小白也能看懂原創置頂 沃茲基.碩德 最後發佈於2019-01-10 18:26:14 閱讀數 13082 收藏展開本來是為 ...


https://blog.csdn.net/sumaliqinghua/article/details/86246762

 

【通俗易懂】關係模式範式分解教程 3NF與BCNF口訣!小白也能看懂
原創置頂 沃茲基.碩德 最後發佈於2019-01-10 18:26:14 閱讀數 13082 收藏
展開
本來是為了複習資料庫期末考試,結果找了一圈都沒有發現比較好的解釋,通過查閱資料和總結,為大家提供通俗易懂的解法,一聽就會!並且配有速記口訣!介是你沒有玩過的船新版本包含最小依賴集求法候選碼求法

在模式分解之前,首先對於1NF,2NF,3NF,BCNF做一個簡明扼要的介紹。

1NF是指資料庫表的每一列都是不可分割的基本數據項,即實體中的某個屬性不能有多個值或者不能有重覆的屬性。

2NF要求屬性完全依賴於主鍵,不能存在僅依賴主關鍵字一部分的屬性。

3NF要求每一個非主屬性既不部分依賴於碼也不傳遞依賴於碼。

BCNF消除了主屬性對候選碼的部分和傳遞函數依賴。

註:1.相對於BCNF,3NF允許存在主屬性對候選碼的傳遞依賴和部分依賴。

2.BCNF比較抽象,略作解釋:在學生信息表裡,學號是一個候選碼,學號可確定學生姓名;(班級,學生姓名)也是一組候選碼,有(班級,學生姓名)->學號,因此在主屬性間形成了傳遞依賴。

3.若對概念不清晰,關於碼、候選碼、主屬性、非主屬性的解釋可參看:

https://blog.csdn.net/sumaliqinghua/article/details/85872446#commentBox

我們的重點是講解範式分解:

一、3NF分解
分為保持依賴和無損連接

為了說明求解保持依賴,我們先要會求最小依賴集

(1)最小依賴集求法:

口訣:右側先拆單,依賴依次刪。

           還原即可刪,再拆左非單。

通過求下麵的最小依賴集對口訣進行解釋,

 

 

(2)3NF分解:

口訣:

保函依賴分解題,先求最小依賴集。

依賴兩側未出現,分成子集放一邊,剩餘依賴變子集。

若要連接成無損,再添候選做子集。

下麵通過幾道例題講解口訣:

例1.已知R(ABCDE), F={A ->D,E->D,D->B,BC->D,DC->A}求保持函數依賴的3NF分解,和具有無損連接性及保持函數依賴的3NF分解

第一步:保函依賴分解題,先求最小依賴集。先求出R的最小依賴集,可得F={A ->D,E->D,D->B,BC->D,DC->A}

第二步:依賴兩側未出現,分成子集放一邊。首先可以發現沒有不出現在兩側的元素不用單獨分出一個子集,“剩餘依賴變子集”然後我們將各依賴分別劃分為子集得到:{AD} {ED} {DB} {BCD} {DCA},即為所求保持函數依賴的3NF分解

第三步:若要連接成無損,再添候選做子集。

(1)候選碼的求解:所謂候選碼即能決定整個關係的,我們通過找未出現在依賴右邊的和兩側均未出現的元素即可求得,

(2)可以發現C E未出現在右邊,因此候選碼為{CE}。故所求具有無損連接性及保持函數依賴的3NF分解為{AD} {ED} {DB} {BCD} {DCA} {CE}

 

例2.關係模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},將關係模式分解為3NF且保持函數依賴

將關係模式分解為3NF且保持函數依賴:

第一步:保函依賴分解題,先求最小依賴集。先求出R的最小依賴集,

假設B->G冗餘,則(B)+=BD,沒有G故不冗餘。

假設CE->B冗餘,則(CE)+=CEGDA,沒有B故不冗餘。

假設C->A冗餘,則(C)+=CD,故不冗餘。

一次可以得到最小函數依賴集Fm={B->G,CE->B,C->A,B->D,C->D}

第二步:依賴兩側未出現,分成子集放一邊,剩餘依賴變子集。首先可以發現沒有不出現在兩側的元素,然後我們將各依賴分別劃分為子集得{BG} {CEB} {CA} {BD} {CD},即為所求保持函數依賴的3NF分解

第三步:若要連接成無損,再添候選做子集。找到R的一個候選碼為{ACE}。故所求具有無損連接性及保持函數依賴的3NF分解為{BG} {CEB} {CA} {BD} {CD} {ACE} (註:範式分解並不唯一,正確即可)

 

二、BCNF分解:
將關係模式R<U,F>分解為一個BCNF的基本步驟是

1)先求最小依賴集,候碼非碼成子集

3)餘下左側全候碼,完成BCNF題。

例.關係模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},將關係模式分解為3NF且保持函數依賴

將關係模式分解為3NF且保持函數依賴:

第一步:先求最小依賴集。可以發現CE->G多餘,因此最小依賴集為F={B->G,CE->B,C->A,B->D,C->D}。

第二步:候碼非碼成子集。由於候選碼為(CE)因此將CE->B劃分出子集(BCE),而B->G,B->D左側均不含主屬性(C、E)中的任何一個故劃分出(BG),(BD)

第三步:此時剩餘依賴F={C->A,C->D}剩餘元素{A,C,D}檢查發現函數依賴左側都是候選碼即完成BCNF分解,如果不滿足則繼續分解餘下的。

於是BCNF分解的最後結果為{(BG),(BD),(ACD),(BCE)}。

如有疑問請在評論區留言,如有幫助麻煩右上角點個贊~~蟹蟹

三、總結
1.閉包

2.候選碼

3.最小依賴集

4.3NF分解

5.BCNF分解
————————————————
版權聲明:本文為CSDN博主「沃茲基.碩德」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sumaliqinghua/article/details/86246762


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HyperBoot_S32K116 is a UART bootloader developed for my S32K116 EVB hardware. so that the application can be reflashed by UART. ...
  • rpm | 升級軟體包 檢查已安裝包 rpm -qa | grep samba samba-common-3.6.9-164.el6.x86_64 samba-3.6.9-164.el6.x86_64 samba-winbind-clients-3.6.9-164.el6.x86_64 samba- ...
  • 筆者今天升級了VSCode,安裝完後發現Dock(程式塢)沒有VSCode的圖標了,導致切換應用非常不方便。 具體情況就像下麵這張圖,VSCode明明開著,但是在Dock找不到VSCode了。 解決辦法就是在終端執行以下命令就可以了: 其實就相當於重啟Dock。在看VSCode的圖標已經回來了。 原 ...
  • 最近需要開發一些內核模塊,進行探究linux內核的一些特征,現在把一些遇到的比較好的文章和知識點,進行簡要記錄和備忘; 內核模塊開發相關鏈接: https://www.thegeekstuff.com/2013/07/write-linux-kernel-module/ 入門教程;insmod, r ...
  • SRAM 即靜態RAM.它也由晶體管組成,SRAM的高速和靜態特性使它們通常被用來作為Cache存儲器。電腦的主板上都有Cache插座。 下圖所示的是一個SRAM的結構框圖。 由上圖看出SRAM一般由五大部分組成,即存儲單元陣列、地址解碼器(包括行解碼器和列解碼器)、靈敏放火器、控制電路和緩衝/驅 ...
  • 有線等效加密(WEP)標準是802.11無線安全早期的解決方案,WEP並不安全。 既然WEP並不安全,為什麼還要學習WEP呢? 1. WEP簡單,相比後續出現的加密協議,它不要求有多麼強大的計算能力。一些老的設備,特別是缺乏足夠處理能力的手持設備,WEP已經是最佳選擇; 2. 較新的技術,如TKIP ...
  • 1.MySQL版本: mysql> select @@version;+ +| @@version |+ +| 8.0.18 |+ +1 row in set (0.00 sec) 2.Centos操作系統版本 [root@Hadoop-00 /]# cat /etc/redhat-releaseC ...
  • 背景 ​ SQL作為一門標準的、通用的、簡單的DSL,在大數據分析中有著越來越重要的地位;Spark在批處理引擎領域當前也是處於絕對的地位,而Spark2.0中的SparkSQL也支持ANSI SQL 2003標準。因此SparkSQL在大數據分析中的地位不言而喻。 本文將通過分析一條SQL在Spa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...