02_用戶模型設計
【用戶實體】
【如何把用戶屬性存到表中?——不合理做法】
優點:易於數據存取
缺點:數據存在冗余 數據表過寬,會影響修改表結構
[ 數據庫設計範式 ]
設計範式是數據庫設計的規範,有第一、第二、第三範式。
數據庫設計最低要滿足第三範式的要求。
[ 第三範式(3NF) ]
一個表中的列和其他列之間既不包含部分函數依賴關系,也不包含傳遞函數依賴關系,那麽這個表的設計就符合第三範式。
【優化方案】
[ 盡量做到冷熱數據分離,減小表的寬度 ]
[ 用戶登錄表 ]
【MySql分區表】
確認MySql服務器是否支持分區表
SHOW PLUGINS;
【HASH分區】
[ 分區表存儲的文件 ]
[ 非分區表存儲的文件 ]
【HASH分區的特點】
根據MOD(分區鍵、分區數)的值把數據行存儲到不同的分區中。
數據可以平均地分布到各個分區中。
HASH分區的鍵值必須是一個INT類型的值,或者是通過函數可以轉換為INT類型。
建立HASH分區可使用的一些函數
【按範圍分區(RANGE)】
[ RANGE分區的特點 ]
根據分區鍵值的範圍把數據行存儲到表的不同分區中。
多個分區的範圍要連續,但是不能重疊。
默認情況下使用VALUES LESS THAN屬性,即每個分區不包括指定的那個值。
如果沒有 >30000 的那條語句,一旦數據過大會導致這個錯誤:
[ 按範圍分區的適用場景 ]
分區鍵為時間或者時間類型。
所有查詢中都包括分區鍵。
定期按分區範圍清理歷史數據。
【LIST分區】
[ LIST分區的特點 ]
按分區鍵取值的列表進行分區。
同範圍分區一樣,各分區的列表值不能重復。
每一行數據必須能找到對應的分區列表,否則插入失敗。
[ 如何建立LIST分區 ]
【 如何為customer_login_log表分區 】
[ 業務場景 ]
用戶每次登錄都會記錄customer_login_log日誌
用戶登錄日誌保存一年,一年後刪除。
[ 選擇哪種分區類型? ]
使用RANGE分區
以login_time作為分區鍵
[ 分區後的用戶登錄日誌表 ]
【使用分區表的註意事項】
結合業務場景選擇分區鍵,避免跨分區查詢。
對分區表進行查詢最好在WHERE從句中包含分區鍵。
具有主鍵或唯一索引的表,主鍵或唯一索引必須是分區鍵的一部分。
02_用戶模型設計