1. 程式人生 > >資料庫的3大正規化和5大約束

資料庫的3大正規化和5大約束

今天來講一下資料庫的相關知識點,資料庫的三大特性可謂是:實體屬性和關係。

     實體:表; 屬性:表中的資料(欄位); 關係:表與表之間的關係;

     資料庫設計三大正規化(重點):

第一正規化(1NF):資料表中的每一列(每個欄位)必須是不可拆分的最小單元,也就是確保每一列的原子性;

例如:userInfo:山東省煙臺市  131777368781           userAds:山東0省煙臺市  userTel:131777368781 

 

第二正規化(2NF):滿足1NF後,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係,也就是說一個表只描述一件事情;

例如:訂單表只描述訂單相關的資訊,所以所有欄位都必須與訂單id相關       

產品表只描述產品相關的資訊,所以所有欄位都必須與產品id相 關;

因此不能在一張表中同時出現訂單資訊與產品資訊;如下圖所示(1張表拆成2張表):

 

 第三正規化(3NF):必須先滿足第二正規化(2NF),要求:表中的每一列只與主鍵直接相關而不是間接相關,(表中的每一列只能依賴於主鍵);

例如:訂單表中需要有客戶相關資訊,在分離出客戶表之後,訂單表中只需要有一個使用者id即可(外來鍵),而不能有其他的客戶資訊。因為其他的客戶資訊直接關聯於使用者id,而不是直接與訂單id直接相關。

 

【如何更好的區分三大正規化】

         第 一正規化和第二正規化在於有沒有分出兩張表,第二正規化是說一張表中包含了多種不同的實體屬性,那麼要必須分成多張表, 第三正規化是要求已經分成了多張表,那麼一張表中只能有另一張表中的id(主鍵),而不能有其他的任何資訊(其他的資訊一律用主鍵在另一表查詢)。

總結:

第1正規化:每個表中都有1列,並且該列是不可拆分的最小單元

第2正規化:1張表只描述一件事情

第3正規化:用外來鍵做表的關聯

【資料庫五大約束】

1.primary KEY:設定主鍵約束;
2.UNIQUE:設定唯一性約束,不能有重複值;
3.DEFAULT 預設值約束,height DOUBLE(3,2)DEFAULT 1.2 height不輸入是預設為1,2
4.NOT NULL:設定非空約束,該欄位不能為空;
5.FOREIGN key :設定外來鍵約束。

【主鍵】
1.主鍵的注意事項?
主鍵預設非空,預設唯一性約束,只有主鍵才能設定自動增長,自動增長一定是主鍵,主鍵不一定需要自動增長;
2.設定主鍵的方式?
在定義列時設定:ID INT PRIMARY KEY
在列定義完之後設定:primary KEY(id)

【外來鍵】

1.設定外來鍵的注意事項:   

只有INNODB的資料庫引擎支援外來鍵,修改my.ini檔案設定default-storage-engine=INNODB    外來鍵必須與參照列的資料型別必須相同(數值型要求長度和無符號都相同,字串要求型別相同,長度可以不同)。

2設定外來鍵的語法:

   CONSTRAINT 外來鍵名 FOREIGN KEY (外來鍵欄位)REFERENCES 參照表 (參照欄位)    ON DELETE SET NULL ON UPDATE CASCADE 設定參照完整性

3.外來鍵約束的參照操作?  

  參照表的完整性操作:當對參照表的參照欄位進行刪除或更新時,外來鍵表中的外來鍵如何應對;   

參照操作可選值:

      RESTRICT拒絕參照表刪除或更新參照欄位;               

      RESTRICT和NO ACTION相同,但這個指令只在mysql生效;                

      CASCADE刪除或更新參照表的參照欄位時,外來鍵表的記錄同步刪除更新;               

      SET NULL 刪除或更新參照表的參照欄位時,外來鍵表的外來鍵設為NULL;