轉:數據庫關系模式的范式詳解

關系模式的范式

????主要有4種范式,1NF,2NF,3NF,BCNF,按從左至右的順序一種比一種要求更嚴格。要符合某一種范式必須也滿足它前邊的所有范式。一般項目的數據庫設計達到3NF就可以了,而且可根據具體情況適當增加冗余,不必教條地遵守所謂規范。

簡單而言,1NF就是要求一張表里只放相互關聯的字段,一個字段里只放一條信息,這只是最基本的要求。至于2NF,3NF,BCNF雖然描述的內容不同,但表現在數據特點上很相似,就好比在說不要為了向某廠訂購一批貨記下來,就把的廠的面積、電話等都放在同一張表里,而應該用兩張表,以盡量避免浪費數據存儲空間。因為和同一個廠可能會交易好幾次,但沒必要每次交易都記錄全部的信息。

從范式所允許的函數依賴方面進行比較,四種范式之間的關聯如下圖所示。

?

?

以下對每種范式作一一說明。

2.3.4.2??第一范式

在關系模式R中的每一個具體關系r中,如果每個屬性值 都是不可再分的最小數據單位,則稱R是第一范式的關系。

例:如職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話 和一個家里電話號碼) 規范成為1NF有三種方法:
一是重復存儲職工號和姓名。這樣,關鍵字只能是電話號碼。
二是職工號為關鍵字,電話號碼分為單位電話和住宅電話兩個屬性
三是職工號為關鍵字,但強制每條記錄只能有一個電話號碼。
以上三個方法,第一種方法最不可取,按實際情況選取后兩種情況。

2.3.4.3??第二范式

關系的第二范式(2NF)定義: 如果關系模式R為1NF,并且R中的每一個非主屬性都完全依賴于R的某個候選關鍵字,則稱R是第二范式的,簡記為2NF。

