資源描述:
《范式間的區(qū)別(具體例子)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、范式間的區(qū)別(具體例子)?由于最近要做畢業(yè)設(shè)計(jì)了,所以加強(qiáng)了一下數(shù)據(jù)庫設(shè)計(jì)的基礎(chǔ)知識(shí),主要是范式的應(yīng)用。在此作些總結(jié)吧。首先是基礎(chǔ)概念,也就是術(shù)語:(1)???????實(shí)體(entity):就是實(shí)際應(yīng)用中要用數(shù)據(jù)描述的事物,一般是名詞。(2)???????字段(fields):就是一項(xiàng)數(shù)據(jù),也就是我們平常所說的“列”。(3)???????記錄(record):一個(gè)實(shí)體的一個(gè)實(shí)例所特有的相關(guān)數(shù)據(jù)項(xiàng)的集合,也就是我們平常所說的“行”。(4)???????鍵(key):可唯一標(biāo)識(shí)一條記錄的一個(gè)字段或字段集。(5)???????主鍵(primarykey)
2、:用于唯一標(biāo)識(shí)一個(gè)表中的一條記錄的鍵。每個(gè)主鍵應(yīng)該具有下列特征:1.??唯一的。2.最小的(盡量選擇最少鍵的組合)。3.非空。4.不可更新的(不能隨時(shí)更改)(6)???????外鍵(foreignkeys):對(duì)連接父表和子表的相關(guān)記錄的主鍵字段的復(fù)制。(7)???????依賴表(dependenttable):也稱為弱實(shí)體(weakentity)是需要用父表標(biāo)識(shí)的子表。(8)???????關(guān)聯(lián)表(associativetable):是多對(duì)多關(guān)系中兩個(gè)父表的子表。(9)???????實(shí)體完整性:每個(gè)表必須有一個(gè)有效的主鍵。(10)???參照完整性:沒
3、有不相匹配的外鍵值。?然后就是本文的主題:“范式”了。范式主要有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF、第四范式(4NF)。下面就根據(jù)例子,一一解釋。(以下的例子都出自《databasedesignanddevelopment:avisualapproach》?RaymondFrost,JohnDay,CraigVanSlyke?著,且有下劃線的表示主鍵)具體例子:????????????假設(shè)你需要為一個(gè)在線視頻娛樂廳設(shè)計(jì)數(shù)據(jù)庫,用它記錄每個(gè)會(huì)員的消費(fèi)時(shí)間。娛樂廳必須掌握會(huì)員的基本信息,包括他們的電子郵箱、訪問在線娛樂
4、廳的口令、他們的姓名以及電話號(hào)碼。當(dāng)會(huì)員每次訪問娛樂廳時(shí)都會(huì)創(chuàng)建一個(gè)進(jìn)程id,而且必需記錄進(jìn)程的開始時(shí)間和結(jié)束時(shí)間。如圖:上圖是規(guī)范化的設(shè)計(jì)。下面展示一個(gè)非規(guī)范化的設(shè)計(jì)。如圖:??那么非規(guī)范化的設(shè)計(jì)有什么利弊呢?優(yōu)點(diǎn):很明顯,非規(guī)范化設(shè)計(jì)沒有外鍵。這樣就簡化了某些相關(guān)操作。缺點(diǎn):其實(shí)潛在的問題是致命的。1.???????????????????更新問題。當(dāng)有兩條主鍵(id)不一樣,但其他信息完全相同的數(shù)據(jù)遇到更新時(shí),其中一條的數(shù)據(jù)更新了,但另一條沒有更新,結(jié)果產(chǎn)生不一致的數(shù)據(jù)。2.???????????????????插入問題。當(dāng)插入一條數(shù)據(jù)時(shí),插
5、入信息只是表屬性的一部分。例如上例中只插入一個(gè)MEMBER的基本信息(email,password,fname,iname,phone),在非規(guī)范化設(shè)計(jì)中是禁止的,因?yàn)樵摂?shù)據(jù)信息不完整。這些問題導(dǎo)致了在構(gòu)造關(guān)系數(shù)據(jù)庫時(shí)一些規(guī)則的出現(xiàn),這些就是范式。?第一范式定義:表中所有字段僅包含單值。?很明顯,第二行的數(shù)據(jù)違反了第一范式。因?yàn)閜hone的字段有兩個(gè)值。PS:汗一個(gè),美國人怎么連密碼都是武器???解決的辦法有:?在討論更高級(jí)的范式之前,必須明白確定因子的概念。確定因子(determinant):是一個(gè)字段或一組字段,它控制或確定其他字段的值。?第二
6、范式定義:表中的每個(gè)非鍵字段由整個(gè)主鍵確定,且不能由主鍵自身的一部分確定。因此,2NF的違例只會(huì)出現(xiàn)在主鍵是由超過一個(gè)字段構(gòu)成的表中。?在上面的STUDENT_ENROLL表中id決定了fname,iname,dorm,phone,而SECTION$call_no又決定了fname,iname,dorm,phone,grade。違反了第二范式,則在更新時(shí),由于JimGreen有兩個(gè)電話號(hào)碼而無法更新。解決的辦法有:?第三范式定義:表中不存在可以確定其他非關(guān)鍵字的非鍵字段。3NF的違例可能發(fā)生在具有多個(gè)非鍵字段的表中。?上圖的MEMBERVISIT中
7、,主鍵(id)決定了email,password,fname,iname,phone。Email決定了password,fname,iname,phone。所以違反了第三范式。會(huì)導(dǎo)致Luce存儲(chǔ)了兩個(gè)passwords.。這顯然是不對(duì)的。解決的方法:?BCNF定義:每個(gè)確定因子是一個(gè)鍵。這個(gè)范式特別用于處理非鍵字段確定主鍵的一部分主要的情況。?上面的QUARTERLY_BONUS表中,一個(gè)非鍵字段ssn確定employee_id,它是鍵的一部分。實(shí)際上,ssn和employee_id彼此相互確定。所以違反了BCNF范式。會(huì)導(dǎo)致更新問題,雇員8857
8、在圖中有兩個(gè)不同的ssn。解決方法:?第四范式定義:在全鍵表中,鍵的一部分可以確定至多一個(gè)其他字段的多個(gè)值。4NF僅用于全