1. 程式人生 > >數據庫的三大範式和五大約束(轉)

數據庫的三大範式和五大約束(轉)

date 查看 引擎 uniq 文件 緩沖 運行 數值 alt

一、三大範式:

  1. 第一範式(1NF):數據表中的每一列(每個字段)必須是不可拆分的最小單元,也就是確保每一列的原子性;

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

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

  總結:
    第一範式和第二範式在於有沒有分出兩張表,第二範式是說一張表中包含了所種不同的實體屬性,那麽要必須分成多張表, 第三範式是要求已經分成了多張表,那麽一張表中只能有另一張表中的id(主鍵),而不能有其他的任何信息(其他的信息一律用主鍵在另一表查詢)

二、 五大約束:
  1. primary KEY: 主鍵
  (1)說明:主鍵默認非空,默認唯一性約束,只有主鍵才能設置自動增長,自動增長一定是主鍵,主鍵不一定自動增長;
  (2)設置方式:
      在定義列時設置:ID INT PRIMARY KEY
      在列定義完之後設置:primary KEY(id)

  2. UNIQUE:唯一性約束,不能有重復值;

  3. DEFAULT :默認值約束,

   例如: height DOUBLE(3,2)DEFAULT 1.2------ height不輸入是默認為1,2

  4 .NOT NULL:非空約束,該字段不能為空;

  5. FOREIGN key :外鍵
  (1)註意事項:
    只有INNODB的數據庫引擎支持外鍵;

    外鍵必須與參照列的數據類型必須相同(數值型要求長度和無符號都相同,字符串要求類型相同,長度可以不同)

  (2)設置方式:
    CONSTRAINT 外鍵名 FOREIGN KEY (外鍵字段)REFERENCES 參照表 (參照字段) ON DELETE SET NULL ON UPDATE CASCADE 設置參照完整性

  (3)當對參照表的參照字段進行刪除或更新時,外鍵表中外鍵的響應:
   RESTRICT:拒絕參照表刪除或更新參照字段 ----------------RESTRICT和NO ACTION相同,但這個指令只在mysql生效;
   CASCADE: 刪除或更新參照表的參照字段時,外鍵表的記錄同步刪除更新;
   SET NULL: 刪除或更新參照表的參照字段時,外鍵表的外鍵設為NULL;

  

  註:數據庫引擎(這裏簡單總結下InnoDB引擎和My IASM引擎的區別)

  1. InnoDB引擎:

   MySQL默認的引擎,提供了對數據庫ACID事務的支持,並且實現了SQL標準的四種隔離級別,除此之外,該引擎還提供了行級鎖和外鍵約束,它的設計目標是處理大容量數據庫系統;

   MySQL運行時InnoDB會在內存中建立緩沖池,用於緩沖數據和索引。但是該引擎不支持FULLTEXT類型的索引,而且它沒有保存表的行數,當SELECT COUNT(*) FROM TABLE時需要掃描全表。當需要使用數據庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在高並發時,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。

  2. My IASM引擎

   該引擎沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵,因此寫操作時需要鎖定整個表,效率便會低一些;

   不過和InnoDB不同,MyIASM中存儲了表的行數,於是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經保存好的值而不需要進行全表掃描。如果表的讀操作遠遠多於寫操作且不需要數據庫事務的支持,那麽MyIASM也是很好的選擇。

  3. 查看方式:

  技術分享

  修改方式: /etc/my.cnf 文件(Linux)或my.ini(Windows)修改 default-storage-engine

轉自:http://www.cnblogs.com/waj6511988/p/7027127.html

數據庫的三大範式和五大約束(轉)