開發時設計數據庫的表結構:
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非常適合存儲歸檔數據,如記錄日誌信息