關於 Database 的一些 Note
Database
Transaction: 一串資料對DB執行Read/Write,trnsaction內所有操作完成/不完成 (InnoDB特有)
- Atomicity: 若發生意外,rollback到未執行時狀態
- Consistency: 交易完成,維持資料完整性
- Isolation: 多個交易同時獨立執行
- Durability: 交易完成,異動結果完整保留
SQL & NoSQL 差異
| SQL | NoSQL | |
|---|---|---|
| 資料 | Table之間串聯 | JSON格式儲存資料,key-value型態 |
| 優點 | 資料一致性、完整 | 處理大量的結構化資料、易擴展 |
| 缺點 | 複雜場景、關係操作不易 | 缺乏標準化 |
| 舉例 | 處理金融信息和交易 | 資料分析、事件紀錄 |
資料庫正規化
- Primary key、消除意義上重複的欄位(性別、Gender)、欄位保持單一值
- 消除部分相依(Foreign key概念)
- 消除遞移相依(欄位與主鍵無直接關係,舉例:避免數量改變而總金額沒改到造成資料錯誤,應把總金額欄位移除。)
建立 index 規則
- 常拿來做條件判斷的欄位
- 欄位不要NULL、欄位內的值不大不用
- Foreign key
Hibernate
- Spring Data JPA(JpaRepository,底層實現hibernate)
- JDBC透過 Java 來連接資料庫的一種技術
- ORM(概念)物件關係的映射
- JPA(規範) 來映射「物件的欄位」與「表的欄位」之間的對應關係 (@Column…)
- 遵循 JPA 規範的 ORM 框架: Spring Data JPA、Hibernate
Q & A
如何優化SQL?
可使用explain分析SQL query (加index/建立view)
explain 解讀使用索引
選擇適當的type
使用Join替代子查詢
避免掃描整張表、臨時表
避免 select *