?
數(shù)據(jù)庫三大范式
第一范式(1NF):
是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。
個(gè)人總結(jié):
不能有表中表。
如數(shù)據(jù)表不能這樣設(shè)計(jì),因?yàn)閿?shù)據(jù)表的一個(gè)二維表:
?
姓名 | 思想道德素質(zhì)測(cè)評(píng)(20%) | ?專業(yè)素質(zhì)測(cè)評(píng)(60%)? | |||||||||
基礎(chǔ)分 | 獎(jiǎng)勵(lì)分 | 懲罰分 | 最后得分 | 排名 | ?必修課成績? | 獎(jiǎng)勵(lì)分 | 懲罰分 | 最后得分 | 排名 | ||
得分 | 排名 | ||||||||||
張三 | 78 | 0 | 0 | 78 | 2 | 71.7 | 1 | 0 | 0.0 | 71.7 | 1 |
王五 | 78 | 0 | 0 | 78 | 2 | 71.3 | 24 | 0.0 | 0.0 | 71.3 | 2 |
李四 | 78 | 0 | 0 | 78 | 2 | 70.8 | 25 | 0.0 | 2.0 | 68.8 | 3 |
而這樣設(shè)計(jì)是可以的:
?
?
姓名 | C語言 | java | MySQL | Oracle |
張三 | 78 | 88 | 68 | 78 |
王五 | 78 | 55 | 87 | 78 |
李四 | 78 | 86 | 91 | 56 |
?
第二范式(2NF):
要求數(shù)據(jù)庫表中的每個(gè)實(shí)例或行必須可以被惟一地區(qū)分,數(shù)據(jù)庫表中不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的部分函數(shù)依賴(部分函數(shù)依賴指的是存在組合關(guān)鍵字中的某些字段決定非關(guān)鍵字段的情況),也即所有非關(guān)鍵字段都完全依賴于任意一組候選關(guān)鍵字。
個(gè)人總結(jié):
非主屬性依賴于主屬性
如以下成績表
?
student_id | course_id | grade | birthday |
20101661 | 1 | 56 | 1991,07,14 |
20101662 | 3 | 58 | 1993,7,25 |
這樣設(shè)計(jì)不行,因?yàn)間rade完全依賴于主碼student_id、course_id,而birthday只依賴于部分主碼student_id。所以要將其拆分成兩個(gè)表
?
student(student_id, birdthday);
grade(student_id, course_id, birthday);?
course_id為聯(lián)系student表的外鍵
第三范式(3NF):
要求一個(gè)數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息,在第二范式的基礎(chǔ)上,數(shù)據(jù)表中如果不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式。
個(gè)人總結(jié):
不能有傳遞性
如以下表
?
student_id | course_id | birthday | SD(所在系的名稱) | SL(所在宿舍樓) |
20101661 | 1 | 1991,07,14 | 軟件學(xué)院 | 1棟 |
20101662 | 3 | 1993,7,25 | 經(jīng)管學(xué)院 | 2棟 |
?
student_id為主碼,SL依賴于student_id,但可以從非主碼屬性SD導(dǎo)出,即知道了SD,也就知道了SL。可以獎(jiǎng)這個(gè)表拆分成兩個(gè)表,如下:
grade(student_id, course_id,SD);
department(SD, SL);
SD為 聯(lián)系 grade表的主鍵
數(shù)據(jù)庫的存儲(chǔ)方式
順序存放,平均查詢次數(shù)為關(guān)系的記錄個(gè)數(shù)的1/2;
雜湊存入,平均查詢次數(shù)由雜湊算法決定;
索引存放,要確定建立何種索引,及建立索引的表和屬性;
聚簇存放,記錄聚簇是指將不同類型的記錄分配到相同的物理區(qū)域中,以充分利用順序性的優(yōu)點(diǎn),提高訪問速度。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
