數據庫設計思路

開發時設計數據庫的表結構:

1.閱讀原型圖,找出所有需要保存的數據(字段)

2.根據找出的數據,設計表

3.繼續閱讀原型圖,考慮中間數據,繼續完善表結構

小結:

  • 先做出一個差不多的表結構,不求一下子完美,追求逐漸完善,有時發現不合理需要重新設計。
  • 數據庫設計是需要靠經驗積累,所以要多看原型,多練習設計。
  • 大多時候,數據庫設計的好不好,跟對業務的理解程度正相關。

數據庫設計詳情:

1.根據需求設計

  • 表結構
  • 字段類型
  • 索引設計
  • 引擎選擇

2. 注意事項

2.1 表結構

範式設計

  • 第一範式(1NF):強調列的原子性,即列不能夠再分成其他幾列。
  • 第二範式(2NF):滿足1NF,另外表必須要有主鍵和非主鍵字段,非主鍵字段必須完全依賴於主鍵
  • 第三範式(3NF):滿足2NF,另外非主鍵字段必須直接依賴於主鍵,不能存在傳遞依賴

反範式設計

  • 爲了查詢效率,有時可以做冗餘字段設計

2.2 字段類型選擇

主鍵類型

  • 一般會選用bigint做主鍵類型,便於後面業務增長

狀態類型

  • 一般選擇tinyint類型,不同的值表示不同的狀態。建議不要使用enum枚舉類型。

字符串類型

  • 如果確定字符長度,需要查詢效率快的,優先選用char
  • 如果不確定長度,選擇varchar。後續再優化

字段的其他參數

  • not null: 不爲空
  • default: 默認值
  • comment: 備註

2.3 索引

  • 普通索引,提高查詢效率
  • 唯一索引和主鍵索引,提高查詢效率且數據唯一
  • 外鍵索引,提高查詢效率且保證數據的完整性

小結

  • 增加索引會提高查詢效率,但增刪改會受到影響
  • 增加索引會額外增加存儲空間,一般只給經常查詢的字段加上索引

2.4 存儲引擎的選擇

InnoDB

  • mysql的默認存儲引擎
  • 支持事務
  • 支持外鍵的完整性約束.

MyISAM

  • 基於ISAM存儲引擎.
  • 不支持事務
  • 速度更快.

MEMORY

  • 將表中的數據存儲到內存中,爲查詢和引用其他表數據提供快速訪問.

小結:

  • 如果要提供提交、回滾、崩潰恢復能力的事務安全能力,並要求實現併發控制,InnoDB是一個好的選擇

  • 如果數據表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率

  • 如果只是臨時存放數據,數據量不大,並且不需要較高的數據安全性,可以選擇將數據保存在內存中的Memory引擎

  • 如果只有INSERT和SELECT操作,可以選擇Archive。Archive支持高併發的插入操作,但是本身不是事務安全的。Archive非常適合存儲歸檔數據,如記錄日誌信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章