wordpress 文章評(píng)論數(shù)seo搜索引擎優(yōu)化價(jià)格
函數(shù)依賴
- 函數(shù)依賴:給定一個(gè)X,能唯一確定一個(gè)Y,就稱X決定(確定)Y,或者說(shuō)Y依賴于X。
例如:Y=X*X函數(shù),此時(shí)X能確定Y的值,但是Y無(wú)法確定X的值,比如x=2,y=4,但是y=4無(wú)法確定x=2。 - 函數(shù)依賴又可擴(kuò)展以下兩種規(guī)則:
- 部分函數(shù)依賴:A可決定C,(A,B)也可決定C,既然A都可以決定C了,那么要不要B其實(shí)都無(wú)所謂了,所有這種就稱之為部分函數(shù)依賴。
- 傳遞函數(shù)依賴:當(dāng)A和B不相同時(shí),A可決定B,B可決定C,則A可決定C,是傳遞函數(shù)依賴;若A和B相同,則不存在傳遞了,A就可以直接就可決定C。
函數(shù)依賴的公理系統(tǒng)
函數(shù)依賴的公理系統(tǒng)(Armstrong:阿姆斯特朗公理)是指一組用于推導(dǎo)和證明函數(shù)依賴的規(guī)側(cè)和公理集合。設(shè)關(guān)系模式R(U,F),其中U為屬性集,F是U上的一組函數(shù)依賴,那么有以下推理規(guī)則。
- 自反律:對(duì)于任意屬性集合X和Y,有Y?X?U,則X→Y被F邏輯蘊(yùn)含。
- 也就是說(shuō)如果屬性集Y屬于X,則X可以決定Y,又可以說(shuō)屬性集X可以決定他的屬性子集。
- 增廣律:對(duì)于任意屬性集合X、Y和Z,如果X→Y,那么XZ→YZ。
- 如果X→Y在F這個(gè)函數(shù)依賴集合中,另一屬性(組)Z是屬性集U中的元素,那么從F中可以推導(dǎo)出XZ函數(shù)決定YZ。
- 傳遞律:對(duì)于任意屬性集合X、Y和Z,如果X→Y且Y→Z,那么X→Z。
根據(jù)上述3條推理規(guī)則又可推出下述3條推理規(guī)則:
- 合并律:對(duì)于任意屬性集合X、Y和Z,如果X→Y和X→Z,那么X→YZ。
- 分解律:對(duì)于任意屬性集合X、Y和Z,如果X→YZ,則X→Y和X→Z。
- 合成律:對(duì)于任意屬性集合X、Y和Z,如果X→Y且Y→Z,那么XZ→YZ。
鍵與約束
- 超鍵(碼):能夠唯一標(biāo)識(shí)一條記錄的屬性或?qū)傩约Q句話說(shuō),超鍵中的屬性組合可以保證每個(gè)元組在關(guān)系中都是唯一的。
舉例:假設(shè)我們有一個(gè)學(xué)生表,包含以下屬性:學(xué)號(hào)、姓名、性別、出生日期,那么,以下屬性集合都是超鍵:{學(xué)號(hào)}、{學(xué)號(hào),出生日期}、{姓名,性別,出生日期,因?yàn)檫@些屬性組合都可以唯一標(biāo)識(shí)每個(gè)學(xué)生。 - 候選鍵:超鍵中不包含任何冗余屬性的超鍵。換句話說(shuō),候選鍵中的每個(gè)屬性都是必需的,用于唯一標(biāo)識(shí)元組。
舉例:在上面的例子中,{學(xué)號(hào)}是候選鍵,因?yàn)樗俏ㄒ粯?biāo)識(shí)學(xué)生的最小屬性集合。如果我們?cè)O(shè)置姓名不能重復(fù)的話,那姓名也是一個(gè)候選鍵,但是{姓名,性別,出生日期這個(gè)組合就不是了,因?yàn)樾詣e和出生日期冗余了,可以由姓名得到 - 主屬性:包含在任一候選碼中的屬性稱主屬性。換句話說(shuō),主屬性是候選碼所有屬性的并集
舉例:在上面的例子中,如果姓名不能重復(fù),那么主屬性就是學(xué)號(hào)和姓名 - 主鍵:從候選鍵中選取的一個(gè)屬性或?qū)傩约?#xff0c;作為表中元組的唯一標(biāo)識(shí)符。
舉例:在上面的例子中,我們可以選擇{學(xué)號(hào)}作為主鍵。
學(xué)號(hào) | 姓名 | 性別 | 年齡 | 系別 | 專業(yè) |
---|---|---|---|---|---|
20020612 | 李輝 | 男 | 20 | 計(jì)算機(jī) | 軟件開發(fā) |
20060613 | 張明 | 男 | 18 | 計(jì)算機(jī) | 軟件開發(fā) |
20060614 | 王小玉 | 女 | 19 | 物理 | 力學(xué) |
20060615 | 幸漢華 | 女 | 17 | 生物 | 動(dòng)物學(xué) |
20060616 | 趙靜 | 男 | 21 | 化學(xué) | 食品化學(xué) |
超鍵:能夠唯一標(biāo)識(shí)一條記錄的屬性或?qū)傩约學(xué)號(hào)}、{姓名}、{學(xué)號(hào),姓名}、{學(xué)號(hào),姓名,性別}…
候選鍵:能夠唯一標(biāo)識(shí)一條記錄的最小屬性集。{學(xué)號(hào)}、{姓名}
主屬性:候選碼所有屬性的并集。{學(xué)號(hào)、姓名}
外鍵:是指一個(gè)表中的屬性,它引用另一個(gè)表中的主鍵。外鍵用于建立表之間的關(guān)系。
實(shí)體完整性約束:即主鍵約束,主鍵值不能為空,也不能重復(fù)。
參照完整性約束:即外鍵約束,外鍵必須是其他表中已經(jīng)存在的主鍵的值,或者為空。
用戶自定義完整性約束:自定義表達(dá)式約束,如設(shè)定年齡屬性的值必須在0到180之間。
案例
超鍵:包含雇員編號(hào)在內(nèi)的任意組合,如果名字不允許重復(fù),也可以是包含名字在內(nèi)的任意組合
候選鍵:雇員編號(hào),如果名字不允許重復(fù),還有名字
主鍵:雇員編號(hào)從候選鍵中選擇的最簡(jiǎn)單屬性用于唯一標(biāo)識(shí)一行記錄)
外鍵:部門編號(hào)(在雇員表中指向部門表的主鍵用于兩張表之間的聯(lián)系)
主屬性:雇員編號(hào),姓名
范式
第一范式1NF
第一范式1NF:要求數(shù)據(jù)庫(kù)表中的所有字段都是不可分割的原子值。通俗地說(shuō),第一范式就是表中不允許有小表的存在。比如,對(duì)于如下的員工表,就不屬于第一范式:薪資被拆成了基本工資和補(bǔ)貼
例:用一個(gè)單一的關(guān)系模式學(xué)生來(lái)描述學(xué)校的教務(wù)系統(tǒng):學(xué)生(學(xué)號(hào),學(xué)生姓名,系號(hào),系主任姓名,課程號(hào),成績(jī))
依賴關(guān)系(學(xué)號(hào)->學(xué)生姓名,學(xué)號(hào)->所在系,所在系>系主任姓名,(學(xué)號(hào),課程號(hào))->成績(jī))
第二范式2NF
第二范式:在1NF的基礎(chǔ)上,要求數(shù)據(jù)庫(kù)表中的每個(gè)非主屬性完全依賴于某一個(gè)候選鍵。
通俗地說(shuō),就是表中不能存在聯(lián)合主鍵,按照定義,上面的學(xué)生表就不滿足2NF,因?yàn)閷W(xué)號(hào)不能完全確定成績(jī)(每個(gè)學(xué)生可以選多門課)。
解決方案:將學(xué)生表分解為:
- 學(xué)生(學(xué)號(hào),學(xué)生姓名,系編號(hào),系名,系主任)
- 選課(選課d,學(xué)號(hào),課程號(hào),成績(jī))。
每張表均屬于2NF。
第三范式3NF
第三范式:在2NF的基礎(chǔ)上,要求數(shù)據(jù)庫(kù)表中的每個(gè)非主屬性不依賴于其它非主屬性。也就是說(shuō),數(shù)據(jù)表中的每一列都和主鍵直接相關(guān),而不依賴于其它列,即不能行在傳遞依賴
繼續(xù)上面的實(shí)例,學(xué)生關(guān)系模式就不屬于3NF,因?yàn)閷W(xué)生無(wú)法直接決定系主任和系名,是由學(xué)號(hào)->系編號(hào),再由系編號(hào)->系主任,系編號(hào)->系名,因此存在非主屬性對(duì)主屬性的傳遞依賴,
解決方案:將學(xué)生表進(jìn)一步分解為:
- 學(xué)生(學(xué)號(hào),學(xué)生姓名,系編號(hào))
- 系(系編號(hào),系名,系主任)
- 選課(選課id,學(xué)號(hào),課程號(hào),成績(jī))
每張表都屬于3NF。
BC范式BCNF
BC范式(BCNF):規(guī)范化數(shù)據(jù)庫(kù)設(shè)計(jì)的一種方法,它對(duì)關(guān)系型數(shù)據(jù)庫(kù)中的表進(jìn)行分解,其符合第三范式(3NF),同時(shí)盡量避免數(shù)據(jù)冗余和不一致性,提高數(shù)據(jù)的可靠性和完整性。
假設(shè)倉(cāng)庫(kù)管理關(guān)系表(倉(cāng)庫(kù)ID,存儲(chǔ)物品ID,管理員ID,數(shù)量),且有一個(gè)管理員只在一個(gè)倉(cāng)庫(kù)工作;一個(gè)倉(cāng)庫(kù)可以存儲(chǔ)多種物品。此關(guān)系模式已經(jīng)屬于了3F,那么這個(gè)關(guān)系模式是否存在問題呢?我們來(lái)看以下幾種操作:
- 刪除異常:當(dāng)倉(cāng)庫(kù)被清空后,所有”存儲(chǔ)物品D”和”數(shù)量”信息被刪除的同時(shí),”倉(cāng)庫(kù)ID”和”管理員D”信息也被刪除了。
- 插入異常:當(dāng)倉(cāng)庫(kù)沒有存儲(chǔ)任何物品時(shí),無(wú)法給倉(cāng)庫(kù)分配管理員。
- 更新異常:如果倉(cāng)庫(kù)換了管理員,則表中所有行的管理員D都要修改。
解決方案:把倉(cāng)庫(kù)管理關(guān)系表分解為二個(gè)關(guān)系表;
- 倉(cāng)庫(kù)管理:(倉(cāng)庫(kù)ID,管理員ID);
- 倉(cāng)庫(kù):(倉(cāng)庫(kù)ID,存儲(chǔ)物品ID,數(shù)量)。
這樣的數(shù)據(jù)庫(kù)表是符合BCNF范式的,消除了刪除異常、插入異常和更新異常。
練習(xí)題
給定關(guān)系模式R(U,F),U={A,B,C,D,F={AB→C,CD一B。關(guān)系R(),且分
別有()。
A.只有1個(gè)候選關(guān)鍵字ACB
B.只有1個(gè)候選關(guān)鍵字BCD
C.有2個(gè)候選關(guān)鍵字ACD和ABD
D.有2個(gè)候選關(guān)鍵字ACB和BCD
A.0個(gè)非主屬性和4個(gè)主屬性
B.1個(gè)非主屬性和3個(gè)主屬性
C.2個(gè)非主屬性和2個(gè)主屬性
D.3個(gè)非主屬性和1個(gè)主屬性
答案C A
候選關(guān)鍵字的求法:根據(jù)依賴集,找出從未在右邊出現(xiàn)過的屬性(有出度沒有入度),必然是候選鍵之一,以該屬性為基礎(chǔ),根據(jù)依賴集依次擴(kuò)展,看能香遍歷所有屬性,將無(wú)法遍歷的加入候選鍵中。
設(shè)有關(guān)系模式R(E,N,M,L,Q),其函數(shù)依賴集為F={E一→N,EM一→Q,M一L)。則
關(guān)系模式R達(dá)到了(),該關(guān)系模式()
A.1NF
B.2NF
C.3NF
D.BCNF
A.無(wú)需進(jìn)行分解,因?yàn)橐呀?jīng)達(dá)到了3NF
B.無(wú)需進(jìn)行分解,因?yàn)橐呀?jīng)達(dá)到了BCNF
C盡管不存在部分函數(shù)依賴,但還存在傳遞依賴,所以需要進(jìn)行分解
D.需要進(jìn)行分解,因?yàn)榇嬖谌哂?、修改操作的不一致性、插入和刪除異常
答案A D
有聯(lián)合主鍵EM,不滿足2NF