便利的集團網(wǎng)站建設(shè)朋友圈廣告投放平臺
文章目錄
- MySQL數(shù)據(jù)庫范式
- 1、范式的優(yōu)缺點
- 2、第一范式
- 3、第二范式
- 4、第三范式
- 5、BC范式
- 6、第四范式
MySQL數(shù)據(jù)庫范式
1、范式的優(yōu)缺點
- 應(yīng)用數(shù)據(jù)庫范式的好處:
- 減少數(shù)據(jù)冗余(這是最主要的好處,其他好處都是由此而附帶的)
- 消除異常(插入異常,更新異常,刪除異常)
- 讓數(shù)據(jù)組織的更加和諧
- 范式設(shè)計的缺點:
- 范式越高,意味著表越多,多表聯(lián)合查詢的機率就越大,SQL的效率就變低
- 表越多時,在做更新、刪除、插入數(shù)據(jù)時需要維護的表越多,同樣會降低數(shù)據(jù)庫的效率
- 因此:
并不是應(yīng)用的范式越高越好,視實際情況而定。第三范式已經(jīng)很大程度上減少了數(shù)據(jù)冗余,并且基本預(yù)防了數(shù)據(jù)插入異常,更新異常,和刪除異常了。
2、第一范式
- 第一范式: 每一列保持原子特性
列都是基本數(shù)據(jù)項,不能夠再進行分割,否則設(shè)計成一對多的實體關(guān)系
注:不符合第一范式不能稱作關(guān)系型數(shù)據(jù)庫
- 例如:表中的地址字段,可以再細分為省,市,區(qū)等不可再分割(即原子特性)的字段
3、第二范式
- 第二范式:屬性完全依賴于主鍵-主要針對聯(lián)合主鍵
非主屬性完全依賴于主關(guān)鍵字,如果不是完全依賴主鍵(即不全依賴聯(lián)合主鍵中的所有關(guān)鍵字),應(yīng)該拆分成新的實體,設(shè)計成一對多的實體關(guān)系
- 例如:選課關(guān)系表為SelectCourse(學(xué)號, 姓名, 年齡, 課程名稱, 成績, 學(xué)分),(學(xué)號,課程名稱)是聯(lián)合主鍵,但是學(xué)分字段只和課程名稱有關(guān),和學(xué)號無關(guān),相當于只依賴聯(lián)合主鍵的其中一個字段,不符合第二范式。
4、第三范式
- 第三范式:屬性不依賴于其它非主屬性
要求一個數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息
注:一般關(guān)系型數(shù)據(jù)庫滿足第三范式就可以了
- 示例:學(xué)生關(guān)系表為Student(學(xué)號, 姓名, 年齡, 所在學(xué)院, 學(xué)院地點, 學(xué)院電話),學(xué)號是主鍵,但是學(xué)院電話只依賴于所在學(xué)院,并不依賴于主鍵學(xué)號,因此該設(shè)計不符合第三范式,應(yīng)該把學(xué)院專門設(shè)計成一張表,學(xué)生表和學(xué)院表,兩個是一對多的關(guān)系。
5、BC范式
- BC范式:每個表中只有一個候選鍵
BC范式是在第三范式的基礎(chǔ)上的一種特殊情況,即每個表中只有一個候選鍵(在一個數(shù)據(jù)庫中每行的值都不相同,則可稱為候選鍵)
- 示例:每一個員工的email都是唯一的(不可能兩個人用同一個email),則此表不符合BC范式,對其進行BC范式化后的關(guān)系圖為
- 注意:
在要求更好的查詢效率時,可以不遵循BC范式(多一個候選鍵,就多一份表,更多可能需要進行聯(lián)合查詢),候選鍵儲存在主表上也是沒有問題的,并不會造成數(shù)據(jù)的冗余,在一定程度上提高查詢效率
6、第四范式
- 第四范式:消除表中的多值依賴(減少維護數(shù)據(jù)一致性的工作)
比如:noNF表中的skill技能這個字段,有的人是“java,mysql”,有的人描述的是“Java,MySQL”,這樣數(shù)據(jù)就不一致了,解決辦法就是將多值屬性放入一個新表
樣數(shù)據(jù)就不一致了,解決辦法就是將多值屬性放入一個新表
[外鏈圖片轉(zhuǎn)存中…(img-n7yeQkem-1680516329350)]