資料庫三範式的簡單理解

來源:互聯網
上載者:User
參考書籍:資料庫系統概論第四版-王珊、薩師煊
資料庫範式 範式的層級       設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。       目前關聯式資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。       範式越高,冗餘最低,一般到三範式,再往上,表越多,可能導致查詢效率下降。所以有時為了提高運行效率,可以讓資料冗餘(反三範式,一般某個資料經常被訪問時,比如資料表裡存放了語文數學英語成績,但是如果在某個時間經常要得到它的總分,每次都要進行計算會降低效能,可以加上總分這個冗餘欄位)。       後面的範式是在滿足前面範式的基礎上,比如滿足第二範式的一定滿足第一範式。 第一範式(1NF):確保每一列的原子性 如果每一列都是不可再分的最小資料單元,則滿足第一範式。
id 地址 1 中國廣東 2 中國雲南 上面的表地址欄位其實可以繼續分:
id 國家 省份 1 中國 廣東 2 中國 雲南 但是具體地址到底要不要拆分 還要看具體情形,比如看看將來會不會按國家或者省市進行分類匯總或者排序,如果需要,最好就拆,如果不需要而僅僅起字串的作用,可以不拆,操作起來更方便。 第二範式:非鍵欄位必須依賴於鍵欄位 如果一個關係滿足1NF,並且除了主鍵以外的其它列,都依賴與該主鍵,則滿足二範式(2NF),第二範式要求每個表只描述一件事。 例如:
欄位 例子 訂單編號 001 產品編號 a011 訂購日期 2017-4-8 價格 ¥30 而實際上,產品編號與訂單編號並沒有明確的關係,訂購日期與訂單編號有關係,因為一旦訂單編號確定下來了,訂購日期也確定了,價格與訂單編號也沒有直接關係,而與產品有關,所以上面的表實際上可以拆分: 訂單表:
訂單編號 001 日期 2017-4-8
產品表:
產品編號 a011 價格 ¥30 第三範式:在1NF基礎上,除了主鍵以外的其它列都不傳遞依賴於主鍵列,或者說: 任何非主屬性不依賴於其它非主屬性 (在2NF基礎上消除傳遞依賴) 例如:
欄位 例子 訂單編號 001 訂購日期 2017-4-8 顧客編號 a01 顧客姓名 howard 上面的滿足第一和第二範式,但是不滿足第三範式,原因如下: 通過顧客編號可以確定顧客姓名,通過顧客姓名可以確定顧客編號,即在這個訂單表裡,這兩個欄位存在傳遞依賴,只需要一個就夠了。 又如:
主鍵 學號 姓名 成績 1 111 howard 90 2 222 tom 90
上面的表,學號和姓名存在傳遞依賴,因為(學號,姓名)->成績,學號->成績,姓名->成績。所以學號和姓名有一個冗餘了,只需要保留一個。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.