date
Dec 13, 2025
slug
docs-traning-be-intern-week-2
status
Published
tags
NestJs
Backend
summary
Tổng hợp docs trainning back-end Intern Week 2
type
Post
TUẦN 2 – DATABASE & BACKEND ARCHITECTURE
Mục tiêu tuần
- Hiểu database đóng vai trò gì trong hệ thống Web3
- Biết thiết kế dữ liệu đúng từ đầu
- Biết tách layer backend rõ ràng
- Tránh các lỗi kiến trúc phổ biến của junior
- Sẵn sàng build backend lớn dần theo thời gian
1. Database trong Web3 – Hiểu đúng để không thiết kế sai
Sai lầm phổ biến
- “Blockchain là database”
- “Không cần database vì có smart contract”
👉 Thực tế:
- Blockchain rất chậm khi query
- Không thể:
- filter phức tạp
- sort
- pagination
- Mỗi read/write tốn gas hoặc RPC
Vai trò database trong Web3 backend
- Cache dữ liệu on-chain
- Index event
- Lưu user / session
- Analytics / reporting
- Off-chain business logic
2. Tổng quan các loại Database
SQL (PostgreSQL, MySQL)
- Structured
- Quan hệ rõ ràng
- Transaction mạnh
👉 Phù hợp:
- User
- Wallet
- Transaction
- Permission
NoSQL (MongoDB)
- Linh hoạt
- Schema-less
👉 Phù hợp:
- Log
- Event data
- Metadata
Kết luận
👉 Backend Blockchain production gần như luôn có SQL.
3. Data Modeling – Cái quan trọng nhất tuần 2
Nguyên tắc sống còn
Thiết kế dữ liệu sai → code backend càng về sau càng nát.
Ví dụ hệ Web3 tối thiểu
User
- id
- email (optional)
- createdAt
Wallet
- address
- userId
- chainId
Transaction
- hash
- from
- to
- value
- status
- blockNumber
Quan hệ
- User 1 – N Wallet
- Wallet 1 – N Transaction
4. Normalization vs Denormalization
Normalization
- Tránh trùng lặp
- Dữ liệu sạch
Denormalization
- Duplicate có chủ đích
- Để query nhanh
👉 Indexer Web3 thường denormalize.
5. Transaction – KHÔNG PHẢI transaction blockchain
Database transaction là gì?
- Atomic
- Consistent
- Isolated
- Durable
Dùng khi nào?
- Ghi nhiều bảng
- Tạo user + wallet
👉 Không dùng transaction → data sai ngầm.
6. ORM – Vì sao phải dùng?
ORM làm gì?
- Map code ↔ DB
- Migration
- Type safety
Prisma (ví dụ)
- Schema rõ ràng
- TypeScript support
7. Migration – Thứ junior hay bỏ qua
Migration là gì?
- Lịch sử thay đổi DB
- Không sửa tay DB production
👉 Web3 backend chạy lâu dài, migration là bắt buộc.
8. Backend Architecture – Tách layer chuẩn
Sai lầm phổ biến
- Viết hết logic trong controller
- Controller gọi DB trực tiếp
Kiến trúc chuẩn (Clean-ish)
Route
↓
Controller
↓
Service
↓
Repository
↓
Database
Vai trò từng layer
- Route: mapping URL
- Controller: nhận input, trả output
- Service: business logic
- Repository: DB logic
9. DTO & Validation
Vì sao cần validate?
- Không tin client
- Tránh crash
DTO
- Shape dữ liệu vào / ra
- Tách khỏi model DB
10. Pagination & Filtering
Vì sao quan trọng?
- Data Web3 rất lớn
- Không pagination = chết server
Cơ bản
- limit
- offset
- cursor (blockNumber)
11. Performance & Index
Index là gì?
- Tăng tốc query
- Đổi space lấy time
Nên index:
- wallet address
- tx hash
- block number
12. Bài tập BẮT BUỘC
Bài 1 – Thiết kế schema
- User
- Wallet
- Transaction
Bài 2 – CRUD API
- Create user
- Add wallet
- List tx theo wallet
Bài 3 – Transaction DB
- Create user + wallet trong 1 transaction
13. Checklist TỰ ĐÁNH GIÁ
- Database khác blockchain thế nào?
- Khi nào cần denormalize?
- ORM giúp tránh bug gì?
- Vì sao không query blockchain trực tiếp mọi lúc?
- Controller có nên biết DB không?
- Nếu DB schema sai, sửa có dễ không?