如何設計出好的數據庫

首先來說講三個數據庫的三個範式數據庫

三個範式:

​ 第一範式(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分別存儲。缺點是:估算要建立多少表。(小公司)
相關文章
相關標籤/搜索