Đánh giá mức sẵn sàng làm Business Analyst
Chấm từng chiều kỹ năng và cho ra hồ sơ — biết mình đứng ở đâu trước.
Làm bài này
Product Management
Dữ liệu sống ở đâu, đọc và ghi tốn gì — và vì sao số trên dashboard là "tính đến tối qua".
Đăng nhập để đánh dấu kỹ năng và theo dõi tiến độ.
Làm bài Đánh giá Nền tảng Kỹ thuật cho PM/BA — 3 người đã làm. Một lần làm chấm điểm cho tất cả kỹ năng trong nhóm Technical Basics, không chỉ kỹ năng này.
Làm bài đánh giáRelational (SQL — bảng/dòng/cột: MySQL, PostgreSQL) vs non-relational (NoSQL — linh hoạt: MongoDB, Redis). Đa số sản phẩm dùng cả hai. Đọc và ghi đều có chi phí.
Hỏi "dữ liệu này sống ở đâu?"; nhận ra spec đang đòi thứ đắt (quét cả bảng lớn, tổng hợp real-time, query không filter); hiểu vì sao số trên dashboard là "tính đến tối qua".
Database là nơi dữ liệu của sản phẩm được ghi xuống và đọc lên: người dùng, đơn hàng, giao dịch, tồn kho. Mọi con số bạn nhìn thấy trên màn hình đều đến từ một chỗ nào đó trong database — nếu chỗ đó chưa tồn tại thì feature của bạn phải tạo ra nó trước.
Relational (SQL) — dữ liệu nằm trong bảng, mỗi bảng có cột cố định, mỗi dòng là một bản ghi. MySQL, PostgreSQL. Hợp với dữ liệu cần chính xác và có quan hệ với nhau: đơn hàng, thanh toán, tồn kho.
Non-relational (NoSQL) — linh hoạt hơn, mỗi bản ghi có thể có hình dạng khác nhau. MongoDB (document), Redis (thường dùng làm cache, đọc cực nhanh nhưng dữ liệu có thể cũ vài giây).
Đa số sản phẩm dùng cả hai. Và điều quan trọng nhất với BA/PO: đọc và ghi đều có chi phí. Một câu hỏi "20 đơn mới nhất của khách này" là rẻ. Một câu hỏi "tổng doanh thu theo tỉnh từ trước tới nay, tính lại mỗi lần mở trang" là đắt — đắt tới mức có thể làm chậm cả luồng đặt hàng thật.
| Khái niệm | Nghĩa là gì | Dấu hiệu bạn đã hiểu |
|---|---|---|
| Bảng, dòng, cột | Bảng = một loại dữ liệu; dòng = một bản ghi; cột = một thuộc tính. | Bạn hỏi "cột này đã có sẵn chưa" trước khi hứa hiển thị nó. |
| Index | Mục lục giúp tìm nhanh theo một cột nhất định. | Bạn biết vì sao lọc theo ngày nhanh mà tìm chữ tự do thì chậm. |
| Migration | Thay đổi cấu trúc: thêm cột, đổi kiểu dữ liệu. | Bạn luôn hỏi kèm: "dữ liệu cũ điền gì vào cột mới?" |
| Cache (Redis) | Bản sao tạm để đọc nhanh, chấp nhận cũ vài giây. | Bạn không hoảng khi hai màn hình lệch nhau vài giây. |
| Bảng tổng hợp | Kết quả được tính sẵn theo lịch thay vì tính lại mỗi lần xem. | Bạn ghi rõ trong spec: số liệu tính đến thời điểm nào. |
| Xoá mềm | Đánh dấu đã xoá thay vì xoá hẳn khỏi bảng. | Bạn phân biệt "khách không thấy nữa" và "dữ liệu biến mất". |
Tình huống: bạn được giao thiết kế màn hình "Danh sách khách hàng mới" cho đội chăm sóc khách hàng, và bạn chưa từng nhìn vào database bao giờ.
Bước đầu tiên là xin xem cấu trúc bảng. Bảng users thường trông như sau — mỗi dòng là một người dùng, mỗi cột là một thuộc tính của người đó:
| id | ho_ten | trang_thai | created_at | |
|---|---|---|---|---|
| 1041 | an.nguyen@example.com | Nguyễn Văn An | active | 2026-08-01 09:12 |
| 1042 | binh.tran@example.com | Trần Thị Bình | active | 2026-08-01 10:03 |
| 1043 | cuong.le@example.com | Lê Quốc Cường | blocked | 2026-08-02 21:47 |
Câu hỏi tương ứng, viết bằng SQL:
SELECT id, ho_ten, email, created_at
FROM users
WHERE trang_thai = 'active'
ORDER BY created_at DESC
LIMIT 20;
Đọc bằng lời: "lấy 4 cột này, từ bảng users, chỉ những người đang hoạt động, sắp xếp người mới nhất lên đầu, và chỉ lấy 20 dòng". Kết quả là đúng 20 dòng — không phải cả bảng.
Học được: mọi thứ hiển thị trên màn hình đều đến từ một cột có thật. Nếu bạn muốn hiện "nguồn khách đến từ đâu" mà bảng không có cột đó, thì yêu cầu của bạn không phải là "thêm một dòng chữ" — nó là thêm cột, thu thập dữ liệu mới, và quyết định xem những khách cũ sẽ hiện gì.
Tình huống: bảng don_hang có 5 triệu dòng. Cùng một màn hình, hai bộ lọc, thời gian phản hồi chênh nhau hàng chục lần.
| Bộ lọc | Câu hỏi tới database | Kết quả |
|---|---|---|
| Lọc theo ngày | WHERE created_at >= '2026-08-01' | Nhanh. Cột created_at có index, database nhảy thẳng tới đoạn cần đọc. |
| Tìm chữ trong ghi chú | WHERE ghi_chu LIKE '%giao gấp%' | Chậm. Không index nào giúp được — phải mở từng dòng trong 5 triệu dòng để xem bên trong. |
Điều này thay đổi cách bạn viết yêu cầu: "thêm ô tìm kiếm tự do trên màn hình đơn hàng" nghe như một dòng spec, nhưng thực chất là một quyết định kỹ thuật đáng kể. Cách viết tốt hơn:
Học được: tốc độ không phụ thuộc vào việc màn hình trông đơn giản hay phức tạp, mà phụ thuộc vào cách hỏi dữ liệu. Một filter bắt buộc trong spec thường là thứ duy nhất giữ cho màn hình đó dùng được sau hai năm.
Tình huống: ban giám đốc yêu cầu: "Dashboard doanh thu theo tỉnh, cập nhật real-time." Bảng đơn hàng có 40 triệu dòng và vẫn đang tăng mỗi ngày. Dev trả lời: "Chỉ làm được nếu số liệu tính đến tối qua." Bạn cần hiểu vì sao, để đàm phán chứ không chỉ chuyển lời.
Vì sao dev nói vậy:
Cái bẫy: không phải mọi con số đều chịu được "tính đến tối qua". Trước khi đồng ý, hãy tách yêu cầu theo mục đích sử dụng:
Phải viết vào spec: mỗi khối số ghi rõ mốc dữ liệu ("cập nhật lúc 02:00 hằng ngày" hoặc "cập nhật mỗi 5 phút"), hiển thị mốc đó ngay trên màn hình cho người xem, và nói rõ chuyện gì xảy ra nếu lượt tính ban đêm chạy lỗi — dashboard hiện số của hôm kia kèm cảnh báo, chứ không hiện số 0.
Học được: "real-time" là một yêu cầu về chi phí chứ không phải về công nghệ. Việc của BA là quy nó về một con số phút mà nghiệp vụ chấp nhận được — và luôn hiển thị mốc dữ liệu cho người đọc số.
Với mỗi màn hình hoặc báo cáo có dữ liệu, ticket của bạn phải trả lời được bốn câu:
Chấm từng chiều kỹ năng và cho ra hồ sơ — biết mình đứng ở đâu trước.
Làm bài nàyHọc kỹ năng này ở đâu?
Có 2 khóa dạy đúng phần này, miễn phí và bằng tiếng Việt.
Thảo luận & tài liệu thêm 0
Chia sẻ kinh nghiệm, đặt câu hỏi, hoặc đính kèm tài liệu/YouTube giúp người khác học kỹ năng này.