1. 程式人生 > >資料庫的三正規化是什麼?

資料庫的三正規化是什麼?

第一正規化(1NF):欄位具有原子性,不可再分。所有關係型資料庫系統都滿足第一正規化)

   資料庫表中的欄位都是單一屬性的,不可再分。例如,姓名欄位,其中的姓和名必須作為一個整體,無法區分哪部分是姓,哪部分是名,如果要區分出姓和名,必須設計成兩個獨立的欄位。

第二正規化(2NF):

第二正規化(2NF)是在第一正規化(1NF)的基礎上建立起來的,即滿足第二正規化(2NF)必須先滿足第一正規化(1NF)。

   要求資料庫表中的每個例項或行必須可以被惟一地區分。通常需要為表加上一個列,以儲存各個例項的惟一標識。這個惟一屬性列被稱為主關鍵字或主鍵。



   第二正規化(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上一個列,以儲存各個例項的惟一標識。簡而言之,第二正規化就是非主屬性非部分依賴於主關鍵字。

第三正規化的要求如下:

滿足第三正規化(3NF)必須先滿足第二正規化(2NF)。簡而言之,第三正規化(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字資訊。

所以第三正規化具有如下特徵:
         1,每一列只有一個值 
         2,每一行都能區分。 
         3,每一個表都不包含其他表已經包含的非主關鍵字資訊。


    例如,帖子表中只能出現發帖人的id,而不能出現發帖人的id,還同時出現發帖人姓名,否則,只要出現同一發帖人id的所有記錄,它們中的姓名部分都必須嚴格保持一致,這就是資料冗餘。