這是我參與8月更文挑戰的第6天,活動詳情查看:8月更文挑戰mysql
大致來講,MySQL 能夠分爲 Server 層和存儲引擎兩部分。sql
Server 層包括:鏈接器、查詢緩存、分析器、優化器、執行器等,涵蓋了 MySQL 的大多數核心服務功能,以及全部的內置函數(如:日期、時間、數學和加密函數等),全部跨存儲引擎的功能都在這一層實現,好比:存儲過程、觸發器、視圖等等。數據庫
存儲引擎層負責:數據的存儲和提取。其架構是插件式的,支持 InnoDB、MyISAM 等多個存儲引擎。從MySQL5.5.5 版本開始默認的是InnoDB,可是在建表時能夠經過 engine = MyISAM 來指定存儲引擎。不一樣存儲引擎的表數據存取方式不一樣,支持的功能也不一樣。緩存
從上圖中能夠看出,不一樣的存儲引擎共用一個 Server 層,也就是從鏈接器到執行器的部分。服務器
設計範式(範式,數據庫設計範式,數據庫的設計範式)是符合某一種級別的關係模式的集合。markdown
範式說明:
第一範式(1NF):數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。
第二範式(2NF):數據庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的狀況),也即全部非關鍵字段都徹底依賴於任意一組候選關鍵字。
第三範式(3NF):在第二範式的基礎上,數據表中若是不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是若是存在"A → B → C"的決定關係,則C傳遞函數依賴於A。所以,知足第三範式的數據庫表應該不存在以下依賴關係: 關鍵字段 → 非關鍵字段x → 非關鍵字段y架構
知足範式要求的數據庫設計是結構清晰的,同時可避免數據冗餘和操做異常。這並不意味着不符合範式要求的設計必定是錯誤的,在數據庫表中存在1:1或1:N關係這種較特殊的狀況下,合併致使的不符合範式要求反而是合理的。 數據庫設計