程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 數據庫設計三范式,數據庫范式

數據庫設計三范式,數據庫范式

編輯:MySQL綜合教程

數據庫設計三范式,數據庫范式


第一范式(1NF)

  ◇ 每一列必須僅包含一個值(也稱作列值的原子性或不可再分割性)。比如存儲用戶地址,一列不能同時存國家、省、市、街道等信息。

  ◇ 所有表都不能具有相關數據的重復列。比如商品圖片,不能圖片1用一列,圖片2用一列,圖片3用一列......,如果一個表有重復的相似列,就采用關系模型(一對一,一對多)把這些列轉化成單獨的表。

  第一范式就是橫向分析表,確保橫向列值的唯一性並避免重復出現類似的數據。

 

第二范式(2NF)

  ◇ 某一列在多行中不能有重復的非主鍵值,重復的非主鍵值必定是另一張表的主鍵值。這裡比較有疑惑的就是時間字段,其實MySQL對日期支持的非常好,還有就是在同一秒內出現完全相同的操作概率是極低的。

  ◇ 表中每一個非主鍵都依賴於表的主鍵。

  第二范式就是縱向分析表,確保縱向列值不含重復的非主鍵值。查看表之間的關系,如果出現多對多的關系時,就要拆表再新建關聯表,一個表的主鍵通常是另一個表的外鍵。

 

第三范式(3NF)

  ◇ 表中的單列是獨立的,也就是修改某一列的值不需要修改另一列的值,不能存在一列是另一列的子集,比如a->b->c,c是b中的屬性,那麼bc就不能同時出現在一張表中。但列與列之間又是相互依賴的。

 

數據庫設計允許有個人的愛好和诠釋,但最重要的要求是不要明顯地違反范式,任何違反范式的設計都會在將來出現一些問題。規范化就是在數據完整性與可擴展性,簡單與快速之間進行權衡,實踐和經驗將會讓我們掌握最佳的數據建模方式,並盡可能地遵守范式。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved