# 字段規范
##寫在前面
* InnoDB表是索引聚集組織表(IOT), 所有的行數據(row data)都是以主鍵(嚴格意義講,是聚集索引)邏輯順序存儲,而二級索引(或稱輔助索引,secondary index)的value則同時包含主鍵。
* InnoDB的最小I/O單位是data page(默認一個data page大小是16KB),在buffer pool中的最小單位是data page(而不是每行數據哦)。因此也可以這么理解,一個data page里的熱點數據越多,其在buffer pool的命中率就會越高。
* MySQL復制環境中,如果binlog format是row的,則從庫上的數據更新時是以主鍵為依據進行apply的,如果沒有主鍵則將可能會有災難性的后果。
* 此外,強烈建議每張表三個必加字段:aid(int/bigint unsigned類型,自增長列,并且作為主鍵),create_time(timestamp或int unsigned)、update_time(和create_time想同)用于記錄行創建時間以及最后更新時間,在業務上以及日常維護上會有很多便利;
##字段設計參考
1. 每個表建議不超過30-50個字段
2. 優先選擇utf8字符集,如果對存儲容量比較敏感的,可以改成latin1字符集。需要存儲emoji字符的,則選擇utf8mb4字符集
3. 嚴禁在數據庫中明文存儲用戶密碼、身份證、信用卡號(信用卡PIN碼)等核心機密數據,務必先行加密
4. 存儲整型數據時,默認加上UNSIGNED,擴大存儲范圍
5. 建議用INT UNSIGNED存儲IPV4地址,查詢時再利用INET_ATON()、INET_NTOA()函數轉換
6. 如果遇到BLOB、TEXT字段,則盡量拆出去,再用主鍵做關聯
7. 在夠用的前提下,選擇盡可能小的字段,用于節省磁盤和內存空間
8. 涉及精確金額相關用途時,建議擴大N倍后,全部轉成整型存儲(例如把分擴大百倍),避免浮點數加減出現不準確問題
##常用數據類型參考
...