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?

© Hiếu Trần 2020 - 2025

Tip: Use console.table() for better array logging!