首先來說講三個數據庫的三個範式數據庫
三個範式:
第一範式(1NF):數據庫表中的字段都是單一屬性的,不可再分。1NF是全部關係型數據庫的最基本要求。併發
第二範式(2NF):在第一範式的基礎上,消除非主屬性對碼的部分函數依賴。能夠理解爲要有主鍵,要求其餘字段都依賴於主鍵。數據庫設計
第三範式(3NF):在第二範式的基礎上,消除了非主屬性對於碼的傳遞函數依賴。消除傳遞依賴,能夠看作是「消除冗餘」,消除冗餘應該比較好理解一些,就是各類信息只在一個地方存儲,不出如今多張表中。非主鍵外的全部字段必須互不依賴。函數
結論:若是符合第三範式要求的數據庫設計,基本上就解決了數據冗餘過大,插入異常,修改異常,刪除異常的問題。固然,在實際中,每每爲了性能上或者應對擴展的須要,常常 作到2NF或者1NF,可是做爲數據庫設計人員,至少應該知道,3NF的要求是怎樣的。高併發
數據庫優化:
- 設計表的時候,適度冗餘字段,減小join操做
- 選擇恰當的數據類型,好比自定義類型
- 對於一些比較頻繁的做爲查詢條件的字段創建索引,惟一性太差的字段不適合建立索引。
- 開啓慢查詢日誌找出效率低下的SQL語句進行優化。
- 設計表的時候,全部表和字段都添加相應的註釋:
- 設計數據庫表時,加上三個字段: 主鍵、create_time、update_time
- 主鍵必定要加上的,沒有主鍵的表示沒有靈魂的,建立時間和更新時間對詳細審計和跟蹤記錄都是有用的。
- 儘可能把全部列定義爲NOT NULL
- 全部表儘可能InnoDB引擎,Innodb 「支持事務,支持行級鎖,更好的恢復性」,高併發下性能更好,因此呢,沒有特殊要求(即Innodb沒法知足的功能如:列存儲,存儲空間數據等)的狀況下,全部表必須使用Innodb存儲引擎。
- 多字段表能夠進行垂直分表優化,多數據表能夠進行水平分表優化
垂直分表
- 經常使用的字段放在一個表中
- 不經常使用的字段放在另外一個表中
- 數據類型佔用空間比較大的值也單獨放表
水平分表
- 把一個id在一個範圍以內(0-1000w,1000w-2000w)的分給一張表。缺點是:最先使用的數據庫表的活躍用戶比較低,就可能浪費數據庫的使用空間
- 按餘數分,要事先估算這個表n年以後,最大能存多少數據。按id劃分,好比分紅3個表就把id/3分別存儲。缺點是:估算要建立多少表。(小公司)