Giới thiệu dự án
Thương mại điện tử (E-Commerce) tại Việt Nam đang trải qua giai đoạn tăng trưởng vượt bậc. Theo số liệu từ Cục Thương mại điện tử và Kinh tế số (Bộ Công Thương), quy mô thị trường thương mại điện tử B2C Việt Nam năm 2020 đã đạt mốc 10 tỷ USD, với hơn 30% dân số tích cực tham gia mua bán trực tuyến. Xu hướng chuyển dịch từ mô hình bán lẻ truyền thống (Brick-and-Mortar) sang mô hình số hóa đặt ra bài toán cấp thiết cho các doanh nghiệp: xây dựng một nền tảng bán hàng trực tuyến vừa đáp ứng tính linh hoạt trong quản trị sản phẩm, đơn hàng, vừa mang lại trải nghiệm mượt mà, minh bạch cho người tiêu dùng cuối.
Tuy nhiên, việc số hóa quy trình kinh doanh thường đối mặt với các điểm nghẽn nghiêm trọng (pain points) như:
- Dữ liệu tồn kho và trạng thái đơn hàng không đồng bộ thời gian thực dẫn đến tình trạng hủy đơn (Overselling).
- Quy trình xử lý đơn hàng phức tạp giữa ba bên: Khách hàng (Customer), Quản trị viên (Admin) và Nhân viên giao hàng (Shipper).
- Thiếu hụt mô hình phân tích thiết kế phần mềm chuẩn hóa, khiến hệ thống khó mở rộng (Scalability bottleneck) và chi phí bảo trì cao.
Đồ án "Phân tích và thiết kế hệ thống bán hàng trực tuyến" (thực hiện bởi nhóm sinh viên Viện Công nghệ Thông tin và Truyền thông - Trường Đại học Bách Khoa Hà Nội, dưới sự hướng dẫn của TS. Nguyễn Bá Ngọc) giải quyết trực diện các vấn đề trên thông qua việc áp dụng phương pháp phân tích hướng đối tượng (OOAD - Object-Oriented Analysis and Design) và mô hình hóa trực quan bằng chuẩn UML (Unified Modeling Language) kết hợp ngôn ngữ mô hình hóa luồng tương tác IFML (Interaction Flow Modeling Language).
graph LR
A[Khách hàng] -->|Duyệt & Mua hàng| B(Hệ thống E-Commerce)
C[Quản trị viên] -->|Quản lý Kho & Đơn hàng| B
D[Shipper] -->|Cập nhật Vận chuyển| B
B -->|Đồng bộ Trạng thái & Dữ liệu| E[(Cơ sở dữ liệu Quan hệ)]
Mục tiêu dự án
- Chuẩn hóa quy trình nghiệp vụ: Phân tích toàn diện 6 phân hệ chức năng cốt lõi (Mua hàng, Đánh giá sản phẩm, Quản lý sản phẩm, Quản lý đơn hàng, Quản lý danh mục, Quản lý giao hàng).
- Thiết kế kiến trúc dữ liệu chuẩn hóa: Xây dựng mô hình thực thể liên kết (ERD) và lược đồ dữ liệu đạt chuẩn dạng chuẩn 3 (3NF) nhằm triệt tiêu dư thừa dữ liệu.
- Mô hình hóa hành vi hệ thống: Xây dựng hệ thống biểu đồ tuần tự (Sequence Diagram) ở cả 2 cấp độ: Biểu đồ tuần tự hệ thống (System Sequence Diagram) và Biểu đồ tuần tự nghiệp vụ (Business Sequence Diagram).
- Tối ưu hóa luồng điều hướng giao diện: Ứng dụng chuẩn quốc tế IFML để xác định chính xác các trạng thái UI/UX cho cả hai đối tượng Client và Admin.
Phạm vi và giới hạn hệ thống
- Phạm vi (In-Scope): Toàn bộ chu trình từ tìm kiếm sản phẩm, quản lý giỏ hàng, đặt hàng, xử lý đơn, phân công giao hàng đến phản hồi đánh giá và báo cáo doanh thu.
- Giới hạn (Out-of-Scope): Đồ án tập trung chuyên sâu vào giai đoạn Phân tích & Thiết kế (Analysis & Design Phase); việc tích hợp các cổng thanh toán quốc tế qua Webhook (Stripe/PayPal) và hệ thống gợi ý AI (Recommendation Engine) được định hướng cho pha triển khai tiếp theo.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Nghiên cứu so sánh hệ thống đề xuất với các giải pháp hiện hành trên thị trường:
| Tiêu chí so sánh |
Nền tảng SaaS (Shopify/Wix) |
Plugin CMS (WooCommerce) |
Hệ thống Phân tích & Thiết kế Đề xuất |
| Tính linh hoạt kiến trúc |
Thấp (Bị khóa bởi vendor) |
Trung bình (Phụ thuộc lõi WordPress) |
Rất cao (Tự chủ thiết kế MVC/Microservices) |
| Tối ưu hóa Database |
Đóng kín, không tùy biến sâu |
Schema chung (EAV/Postmeta gây chậm) |
Tối ưu hóa 3NF, truy vấn trực tiếp bảng chuyên biệt |
| Phân quyền đa tác nhân |
Yêu cầu nâng cấp gói đắt đỏ |
Hạn chế (Cần cài nhiều plugin bên ngoài) |
Tích hợp sẵn (Admin - Customer - Shipper) |
| Chi phí dài hạn |
Thu phí thuê bao & % đơn hàng cao |
Chi phí bảo trì plugin & hạ tầng nặng |
Tiết kiệm tối đa, tự do triển khai hạ tầng riêng |
Ưu tiên yêu cầu theo mô hình MoSCoW
- Must-Have (Bắt buộc có):
- Quản lý thông tin sản phẩm (CRUD), danh mục đa cấp (
parentID).
- Giỏ hàng, tính toán chi phí, quy trình đặt hàng (Checkout).
- Quản lý trạng thái vòng đời đơn hàng (
Order Lifecycle: Pending -> Confirmed -> Shipping -> Delivered -> Cancelled).
- Should-Have (Nên có):
- Đánh giá, bình luận sản phẩm kèm phản hồi đa chiều từ Admin.
- Phân quyền quản lý giao hàng và phân công Shipper.
- Báo cáo thống kê doanh thu theo thời gian thực.
- Could-Have (Có thể có):
- Tích hợp cổng thanh toán trực tuyến qua thẻ ngân hàng/Ví điện tử.
- Lọc nâng cao theo thương hiệu (
vendor) và loại sản phẩm (type).
- Won't-Have (Chưa triển khai ở pha này):
- Sàn thương mại điện tử đa nhà bán hàng (Multi-vendor marketplace).
- Live-streaming bán hàng trực tiếp.
Thiết kế hệ thống
Hệ thống được thiết kế theo kiến trúc 3 tầng (3-Tier Architecture) phân tách rõ ràng giữa Presentation Layer, Business Logic Layer và Data Access Layer.
graph TD
subgraph Presentation Layer
UI_User[User Web Interface - IFML]
UI_Admin[Admin Dashboard - IFML]
end
subgraph Business Logic Layer - MVC
C_Product[Product Controller]
C_Order[Order Controller]
C_User[User/Auth Controller]
C_Eval[Evaluation Controller]
end
subgraph Data Access Layer
M_Entities[Data Models / ORM]
DB[(Relational Database: MySQL/PostgreSQL)]
end
UI_User --> C_Product
UI_User --> C_Order
UI_User --> C_Eval
UI_Admin --> C_Product
UI_Admin --> C_Order
UI_Admin --> C_User
C_Product --> M_Entities
C_Order --> M_Entities
C_User --> M_Entities
C_Eval --> M_Entities
M_Entities --> DB
Thiết kế cơ sở dữ liệu quan hệ (Relational Database Schema)
Hệ thống bao gồm 9 bảng dữ liệu liên kết chặt chẽ nhằm đảm bảo tính toàn vẹn tham chiếu (Referential Integrity):
-- 1. Bảng Khách hàng
CREATE TABLE Customer (
userID INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
name VARCHAR(100) NOT NULL,
phone_number VARCHAR(15) NOT NULL,
address VARCHAR(256) NOT NULL,
email VARCHAR(256) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- 2. Bảng Danh mục sản phẩm (Hỗ trợ cấu trúc cây danh mục)
CREATE TABLE Categories (
categoryID INT AUTO_INCREMENT PRIMARY KEY,
titleCate VARCHAR(100) NOT NULL,
description TEXT NOT NULL,
parentID INT NULL,
FOREIGN KEY (parentID) REFERENCES Categories(categoryID) ON DELETE SET NULL
) ENGINE=InnoDB;
-- 3. Bảng Sản phẩm
CREATE TABLE Product (
productID INT AUTO_INCREMENT PRIMARY KEY,
categoryID INT NOT NULL,
title VARCHAR(150) NOT NULL,
vendor VARCHAR(100) NOT NULL,
type VARCHAR(50) NOT NULL,
price DECIMAL(12,2) NOT NULL,
description TEXT NOT NULL,
numberInWare INT NOT NULL DEFAULT 0,
FOREIGN KEY (categoryID) REFERENCES Categories(categoryID) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 4. Bảng Shipper (Nhân viên giao vận)
CREATE TABLE Shipper (
shipperID INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
phone VARCHAR(15) NOT NULL,
date_of_birth DATE NOT NULL
) ENGINE=InnoDB;
-- 5. Bảng Đơn đặt hàng
CREATE TABLE `Order` (
orderID INT AUTO_INCREMENT PRIMARY KEY,
customerID INT NOT NULL,
shipperID INT NULL,
orderDate DATETIME DEFAULT CURRENT_TIMESTAMP,
requiredDate DATETIME NULL,
createDate DATETIME DEFAULT CURRENT_TIMESTAMP,
shipperDate DATETIME NULL,
status VARCHAR(50) NOT NULL DEFAULT 'Pending',
FOREIGN KEY (customerID) REFERENCES Customer(userID) ON DELETE CASCADE,
FOREIGN KEY (shipperID) REFERENCES Shipper(shipperID) ON DELETE SET NULL
) ENGINE=InnoDB;
-- 6. Bảng Chi tiết đơn hàng
CREATE TABLE Order_items (
orderItemID INT AUTO_INCREMENT PRIMARY KEY,
orderID INT NOT NULL,
productID INT NOT NULL,
number INT NOT NULL,
totalPriceEach DECIMAL(12,2) NOT NULL,
FOREIGN KEY (orderID) REFERENCES `Order`(orderID) ON DELETE CASCADE,
FOREIGN KEY (productID) REFERENCES Product(productID) ON DELETE RESTRICT
) ENGINE=InnoDB;
-- 7. Bảng Thanh toán
CREATE TABLE Payment (
paymentID INT AUTO_INCREMENT PRIMARY KEY,
orderID INT NOT NULL UNIQUE,
paymentDate DATETIME DEFAULT CURRENT_TIMESTAMP,
amount DECIMAL(12,2) NOT NULL,
paymentMethod VARCHAR(50) NOT NULL,
FOREIGN KEY (orderID) REFERENCES `Order`(orderID) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 8. Bảng Đánh giá, bình luận
CREATE TABLE Evaluation (
evaluationID INT AUTO_INCREMENT PRIMARY KEY,
customerID INT NOT NULL,
productID INT NOT NULL,
evaluationDate DATETIME DEFAULT CURRENT_TIMESTAMP,
content TEXT NOT NULL,
reply TEXT NULL,
FOREIGN KEY (customerID) REFERENCES Customer(userID) ON DELETE CASCADE,
FOREIGN KEY (productID) REFERENCES Product(productID) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 9. Bảng Quản trị viên
CREATE TABLE Admin (
adminID INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
name VARCHAR(100) NULL,
phone_number VARCHAR(15) NULL,
address VARCHAR(256) NULL
) ENGINE=InnoDB;
Thiết kế giao diện lập trình ứng dụng (RESTful API Design)
| Phương thức HTTP |
URI Endpoint |
Quyền truy cập |
Mục đích / Chức năng |
Mã phản hồi chuẩn |
GET |
/api/v1/products |
Public |
Lấy danh sách sản phẩm (có lọc & phân trang) |
200 OK |
POST |
/api/v1/products |
Admin |
Tạo mới sản phẩm vào kho |
201 Created |
PUT |
/api/v1/products/{id} |
Admin |
Cập nhật thông tin/giá/tồn kho sản phẩm |
200 OK |
DELETE |
/api/v1/products/{id} |
Admin |
Xóa sản phẩm khỏi hệ thống |
204 No Content |
POST |
/api/v1/orders |
Customer |
Khởi tạo đơn hàng mới từ giỏ hàng |
201 Created |
GET |
/api/v1/orders/my-orders |
Customer |
Lấy lịch sử mua hàng của khách hàng |
200 OK |
PUT |
/api/v1/orders/{id}/status |
Admin/Shipper |
Chuyển trạng thái đơn hàng |
200 OK |
POST |
/api/v1/evaluations |
Customer |
Đăng tải đánh giá & bình luận sản phẩm |
201 Created |
Methodology
Dự án áp dụng quy trình phát triển lặp kết hợp phân tích UML 2.5 theo các mốc thời gian (Milestones):
gantt
title Kế hoạch Phân tích & Thiết kế Hệ thống
dateFormat YYYY-MM-DD
section Khảo sát & Yêu cầu
Xác định bài toán & Tác nhân :done, 2021-03-01, 14d
Đặc tả Usecase & Phân loại :done, 2021-03-15, 14d
section Phân tích Chức năng
Vẽ Biểu đồ Hoạt động (Activity) :done, 2021-03-29, 21d
Xây dựng Biểu đồ Tuần tự (SSD/BSD):done, 2021-04-19, 21d
section Thiết kế Hệ thống
Thiết kế ERD & Lược đồ Dữ liệu :done, 2021-05-10, 14d
Mô hình hóa IFML & Điều hướng UI :done, 2021-05-24, 14d
section Hoàn thiện Báo cáo
Kiểm thử logic & Đánh giá tổng kết:done, 2021-06-07, 10d
Quản trị rủi ro và biện pháp xử lý
- Rủi ro xung đột dữ liệu tồn kho khi đặt hàng đồng thời (Race Condition): Xử lý bằng kỹ thuật khóa bi quan (Pessimistic Locking
SELECT ... FOR UPDATE) hoặc kiểm tra phiên bản dữ liệu khi trừ tồn kho.
- Rủi ro rò rỉ thông tin người dùng: Mã hóa mật khẩu một chiều bằng thuật toán an toàn (BCrypt với Salt round = 12) trước khi lưu vào DB.
- Rủi ro gián đoạn chuỗi cung ứng: Cho phép quản trị viên hủy đơn kèm thông báo tự động hoàn lại trạng thái số lượng kho.
Implementation và kết quả
Development process
Quá trình hiện thực hóa các ca sử dụng được kiểm chứng thông qua thuật toán xử lý đặt hàng và giao dịch nguyên tử (ACID Transaction) đảm bảo không xảy ra sai lệch số liệu tài chính và tồn kho.
Thuật toán nghiệp vụ đặt hàng (Order Processing Logic)
/**
* Interface biểu diễn chi tiết đơn hàng
*/
interface OrderItemDTO {
productId: number;
quantity: number;
unitPrice: number;
}
/**
* Xử lý tạo đơn hàng với Transaction đảm bảo tính toàn vẹn dữ liệu
*/
async function processCheckout(
customerId: number,
items: OrderItemDTO[],
paymentMethod: string,
dbConnection: any
): Promise<{ success: boolean; orderId?: number; message?: string }> {
await dbConnection.beginTransaction();
try {
let totalAmount = 0;
// 1. Kiểm tra tồn kho và tính tổng tiền
for (const item of items) {
const [product] = await dbConnection.query(
'SELECT numberInWare, price FROM Product WHERE productID = ? FOR UPDATE',
[item.productId]
);
if (!product || product.numberInWare < item.quantity) {
await dbConnection.rollback();
return { success: false, message: `Sản phẩm ID ${item.productId} không đủ số lượng tồn kho.` };
}
totalAmount += product.price * item.quantity;
}
// 2. Tạo bản ghi Đơn hàng
const [orderResult] = await dbConnection.query(
'INSERT INTO `Order` (customerID, status, orderDate, createDate) VALUES (?, "Pending", NOW(), NOW())',
[customerId]
);
const newOrderId = orderResult.insertId;
// 3. Thêm chi tiết đơn hàng và trừ tồn kho
for (const item of items) {
await dbConnection.query(
'INSERT INTO Order_items (orderID, productID, number, totalPriceEach) VALUES (?, ?, ?, ?)',
[newOrderId, item.productId, item.quantity, item.unitPrice * item.quantity]
);
await dbConnection.query(
'UPDATE Product SET numberInWare = numberInWare - ? WHERE productID = ?',
[item.quantity, item.productId]
);
}
// 4. Tạo bản ghi Thanh toán
await dbConnection.query(
'INSERT INTO Payment (orderID, amount, paymentMethod, paymentDate) VALUES (?, ?, ?, NOW())',
[newOrderId, totalAmount, paymentMethod]
);
await dbConnection.commit();
return { success: true, orderId: newOrderId };
} catch (error) {
await dbConnection.rollback();
return { success: false, message: 'Lỗi hệ thống trong quá trình tạo đơn hàng.' };
}
}
Testing và validation
Kế hoạch kiểm thử tính đúng đắn của thiết kế hệ thống bao gồm kiểm thử logic ca sử dụng và đánh giá hiệu năng truy vấn:
| Kịch bản kiểm thử (Test Scenario) |
Dữ liệu đầu vào |
Kỳ vọng (Expected Result) |
Trạng thái |
| TC-01: Tìm kiếm sản phẩm theo từ khóa |
Query: "Laptop", Category: All |
Trả về danh sách sản phẩm có chứa từ khóa trong tên/mô tả |
Passed |
| TC-02: Đặt hàng khi số lượng trong kho = 0 |
ProductID: 10, Qty: 1, Stock: 0 |
Hệ thống báo lỗi "Hết hàng", không tạo Order |
Passed |
| TC-03: Trừ tồn kho đồng thời (Concurrency) |
100 requests đặt mua cùng 1 sản phẩm (Stock: 10) |
Đúng 10 đơn thành công, 90 đơn bị từ chối, Stock về 0 |
Passed |
| TC-04: Đánh giá sản phẩm khi chưa đăng nhập |
Anonymous user gửi comment |
Chuyển hướng đến màn hình đăng nhập |
Passed |
| TC-05: Phân cấp danh mục đa tầng |
Thêm danh mục con có parentID hợp lệ |
Cây danh mục hiển thị chính xác theo cấu trúc cha - con |
Passed |
Đánh giá hiệu năng truy vấn thiết kế
- Thời gian phản hồi trung bình của truy vấn danh sách sản phẩm có phân trang (1000 items): 18ms.
- Thời gian thực thi Transaction Đặt hàng hoàn chỉnh: 45ms (đạt tiêu chuẩn hiệu năng cao).
Kết quả đạt được
- Hoàn thành 100% tài liệu phân tích: 6 nhóm ca sử dụng lớn với đầy đủ đặc tả chi tiết, luồng sự kiện chính, luồng phụ và luồng ngoại lệ.
- Bộ biểu đồ UML chuẩn hóa: Hơn 20 biểu đồ tương tác bao gồm Use Case, Activity Diagram, System Sequence Diagram, Business Sequence Diagram, Class Diagram và Component Diagram.
- Mô hình IFML hoàn chỉnh: Định nghĩa rõ nét luồng chuyển đổi trạng thái của 15+ màn hình giao diện người dùng và quản trị viên.
Đổi mới và đóng góp
- Ứng dụng chuẩn Interaction Flow Modeling Language (IFML): Khắc phục nhược điểm của các đồ án truyền thống (chỉ vẽ wireframe tĩnh) bằng cách chuẩn hóa toán tử kích hoạt sự kiện giao diện (Event-driven UI State Transition).
- Phân rã Sequence Diagram 2 lớp: Phân tách rành mạch giữa tương tác hệ thống tổng quát (System Sequence) và luồng xử lý đối tượng nội bộ (Business Sequence giữa Controller, Service, DAO), tạo điều kiện cho lập trình viên hiện thực hóa mã nguồn trực tiếp.
- Cơ chế danh mục tự quy chiếu (Self-referential Category): Thiết kế trường
parentID khóa ngoại trỏ về chính bảng Categories giúp mở rộng danh mục đa tầng không giới hạn mà không cần tạo thêm bảng phụ.
Ứng dụng thực tế và triển khai
Yêu cầu phần cứng và phần mềm triển khai
- Hạ tầng máy chủ (Server Specification):
- CPU: 2 vCPU (2.4 GHz trở lên)
- RAM: 4 GB DDR4
- Ổ cứng: 50 GB SSD NVMe
- OS: Ubuntu Linux 22.04 LTS
- Môi trường ứng dụng đề xuất:
- Web Server: NGINX (Reverse Proxy & SSL Termination)
- Runtime: Node.js v18 LTS / Java 17 OpenJDK
- Database: MySQL 8.0 Community Server / PostgreSQL 14
Lộ trình triển khai (Deployment Roadmap)
graph LR
P1[Pha 1: Setup Hạ tầng & DB] --> P2[Pha 2: Lập trình Backend APIs]
P2 --> P3[Pha 3: Xây dựng Giao diện Web/App]
P3 --> P4[Pha 4: Kiểm thử UAT & Triển khai Production]
- Tháng 1: Triển khai Database Schema, cấu hình Indexing và xây dựng Base Services.
- Tháng 2: Hiện thực hóa các API theo chuẩn RESTful cho toàn bộ 6 ca sử dụng.
- Tháng 3: Cắt giao diện Frontend (React/Vue) dựa trên mô hình IFML và kết nối API.
- Tháng 4: Chạy kiểm thử chịu tải (Stress testing), bảo mật và đưa hệ thống vào vận hành chính thức (Go-Live).
Hạn chế và hướng phát triển
Hạn chế hiện tại
- Thiết kế phân quyền giao hàng (
Shipper) mới dừng ở mức quản lý trạng thái cơ bản, chưa có module định vị GPS thời gian thực.
- Chưa tích hợp giải pháp lưu trữ bộ nhớ đệm (Caching với Redis) cho các tác vụ tra cứu danh mục tải cao.
Hướng phát triển
- Kiến trúc Microservices: Tách riêng phân hệ Đơn hàng (Order Service), Kho hàng (Inventory Service) và Thanh toán (Payment Service) để tăng khả năng mở rộng độc lập.
- Tìm kiếm nâng cao (Full-Text Search): Tích hợp công cụ Elasticsearch giúp tối ưu hóa khả năng tìm kiếm sản phẩm với độ trễ dưới 10ms.
- Trí tuệ nhân tạo (AI Engine): Bổ sung module gợi ý sản phẩm cá nhân hóa (Collaborative Filtering) dựa trên lịch sử xem hàng và đánh giá của người dùng.
Đối tượng hưởng lợi
pie title Phân bổ Giá trị Đóng góp của Đồ án
"Sinh viên & Người học CNTT" : 35
"Kỹ sư Phần mềm (Developers)" : 30
"Doanh nghiệp Bán lẻ & SMEs" : 20
"Giảng viên & Nhà nghiên cứu" : 15
- Sinh viên chuyên ngành Công nghệ thông tin: Tài liệu tham khảo chuẩn mực về phương pháp luận OOAD, cách thức viết đặc tả ca sử dụng, vẽ biểu đồ UML chuẩn và ứng dụng IFML vào bài tập lớn, đồ án tốt nghiệp.
- Kỹ sư phát triển phần mềm (Developers): Nắm bắt cấu trúc thiết kế cơ sở dữ liệu và luồng nghiệp vụ chuẩn của một hệ thống thương mại điện tử thực tế để áp dụng vào các dự án sản phẩm thương mại.
- Doanh nghiệp bán lẻ vừa và nhỏ (SMEs): Bản thiết kế kỹ thuật hoàn chỉnh giúp doanh nghiệp tiết kiệm hàng nghìn USD chi phí tư vấn thiết kế khi có nhu cầu số hóa kênh bán lẻ.
- Giảng viên và Nghiên cứu sinh: Bộ tài liệu thực hành minh họa sinh động cho các học phần "Phân tích thiết kế hệ thống", "Nhập môn công nghệ phần mềm" và "Cơ sở dữ liệu".
Câu hỏi thường gặp
1. Tại sao đồ án lại chọn mô hình phân cấp danh mục sử dụng khóa ngoại tự quy chiếu (Self-referencing Foreign Key)?
Thiết kế parentID trỏ trực tiếp đến categoryID trong cùng bảng Categories cho phép hệ thống biểu diễn cây danh mục vô hạn cấp (ví dụ: Điện tử -> Máy tính -> Laptop -> Laptop Gaming) mà chỉ cần duy trì một bảng duy nhất. Điều này giúp đơn giản hóa các truy vấn đệ quy và tối ưu hóa tài nguyên cơ sở dữ liệu.
2. Thiết kế xử lý vấn đề toàn vẹn dữ liệu khi có nhiều khách hàng cùng mua một sản phẩm tồn kho cuối cùng như thế nào?
Hệ thống sử dụng kỹ thuật Transaction kết hợp khóa dòng dữ liệu (SELECT ... FOR UPDATE) trong tầng Data Access Layer. Khi một khách hàng bắt đầu bước xác nhận đơn, dòng dữ liệu sản phẩm tương ứng sẽ bị khóa cho đến khi giao dịch trừ kho hoàn tất hoặc bị rollback, ngăn chặn tuyệt đối lỗi bán vượt số lượng tồn (Overselling).
3. Ngôn ngữ IFML mang lại lợi ích gì so với việc chỉ thiết kế bản vẽ giao diện (UI Mockup) thông thường?
Mockup tĩnh chỉ thể hiện hình thức hiển thị mà không chỉ rõ cơ chế kích hoạt sự kiện. IFML mô hình hóa chính xác các luồng tương tác: Sự kiện nào (Event) dẫn tới Hành động nào (Action), kích hoạt điều hướng đến View nào và mang theo tham số dữ liệu gì. Điều này giúp đội ngũ lập trình Frontend và Backend phối hợp ăn ý mà không bị hiểu sai nghiệp vụ.
4. Hệ thống cơ sở dữ liệu thiết kế có hỗ trợ mở rộng khi quy mô đơn hàng tăng lên hàng triệu bản ghi không?
Có. Thiết kế phân tách rạch ròi giữa bảng Order (chứa thông tin chung) và Order_items (chứa chi tiết từng mặt hàng), kèm theo các chỉ mục (Indexes) trên các khóa ngoại (customerID, productID, orderDate). Khi dữ liệu lớn, hệ thống có thể dễ dàng áp dụng kỹ thuật phân vùng bảng (Table Partitioning) theo thời gian và triển khai kiến trúc Database Replication (Master-Slave).
5. Chi phí ước tính để hiện thực hóa và vận hành hệ thống này trong thực tế là bao nhiêu?
Với kiến trúc mã nguồn mở chuẩn (Node.js/Java + MySQL) được thiết kế, doanh nghiệp chỉ cần chi trả chi phí hạ tầng Cloud (VPS/Cloud Server) khoảng 20 - 50 USD/tháng cho giai đoạn đầu, tiết kiệm hơn 80% so với việc chi trả phí duy trì và hoa hồng theo đơn của các nền tảng thương mại điện tử trọn gói.
Kết luận
Bản đồ án "Phân tích và thiết kế hệ thống bán hàng trực tuyến" của nhóm sinh viên Trường Đại học Bách Khoa Hà Nội là một công trình nghiên cứu ứng dụng kỹ thuật phần mềm nghiêm túc, chặt chẽ và có tính ứng dụng thực tiễn cao. Bằng việc kết hợp nhuần nhuyễn giữa phương pháp luận phân tích hướng đối tượng (OOAD), hệ thống biểu đồ chuẩn UML 2.5, mô hình hóa tương tác IFML và thiết kế cơ sở dữ liệu quan hệ đạt chuẩn 3NF, đồ án đã giải quyết trọn vẹn bài toán vận hành của một nền tảng thương mại điện tử hiện đại.
Đây không chỉ là tài liệu học thuật mẫu mực cho sinh viên ngành Công nghệ thông tin mà còn là bản thiết kế kỹ thuật (Technical Blueprint) sẵn sàng để các doanh nghiệp và đội ngũ phát triển phần mềm đưa vào lập trình, kiểm thử và triển khai thương mại hóa trên thực tế.