【例2.40】 設有關系模式R(學號S#,課程號C#,成績G,任課教師TN,教師專長TS),基于R的函數依賴集F={(S#,C#)→G,C#→TN,TN→TS},判斷R是否為2NF。

解:

(1) 容易看出,關系模式R是1NF。因為R符合關系的定義,R的所有屬性值都是不可再分的原子值。

R是否為2NF,應根據2NF的定義來判斷。??????????????????????????????????????????

首先要確定關系模式R中各屬性間的函數依賴情況。如果沒有直接給出R的函數依賴集,就要按照語義把它確定下來。在本例中,已直接給出基于R的函數依賴集F,我們可使用阿氏推理規則并結合下面介紹的方法,進一步確定R中哪些是主屬性、哪些是非主屬性、侯選關鍵字由哪些屬性構成。

方法①??寫出函數依賴集F中的各個函數依賴以幫助分析。方法①的特點是直接

F={(S#,C#)→G,

C#→TN,

TN→TS

}

????方法②??用有向圖表示屬性間函數依賴,結點表示屬性,方框包含若干個結點表示屬性組合,有向箭頭表示函數依賴。本例的函數依賴圖如圖2.9所示。方法②的特點是直觀

?

圖2.9 函數依賴圖例子

????方法③??把關系模式R與函數依賴集F結合起來,屬性組合用下劃線(或上劃線)表示,函數依賴用有向箭頭表示。本例的函數依賴簡圖如圖2.10所示。方法③的特點是簡單

?

圖2.10函數依賴簡圖例子

????用阿氏推理規則由F可推出:(S#,C#)→{S#,C#,G,TN,TS},即屬性組合(S#,C#)是R的候選關鍵字(R只有這一個候選鍵)。(S#,C#)的一個值可惟一標識R中的一個元組(并且沒有多余的屬性)。

在R中,S#,C#是主屬性;其余的屬性G,TN,TS為非主屬性。

借助上面的圖,我們可以看到,非主屬性G對鍵是完全依賴:(S#,C#)→G。但非主屬性TN,TS對鍵是部分依賴(他們僅依賴于鍵的真子集C#)。由于R中存在非主屬性對候選鍵的部分依賴,所以關系模式R不是2NF。

R中存在非主屬性對候選鍵的部分依賴,將會引起數據冗余、數據操作異常等問題。可以把關系R無損聯接地分解成兩個2NF的關系模式:

ρ={R1,R2},R1={S#.C#,G},R2={C#,TN,TS}。

【例2.41】選課關系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學號, CNO為課程號,GRADEGE 為成績,CREDIT 為學分。

由以上條件,關鍵字為組合關鍵字(SNO,CNO)
在應用中使用以上關系模式有以下問題:
a.數據冗余,假設同一門課由40個學生選修,學分就 重復40次。
b.更新異常,若調整了某課程的學分,相應的元組CREDIT值都要更新,有可能會出現同一門課學分不同。
c.插入異常,如計劃開新課,由于沒人選修,沒有學號關鍵字,只能等有人選修才能把課程和學分存入。
d.刪除異常,若學生已經結業,從當前數據庫刪除選修記錄,就會可能連課程號及學分完全從數據庫中刪除,則此門課程及學分記錄無法保存。
原因:非關鍵字屬性CREDIT僅函數依賴于CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。
解決方法:分成兩個關系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關系包括兩個關系模式,它們之間通過SC1中的外關鍵字CNO相聯系,需要時再進行自然聯接,恢復了原來的關系

?

2.3.4.4??第三范式

關系的第三范式(3NF)定義: 如果關系模式R為2NF,并且R中的每一個非主屬性都不傳遞依賴于R的某個候選關鍵字,則稱R是第三范式的,簡記為3NF。

【例2.42】續上例2.40(R(學號S#,課程號C#,成績G,任課教師TN,教師專長TS)),判斷關系模式R1={S#.C#,G},R2={C#,TN,TS} 是否為3NF。

解:

(1) 在關系模式R1={S#,C#,G},候選關鍵字是(S#,C#),主屬性是S#,C#,非主屬性是G,函數依賴為(S#,C#)→G。??由于R1中不存在非主屬性對候選關鍵字的傳遞依賴,所以關系模式R1是3NF。

(2) 在關系模式R2={C#,TN,TS},候選關鍵字是C#,主屬性是C#,非主屬性是TN,TS,函數依賴為C#→TN,TN→TS。由于R2中存在非主屬性對候選關鍵字的傳遞依賴C#TS,所以關系模式R2不是3NF。

可以把關系R2無損聯接地分解成兩個3NF的關系模式:

ρ={R3,R4},R3={C#,TN},R4={TN,TS}。

【例2.43】如(SNO,SNAME,DNO,DNAME,LOCATION) 各屬性分別代表學號,
姓名,所在系,系名稱,系地址。
判斷關系模式S1是否為3NF。


關鍵字SNO決定各個屬性。由于是單個關鍵字,沒有部分依賴的問題,是2NF。

但這關系有大量的冗余,有關學生所在的幾個屬性DNO,DNAME,LOCATION將重復存儲,插入,刪除和修改時也將產生類似以上例的情況。
原因:關系中存在傳遞依賴造成的。關鍵字 SNO 對 LOCATION 函數決定是通過傳遞依賴:SNO -> DNO,及DNO -> LOCATION實現的。也就是說,SNO不直接決定非主屬性LOCATION,不是3NF。
解決目地:每個關系模式中不能留有傳遞依賴。
解決方法:分為兩個關系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:關系S中不能沒有外關鍵字DNO。否則兩個關系之間失去聯系。

2.3.4.5?? Boyce-Codd范式

關系的Boyce-Codd范式(BCNF)定義: 如果關系模式R為1NF,并且R中的每一個函數依賴X→Y(Y?X),必有X是R的超關鍵字,則稱R是Boyce-Codd范式的,簡記為BCNF。

從BCNF的定義中,可以明顯地得出如下結論:

(1) 所有非主屬性對鍵是完全函數依賴;

(2) 所有主屬性對不包含它的鍵是完全函數依賴;

(3)沒有屬性完全函數依賴于非鍵的任何屬性組合。

與2NF,3NF的定義不同,BCNF的定義直接建立在1NF的基礎上。但實質上BCNF是3NF的改進形式。3NF僅考慮了非主屬性對鍵的依賴情況,BCNF把主屬性對鍵的依賴情況也包括進去。BCNF要求滿足的條件比3NF所要求的更高。如果關系模式R是BCNF的,那么R必定是3NF,反之,則不一定成立。

【例2.43】 續前例2.42(學號S#,課程號C#,成績G,任課教師TN,教師專長TS),判斷兩個3NF關系模式R3={C#,TN},R4={TN,TS}是否為BCNF。

解:在關系模式R3中有函數依賴C#→TN,決定因素C#是R3的鍵;

在關系模式R4中有函數依賴TN→TS,決定因素TN是R4的鍵;

???? R3,R4都滿足BCNF的定義,所以,這兩個關系模式都是BCNF。

【例2.44】配件管理關系模式 WPE(WNO,PNO,ENO,QNT)分別表倉庫號,配件號,職工號,數量。有以下條件
a.一個倉庫有多個職工。
b.一個職工僅在一個倉庫工作。
c.每個倉庫里一種型號的配件由專人負責,但一個人可以管理幾種配件。
d.同一種型號的配件可以分放在幾個倉庫中

分析:由以上得 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 丟失了, 因而對原來的語義有所破壞。沒有體現出每個倉庫里一種部件由專人負責。有可能出現 一部件由兩個人或兩個以上的人來同時管理。因此,分解之后的關系模式降低了部分完整性約束。

轉載于:https://www.cnblogs.com/BensonHe/articles/1872241.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275813.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

紋理對象紋理單元紋理目標_網頁設計理論:紋理

紋理對象紋理單元紋理目標Texture has become an indispensable element in web design. It is not only a trend but also a quick way to increase the depth of web pages. When designers learn to use textures, they can strengthen the appeal of web pages. It can be …

javascript-高級用法

22.1 安全的類型檢測 為什么:typeof 不靠譜, 無法將數組從對象中區分出來, instanceof 有特殊情況,在iframe存在的情況下無法判斷另一個iframe內的數組 如何做:Object.prototype.toString().call(Arr); 22.3 高級定時器 特點&…

java dao層和base層_詳解Javaee Dao層的抽取

有時候我們在實現不同功能的時候回看到很多的Dao層的增加、修改、刪除、查找都很相似,修改我們將他們提取BaseDao一、提取前1. 提取前的LinkDao層:public interface LinkManDao {Integer findCount(DetachedCriteria detachedCriteria);List findByPage(…

暢銷書《深入淺出Vue.js》作者,在阿里淘系1年的收獲成長

大家好,我是若川。今天推薦一篇95年的博文的文章。他的故事應該挺多人知道。如果不知道可以看他的博客 https://github.com/berwin/blog點擊下方卡片關注我、加個星標時間好快,眨眼間,加入阿里已經一年了。這一年發生了很多事,整體…

GrideView屬性的學習

GridView 控件可公開分頁事件和排序事件,以及在創建當前行或將當前行綁定至數據時發生的事件。單擊一個命令控件(例如,包含在 GridView 控件中作為其中的一部分的 Button 控件)時也會引發事件。下表描述了由 GridView 控件公開的事…

插圖 引用 同一行兩個插圖_將圖標變成插圖的五個簡單步驟

插圖 引用 同一行兩個插圖Every creative person has probably already been in this situation: A project, be it a website, an app — or as far as I am concerned: often a news story would benefit from an appealing side visual. But neither budget nor time makes …

urllib庫parse模塊的使用

官方文檔轉載于:https://www.cnblogs.com/vector-wyw/p/10416010.html

java dateutil 獲取時間戳_java DateUtil工具類時間戳類型轉換詳解

本文實例為大家分享了DateUtil工具類時間戳類型轉換的具體代碼,供大家參考,具體內容如下package com.sinosoft.media.sms.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtil {//當前…

fluorinefx C# 版的開源rtmp服務器

fluorinefx C# 版的開源rtmp服務器 - [其它資源] 版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明http://25swf.blogbus.com/logs/28529745.html fluorinefx支持的 .net 框架集有 1.1 2.0 3.5 以及 mono 1.2.4支持的東東Flex, Flash Remoting (RP…

web登錄界面設計_出色的Web界面設計的7條規則

web登錄界面設計When you work on a website or on the design of web pages, remember that their success is not determined by the beauty of their visual style. In fact, in his article “10 Principles Of Good Website Design”, Vitaly Friedman stated:當您在網站或…

關于為什么我推薦大家看vue代碼的隨想

大家好,我是若川。今天給大家推薦一篇大圣老師在知乎的回答,很快能看完。我也曾經回答過這個問題。若川知乎高贊:有哪些必看的 JS 庫?不要為了讀源碼而讀源碼,但要學會看源碼。自己常用的熟悉的庫的源碼值得讀讀。點擊…

算法 - 最好、最壞、平均復雜度

注:本文僅為筆記。 原文 極客時間 - 數據結構與算法之美 - 04 | 復雜度分析(下):淺析最好、最壞、平均、均攤時間復雜度 最好、最壞時間復雜度 略,比較容易分析。 平均時間復雜度 需考慮概率來計算。 概率論中的加權平…

java編譯多個包_javac一次性編譯多個包下的.java文件

標準的javac可以跟一個加一個文件名,該文件里保存了源文件列表,使用下面的命令:javac sourcefilecd xxxdir *.java/s/b > srclist.txtor dir x:/yyy/zzz/*.java/s/b > srclist.txtjavac -cp .;xxx/yyy/zzz.jar;x…

555的傳說

鄭昀 20101118 昨天聽1039電臺才知道,北美電影里常出現的555開頭號碼是行規慣例,因為當年貝爾系統為測試鏈路中所有交換機的基本功能,全部由5組成的號碼(555–5555)作為特別的測試號碼被保留,時至今日只剩下…

沒想到你是這樣的npm install

大家好,我是若川。今天給大家推薦一篇關于 npm install 的好文。很快能看完。點擊下方卡片關注我、加個星標學習源碼整體架構系列、年度總結、JS基礎系列前言項目中執行npm install發生了什么,眾所周知,執行npm install時會在當前項目目錄的n…

Django——Model

一、 ORM 在 MVC 或者說 MTV 設計模式中,模型(M)代表對數據庫的操作。那么如何操作數據庫呢? 我們可以在 Python 代碼中嵌入 SQL 語句。 但是問題又來了,Python 怎么連接數據庫呢?可以使用類似 pymysql 這一…

大理石在哪兒_如何創建用戶體驗寫作課程而又不失大理石

大理石在哪兒I’m a UX Writer. It’s a designated human on the software development team who writes words for interfaces. All the words. From the tiniest tooltips to navigation, to buttons, to errors, and so on, ad infinitum. UX writing is less writing and …

理解 JavaScript 閉包

簡介 Closure 所謂“閉包”,指的是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。 閉包是 ECMAScript (JavaScript)最強大的特性之一,但…

in the java search_elasticsearch which: no java in (/sbin:/bin:/usr/sbin:/usr/bin)

機器:centos7.2javahome:export JAVA_HOME/root/jdk1.8.0_60export PATH$JAVA_HOME/bin:$PATHexport CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar[rooti-j73a8nn6 ~]# java -versionjava version “1.8.0_60”Java(TM) SE Runtime Envir…

Vuex 源碼還有一些缺陷?

我看了vuex3和vuex4的源碼也輸出了文章,看到這篇時,vuex還有缺陷?看了看確實是好文,不愧是大佬寫的。文章不算長,推薦給大家看看。點擊下方卡片關注我、加個星標學習源碼整體架構系列、年度總結、JS基礎系列眾所周知&a…