學(xué)號(hào) | 課程 | 成績(jī) | 課程學(xué)分 |
---|---|---|---|
10001 | 數(shù)學(xué) | 100 | 6 |
10001 | 語(yǔ)文 | 90 | 2 |
10001 | 英語(yǔ) | 85 | 3 |
10002 | 數(shù)學(xué) | 90 | 6 |
10003 | 數(shù)學(xué) | 99 | 6 |
10004 | 語(yǔ)文 | 89 | 2 |
表中主鍵為 (學(xué)號(hào),課程),我們可以表示為 (學(xué)號(hào),課程) -> (成績(jī),課程學(xué)分), 表示所有非主鍵列 (成績(jī),課程學(xué)分)都依賴(lài)于主鍵 (學(xué)號(hào),課程)。 但是,表中還存在另外一個(gè)依賴(lài):(課程)->(課程學(xué)分)。這樣非主鍵列 ‘課程學(xué)分‘ 依賴(lài)于部分主鍵列 '課程‘, 所以上表是不滿(mǎn)足第二范式的。
我們把它拆成如下2張表:
學(xué)生選課表:
學(xué)號(hào) | 課程 | 成績(jī) |
---|---|---|
10001 | 數(shù)學(xué) | 100 |
10001 | 語(yǔ)文 | 90 |
10001 | 英語(yǔ) | 85 |
10002 | 數(shù)學(xué) | 90 |
10003 | 數(shù)學(xué) | 99 |
10004 | 語(yǔ)文 | 89 |
課程信息表:
課程 | 課程學(xué)分 |
---|---|
數(shù)學(xué) | 6 |
語(yǔ)文 | 3 |
英語(yǔ) | 2 |
那么上面2個(gè)表,學(xué)生選課表主鍵為(學(xué)號(hào),課程),課程信息表主鍵為(課程),表中所有非主鍵列都完全依賴(lài)主鍵。不僅符合第二范式,還符合第三范式。
再看這樣一個(gè)學(xué)生信息表:
學(xué)號(hào) | 姓名 | 性別 | 班級(jí) | 班主任 |
---|---|---|---|---|
10001 | 張三 | 男 | 一班 | 小王 |
10002 | 李四 | 男 | 一班 | 小王 |
10003 | 王五 | 男 | 二班 | 小李 |
10004 | 張小三 | 男 | 二班 | 小李 |
上表中,主鍵為:(學(xué)號(hào)),所有字段 (姓名,性別,班級(jí),班主任)都依賴(lài)與主鍵(學(xué)號(hào)),不存在對(duì)主鍵的部分依賴(lài)。所以是滿(mǎn)足第二范式。
第三范式(3NF)
滿(mǎn)足第三范式(3NF)必須先滿(mǎn)足第二范式(2NF)。簡(jiǎn)而言之,第三范式(3NF)要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其它表中已包含的非主鍵字段。就是說(shuō),表的信息,如果能夠被推導(dǎo)出來(lái),就不應(yīng)該單獨(dú)的設(shè)計(jì)一個(gè)字段來(lái)存放(能盡量外鍵join就用外鍵join)。很多時(shí)候,我們?yōu)榱藵M(mǎn)足第三范式往往會(huì)把一張表分成多張表。
即滿(mǎn)足第二范式前提,如果某一屬性依賴(lài)于其他非主鍵屬性,而其他非主鍵屬性又依賴(lài)于主鍵,那么這個(gè)屬性就是間接依賴(lài)于主鍵,這被稱(chēng)作傳遞依賴(lài)于主屬性。 通俗解釋就是一張表最多只存兩層同類(lèi)型信息。
反三范式
沒(méi)有冗余的數(shù)據(jù)庫(kù)未必是最好的數(shù)據(jù)庫(kù),有時(shí)為了提高運(yùn)行效率,提高讀性能,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是: 在概念數(shù)據(jù)模型設(shè)計(jì)時(shí)遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計(jì)時(shí)考慮。降低范式就是增加字段,減少了查詢(xún)時(shí)的關(guān)聯(lián),提高查詢(xún)效率,因?yàn)樵跀?shù)據(jù)庫(kù)的操作中查詢(xún)的比例要遠(yuǎn)遠(yuǎn)大于DML的比例。但是反范式化一定要適度,并且在原本已滿(mǎn)足三范式的基礎(chǔ)上再做調(diào)整的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:定西 寧夏 白銀 秦皇島 恩施 益陽(yáng) 澳門(mén) 杭州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql數(shù)據(jù)庫(kù)設(shè)計(jì)三范式實(shí)例解析》,本文關(guān)鍵詞 Mysql,數(shù)據(jù)庫(kù),設(shè)計(jì),三,范式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。