Thiết kế database cho marketplace như thế nào?
Phân tích schema thực tế cho freelance marketplace — escrow, reviews, dispute resolution và làm sao tránh bottleneck.
Khi thiết kế database cho marketplace, có 4 vấn đề kinh điển bạn phải giải quyết: payments, escrow, reviews và disputes.
**Payments**: Đừng tự xử lý card, hãy dùng Stripe/VNPay/MoMo. Database chỉ lưu transaction_id và status. Dùng webhook để cập nhật trạng thái — tuyệt đối không trust client.
**Escrow**: Tách bảng escrow_account riêng, dùng double-entry bookkeeping (debit/credit). Mọi transaction phải atomic và traceable. Dùng database transaction + idempotency key.
**Reviews**: Lưu cả rating numeric và comment text. Tính avg rating bằng materialized view nếu volume lớn. Cẩn thận với fake review — yêu cầu phải có purchase mới review được.
**Disputes**: Thiết kế state machine rõ ràng — OPEN, INVESTIGATING, RESOLVED, CLOSED. Lưu mọi event vào audit log để truy vết được.
**Performance tips**: Đánh index trên (seller_id, status), (buyer_id, created_at). Partition orders table theo tháng. Cache các counter (total_sales, total_reviews) thay vì COUNT() mỗi lần.
