Lesson 55 — ORM vs Raw SQL
Ba module tương tác cho 3 ý cốt lõi của bài: (1) Tool spectrum picker — chọn tình huống, hệ thống gợi ý công cụ phù hợp trên trục raw→ORM; (2) N+1 visualizer — kéo số user, so sánh lazy (N+1 query) vs Preload (luôn 2 query); (3) Code comparison — cùng một query viết bằng raw / sqlx / sqlc / GORM cạnh nhau, kèm số dòng + badge type-safety.
1. Tool spectrum picker
Chọn một tình huống — công cụ gợi ý sẽ sáng lên trên spectrum bên dưới. Không nấc nào "xịn hơn", chỉ là đánh đổi control ↔ tiện.
2. N+1 visualizer — lazy vs Preload
Lấy danh sách user kèm post. Lazy: 1 query users + mỗi user 1 query posts =
N+1. Preload: 1 query users + 1 query WHERE user_id IN (...) = luôn 2.
Kéo thanh để đổi số user và xem số query nổ ra sao.
3. Code comparison — cùng 1 query, 4 cách viết
Query: "Lấy 1 user theo email". Xem 4 cách viết cạnh nhau — chú ý số dòng và mức type-safety mỗi cách.
Bảng đối chiếu nhanh
| Công cụ | Type-safety | Control SQL | SQL ẩn? | Boilerplate |
|---|---|---|---|---|
| database/sql (raw) | Thấp | Toàn quyền | Không | Nhiều |
| sqlx | Thấp-TB | Toàn quyền | Không | Ít |
| sqlc | Cao | Toàn quyền | Không | Rất ít |
| GORM | TB (runtime) | Hạn chế | Nhiều | Rất ít |