Giới thiệu dự án
Thương mại điện tử (E-Commerce) tại Việt Nam duy trì mức tăng trưởng ấn tượng 20–25%/năm, kéo theo sự chuyển dịch tất yếu từ các mô hình bán lẻ truyền thống sang nền tảng số hóa. Tuy nhiên, phân khúc kinh doanh sách chuyên biệt – đặc biệt là các dòng tiểu thuyết và sách dịch nước ngoài – vẫn đang đối mặt với nhiều rào cản vận hành. Các cửa hàng sách độc lập truyền thống thường phụ thuộc vào việc quản lý sổ sách hoặc các tệp bảng tính rời rạc, dẫn đến tỷ lệ sai sót tồn kho lên tới 35–40%, thời gian xử lý một đơn hàng kéo dài từ 10–15 phút và khả năng tiếp cận khách hàng bị giới hạn nghiêm trọng về mặt địa lý.
Đề tài "Xây dựng website bán sách sử dụng Laravel" – cụ thể là nền tảng thương mại điện tử chuyên biệt "Book of Moon" – được nghiên cứu và phát triển bởi sinh viên Nguyễn Hải Biên (Khoa Công nghệ Thông tin, Trường Đại học Công nghệ Đông Á), dưới sự hướng dẫn của ThS. Ngô Thị Hoa. Đề tài giải quyết trực tiếp bài toán chuyển đổi số cho các nhà sách vừa và nhỏ, cung cấp một hệ thống quản lý tập trung và một kênh phân phối trực tuyến hiện đại.
+-------------------------------------------------------------------------+
| PROBLEM STATEMENT |
| - Quản lý sổ sách thủ công -> Sai lệch tồn kho (35-40%) |
| - Quy trình xử lý đơn hàng phân mảnh -> Độ trễ 10-15 phút/đơn |
| - Thiếu hệ thống phân loại ngôn ngữ/danh mục sách chuyên biệt |
+------------------------------------+------------------------------------+
|
v
+-------------------------------------------------------------------------+
| SOLUTION APPROACH |
| - Kiến trúc MVC chuẩn hóa trên nền tảng PHP 8.x & Laravel Framework |
| - CSDL quan hệ MySQL 8.0 chuẩn hóa 3NF với 12 bảng liên kết |
| - Tự động hóa luồng: Tìm kiếm -> Giỏ hàng -> Đặt hàng -> Quản trị đơn |
+-------------------------------------------------------------------------+
Mục tiêu dự án
- Mục tiêu kỹ thuật: Xây dựng hệ thống web application hoàn chỉnh dựa trên mô hình MVC (Model-View-Controller) của framework Laravel; thiết kế và chuẩn hóa cơ sở dữ liệu quan hệ MySQL đáp ứng tính toàn vẹn dữ liệu (Data Integrity).
- Mục tiêu chức năng: Hoàn thiện hai phân hệ độc lập gồm Client-side (tìm kiếm, lọc theo thể loại/ngôn ngữ, giỏ hàng, đặt hàng) và Admin-side (quản trị danh mục, ngôn ngữ phát hành, sản phẩm, trạng thái đơn hàng).
- Mục tiêu hiệu năng & tối ưu: Rút ngắn thời gian tra cứu và xử lý đơn hàng xuống dưới 500ms; tối ưu hóa quy trình quản trị kho giúp giảm 80% thời gian tác nghiệp thủ công.
Phạm vi và giới hạn (Scope & Limitations)
- Phạm vi: Ứng dụng tập trung vào nghiệp vụ bán lẻ tiểu thuyết đa ngôn ngữ, quản lý thông tin khách hàng, địa chỉ giao hàng và quy trình cập nhật trạng thái đơn hàng từ lúc tiếp nhận đến khi xử lý.
- Giới hạn: Hệ thống tập trung xử lý phương thức thanh toán trực tiếp khi nhận hàng (Cash on Delivery - COD) kết hợp lưu vết thông tin giao nhận (
tbl_shipping), chưa tích hợp cổng thanh toán trực tuyến của bên thứ ba (Third-party Payment Gateway).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Quản lý sổ sách / Excel |
Nền tảng SaaS đóng gói |
Giải pháp Custom Laravel ("Book of Moon") |
| Chi phí đầu tư ban đầu |
Rất thấp |
Trung bình (thuê bao hàng tháng) |
Tối ưu, chỉ cần hạ tầng lưu trữ cơ bản |
| Tính toàn vẹn dữ liệu |
Kém, dễ trùng lặp/mất mát |
Cao |
Tuyệt đối (ràng buộc khóa ngoại Foreign Keys) |
| Khả năng tùy biến nghiệp vụ |
Không có |
Bị giới hạn bởi nhà cung cấp |
Linh hoạt mở rộng mã nguồn theo yêu cầu |
| Hiệu suất tìm kiếm & lọc |
Thủ công, chậm chạp |
Khá |
Tối ưu qua Query Builder và Index CSDL |
| Bảo mật & Phân quyền |
Không có |
Phụ thuộc bên thứ ba |
Phân quyền nghiêm ngặt qua Middleware/Auth |
Yêu cầu người dùng theo mô hình MoSCoW
+------------------------------------------------------------------------+
| MoSCoW REQUIREMENTS MATRIX |
+------------------------------------+-----------------------------------+
| MUST HAVE (Bắt buộc) | SHOULD HAVE (Nên có) |
| - Xác thực tài khoản Admin & User | - Phân loại sách theo ngôn ngữ |
| - CRUD Sản phẩm / Danh mục | - Reset mật khẩu qua Token |
| - Giỏ hàng & Xử lý đặt hàng | - Bộ lọc tìm kiếm nhanh |
+------------------------------------+-----------------------------------+
| COULD HAVE (Có thể mở rộng) | WON'T HAVE (Giai đoạn này) |
| - Quản lý mã giảm giá (Coupon) | - Thanh toán thẻ quốc tế trực tiếp|
| - Đánh giá, bình luận sản phẩm | - Ứng dụng di động Native (App) |
+------------------------------------+-----------------------------------+
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng hoàn toàn theo mô hình MVC của Laravel Framework, đảm bảo phân tách rõ ràng giữa tầng hiển thị (Presentation Layer), tầng xử lý nghiệp vụ (Business Logic Layer) và tầng dữ liệu (Data Layer).
+-----------------------------+
| Khách hàng |
| (Browser / HTTP Client) |
+--------------+--------------+
|
HTTP Requests
v
+-----------------------------+
| Laravel Routing Layer |
| (web.php / Auth Middleware) |
+--------------+--------------+
|
+---------------------+---------------------+
| |
v v
+-----------------------------+ +-----------------------------+
| Front-end Controllers | | Admin Controllers |
| (HomeController, Cart, etc) | | (Product, Category, Order) |
+--------------+--------------+ +--------------+--------------+
| |
+---------------------+---------------------+
|
v
+-----------------------------+
| Eloquent ORM / Models |
| (Product, Category, Order) |
+--------------+--------------+
|
SQL Queries (PDO)
v
+-----------------------------+
| MySQL Database Engine |
| (12 Tables Relational) |
+-----------------------------+
Technology Stack và phiên bản kỹ thuật
+-------------------+---------------------------------------------------+
| THÀNH PHẦN | CÔNG NGHỆ & PHIÊN BẢN |
+-------------------+---------------------------------------------------+
| Backend Core | PHP 8.1+ / Laravel Framework |
| Database Engine | MySQL 8.0 (InnoDB Engine, UTF8MB4) |
| Web Server | Apache 2.4 / Nginx 1.22+ |
| Frontend Engine | Blade Template Engine, HTML5, CSS3, JavaScript |
| Dependency Tool | Composer 2.x |
| Authentication | Laravel Built-in Session Auth & Personal Access |
+-------------------+---------------------------------------------------+
Thiết kế cơ sở dữ liệu quan hệ (Relational Database Design)
Cơ sở dữ liệu của hệ thống gồm 12 bảng, được thiết kế chuẩn hóa để tránh dư thừa dữ liệu và đảm bảo tốc độ truy vấn:
tbl_admin: Lưu trữ tài khoản quản trị viên (admin_id, admin_email, admin_password, admin_name, admin_phone).
tbl_category_product: Quản lý danh mục thể loại sách (category_id, category_name, category_desc, slug_category, category_status).
tbl_pub: Quản lý danh mục ngôn ngữ/nhà xuất bản của ấn phẩm (pub_id, pub_name, pub_desc, pub_slug, pub_status).
tbl_product: Chứa dữ liệu sách (product_id, category_id, pub_id, product_name, product_desc, product_content, product_price, product_image, product_status).
tbl_customer: Lưu trữ hồ sơ người mua hàng (customer_id, customer_name, customer_email, customer_password, customer_phone).
tbl_shipping: Quản lý thông tin nhận hàng của từng phiên giao dịch (shipping_id, shipping_name, shipping_address, shipping_phone, shipping_email).
tbl_order: Lưu thông tin tổng quát về đơn hàng (order_id, customer_id, shipping_id, order_total, order_status).
tbl_order_details: Chi tiết từng mặt hàng trong đơn (order_details_id, order_id, product_id, product_name, product_price, product_sales_quantity).
personal_access_tokens, password_reset_tokens, migrations, users: Quản lý mã hóa token xác thực và cấu trúc database migrations của framework.
Thiết kế Routing & Endpoint API
| HTTP Method |
URI Pattern |
Controller Action |
Quyền truy cập |
Mục đích |
GET |
/trang-chu |
HomeController@index |
Public |
Tải danh sách sách nổi bật & mới nhất |
GET |
/chi-tiet-san-pham/{id} |
ProductController@details |
Public |
Xem thông tin chi tiết một cuốn sách |
POST |
/save-cart |
CartController@save_cart |
Public |
Thêm sản phẩm và số lượng vào Session Cart |
POST |
/save-checkout-customer |
CheckoutController@save_checkout |
Customer Auth |
Tạo bản ghi giao hàng (tbl_shipping) |
POST |
/order-place |
CheckoutController@order_place |
Customer Auth |
Khởi tạo đơn hàng (tbl_order & details) |
POST |
/admin-dashboard |
AdminController@dashboard |
Admin Auth |
Xác thực thông tin đăng nhập quản trị |
POST |
/update-order-status |
OrderController@update_status |
Admin Auth |
Chuyển đổi trạng thái duyệt/giao đơn |
Implementation và kết quả
Development process
Quá trình hiện thực hóa hệ thống tuân thủ chặt chẽ các tiêu chuẩn mã nguồn sạch của Laravel:
LỘ TRÌNH TRIỂN KHAI DỰ ÁN (12 TUẦN)
Week 1 - 2: Phân tích nghiệp vụ, mô hình hóa Use Case & Sequence Diagrams
Week 3 - 4: Thiết kế CSDL, tạo Migrations & Seeders trên MySQL
Week 5 - 7: Xây dựng Admin Module (CRUD Sản phẩm, Danh mục, Ngôn ngữ)
Week 8 - 9: Xây dựng Client Module (Trang chủ, Bộ lọc, Chi tiết sản phẩm)
Week 10: Hoàn thiện Giỏ hàng (Session Cart) & Quy trình Đặt hàng
Week 11: Kiểm thử chức năng, tối ưu hóa truy vấn SQL & UAT
Week 12: Đóng gói tài liệu kỹ thuật và hoàn tất đồ án
Code Snippet: Định nghĩa cấu trúc bảng Sản phẩm (Migration Schema)
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations for tbl_product.
*/
public function up(): void
{
Schema::create('tbl_product', function (Blueprint $table) {
$table->increments('product_id');
$table->integer('category_id')->unsigned();
$table->integer('pub_id')->unsigned();
$table->string('product_name', 255);
$table->text('product_desc');
$table->text('product_content');
$table->string('product_price', 255);
$table->string('product_image', 255);
$table->integer('product_status')->default(1);
$table->timestamps();
// Ràng buộc toàn vẹn dữ liệu khóa ngoại
$table->foreign('category_id')->references('category_id')->on('tbl_category_product')->onDelete('cascade');
$table->foreign('pub_id')->references('pub_id')->on('tbl_pub')->onDelete('cascade');
});
}
public function down(): void
{
Schema::dropIfExists('tbl_product');
}
};
Code Snippet: Xử lý giao dịch Đặt hàng an toàn (Atomic Order Processing)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Gloudemans\Shoppingcart\Facades\Cart;
class CheckoutController extends Controller
{
public function order_place(Request $request)
{
// Sử dụng Database Transaction để đảm bảo tính toàn vẹn tuyệt đối (ACID)
DB::beginTransaction();
try {
// 1. Thêm bản ghi thông tin thanh toán & giao dịch đơn
$order_data = array();
$order_data['customer_id'] = Session::get('customer_id');
$order_data['shipping_id'] = Session::get('shipping_id');
$order_data['order_total'] = Cart::total(0, ',', '.');
$order_data['order_status'] = 1; // 1: Đang chờ xử lý
$order_id = DB::table('tbl_order')->insertGetId($order_data);
// 2. Chuyển toàn bộ Item trong giỏ hàng vào bảng chi tiết đơn hàng
$cart_content = Cart::content();
foreach ($cart_content as $v_content) {
$order_details_data = array();
$order_details_data['order_id'] = $order_id;
$order_details_data['product_id'] = $v_content->id;
$order_details_data['product_name'] = $v_content->name;
$order_details_data['product_price'] = $v_content->price;
$order_details_data['product_sales_quantity'] = $v_content->qty;
DB::table('tbl_order_details')->insert($order_details_data);
}
DB::commit();
Cart::destroy(); // Xóa rỗng giỏ hàng sau khi lưu đơn thành công
return view('pages.checkout.handcash');
} catch (\Exception $e) {
DB::rollBack();
return redirect()->back()->with('error', 'Lỗi xử lý đơn hàng: ' . $e->getMessage());
}
}
}
Testing và validation
Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt bao gồm kiểm thử hộp đen (Black-box Testing), kiểm thử luồng chức năng (Functional Testing) và đo lường hiệu năng:
| Kịch bản kiểm thử (Test Scenario) |
Số lượng Test Case |
Tỷ lệ Pass |
Ghi chú kết quả |
| Xác thực đăng nhập Admin & User |
12 |
100% |
Chặn thành công các truy cập trái phép bằng Middleware |
| Nghiệp vụ CRUD Danh mục & Sách |
24 |
100% |
Validate chặt chẽ trường dữ liệu, upload ảnh đúng định dạng |
| Luồng Thêm giỏ hàng & Tính toán tiền |
15 |
100% |
Tính đúng đơn giá, tổng tiền, tự động cập nhật Subtotal |
| Xử lý Đặt hàng & Lưu thông tin Ship |
10 |
100% |
Lưu dữ liệu đồng thời vào 3 bảng liên kết không lỗi |
| Cập nhật trạng thái đơn hàng (Admin) |
8 |
100% |
Cập nhật tức thời và phản hồi thông báo trực quan |
Đánh giá hiệu năng hệ thống (Performance Benchmarks)
- Thời gian phản hồi trang (TTFB): Đạt mức trung bình 142ms trong môi trường kiểm thử máy chủ cục bộ.
- Thời gian tải trang đầy đủ (Page Load Time): 1.15s đối với trang chủ có nạp dữ liệu hình ảnh sản phẩm.
- Lighthouse Performance Score: Đạt 92/100 điểm hiệu năng, 95/100 điểm SEO Onpage nhờ cấu trúc Semantic HTML và Slug thân thiện URL.
Đổi mới và đóng góp
- Phân tách chuyên sâu theo ngôn ngữ ấn phẩm (
tbl_pub): Khác với các website thương mại điện tử đại trà chỉ chia theo thể loại, "Book of Moon" bổ sung cơ chế quản lý thuộc tính ngôn ngữ và nhà xuất bản riêng biệt, giúp giải quyết triệt để nhu cầu tìm kiếm tiểu thuyết nguyên bản (tiếng Anh, Nhật, Trung...) của độc giả.
- Cơ chế quản lý trạng thái kép linh hoạt: Hệ thống cho phép kích hoạt hoặc ẩn (
category_status, pub_status, product_status) các sản phẩm hoặc danh mục ngay lập tức trên giao diện người dùng mà không cần xóa vật lý khỏi cơ sở dữ liệu, giữ nguyên tính toàn vẹn lịch sử đơn hàng.
- Hiệu quả định lượng vượt trội:
- +65% tốc độ xử lý và xác nhận đơn hàng so với phương pháp kiểm tra thủ công.
- -85% nguy cơ nhầm lẫn số lượng mặt hàng khi xuất kho nhờ bảng chi tiết đơn hàng (
tbl_order_details) chuẩn hóa.
- 100% dữ liệu được bảo vệ an toàn trước các lỗ hổng cơ bản (CSRF, SQL Injection) nhờ tầng bảo vệ mặc định của Laravel ORM.
Ứng dụng thực tế và triển khai
Hướng dẫn triển khai hệ thống (Deployment Guidelines)
+--------------------------------------------------------------------------+
| QUY TRÌNH DEPLOY HỆ THỐNG TRÊN SERVER |
+--------------------------------------------------------------------------+
1. Cài đặt môi trường máy chủ: Linux (Ubuntu 22.04 LTS), PHP 8.1+, MySQL 8.0
2. Clone mã nguồn: git clone https://github.com/example/book-of-moon.git
3. Cài đặt thư viện phụ thuộc: composer install --no-dev --optimize-autoloader
4. Cấu hình biến môi trường: cp .env.example .env && php artisan key:generate
5. Thiết lập CSDL trong .env: DB_DATABASE=bookstore, DB_USERNAME, DB_PASSWORD
6. Thực thi Migration cấu trúc bảng: php artisan migrate --seed
7. Tạo liên kết lưu trữ ảnh sản phẩm: php artisan storage:link
8. Cấu hình Web Server trỏ DocumentRoot vào thư mục /public
+--------------------------------------------------------------------------+
Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit & ROI)
CHI PHÍ ƯỚC TÍNH (NĂM ĐẦU TIÊN):
- Tên miền (.com / .vn): 300.000 - 600.000 VNĐ/năm
- Cloud VPS (2 vCPU, 4GB RAM): 1.800.000 - 2.500.000 VNĐ/năm
- Chi phí bảo trì, vận hành: Tối ưu nhờ mã nguồn mở Laravel
LỢI ÍCH KINH TẾ ĐẠT ĐƯỢC:
- Cắt giảm 1 nhân sự quản lý sổ sách thủ công (tiết kiệm ~60.000.000 VNĐ/năm).
- Khả năng phục vụ khách hàng 24/7 không giới hạn không gian địa lý.
- Thời gian thu hồi vốn (Payback Period): Dự kiến từ 3 đến 5 tháng sau khi vận hành chính thức.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Chưa tích hợp API cổng thanh toán trực tuyến (VNPAY, MoMo, ZaloPay), người dùng mới chỉ có thể chọn phương thức nhận hàng trả tiền.
- Chưa có hệ thống gợi ý sản phẩm thông minh (Recommendation Engine) dựa trên lịch sử xem hoặc thói quen mua hàng của khách sắm.
Kế hoạch nâng cấp (Future Roadmap)
- Phiên bản 2.0: Tích hợp thanh toán QR Code động qua cổng VNPAY/VietQR; phát triển tính năng quản lý mã giảm giá tự động (Coupon Management System).
- Tối ưu hóa cơ sở dữ liệu: Bổ sung bộ nhớ đệm Redis Cache cho các truy vấn danh mục và sản phẩm nổi bật nhằm giảm tải I/O cho MySQL khi lượng truy cập đạt trên 10.000 requests/ngày.
Đối tượng hưởng lợi
+-------------------------------------------------------------------------+
| GIÁ TRỊ MANG LẠI |
+------------------------------------+------------------------------------+
| SINH VIÊN & NGƯỜI HỌC | LẬP TRÌNH VIÊN WEB (LARAVEL) |
| - Tài liệu tham khảo toàn diện về | - Source code mẫu chuẩn kiến trúc |
| mô hình MVC và chuẩn hóa CSDL. | MVC, tối ưu Eloquent & Session. |
+------------------------------------+------------------------------------+
| DOANH NGHIỆP / CỬA HÀNG SÁCH | NHÀ NGHIÊN CỨU ỨNG DỤNG |
| - Giải pháp số hóa bán hàng chi | - Mô hình đối chiếu hiệu năng giữa |
| phí thấp, vận hành tự động. | hệ thống tự phát triển và SaaS. |
+------------------------------------+------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu phần cứng và môi trường tối thiểu để triển khai website là gì?
Hệ thống yêu cầu máy chủ hoặc Cloud VPS có cấu hình tối thiểu: 1 vCPU, 1GB RAM, 10GB SSD Storage; cài đặt hệ điều hành Linux (Ubuntu 20.04/22.04 LTS), PHP phiên bản từ 8.1 trở lên (với các extensions: OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON) và hệ quản trị CSDL MySQL 5.7 hoặc 8.0.
2. Laravel xử lý vấn đề bảo mật trong ứng dụng bán sách này như thế nào?
Hệ thống tận dụng tối đa các lớp bảo mật cốt lõi của Laravel: sử dụng CSRF Token trên mọi Form POST để chặn tấn công Cross-Site Request Forgery; sử dụng PDO Parameter Binding trong Query Builder/Eloquent để triệt tiêu hoàn toàn nguy cơ SQL Injection; mã hóa mật khẩu người dùng bằng thuật toán một chiều an toàn Bcrypt Hash.
3. Hệ thống có thể chịu tải được bao nhiêu sản phẩm và đơn hàng đồng thời?
Với thiết kế CSDL chuẩn hóa 3NF và đánh chỉ mục (Index) trên các khóa chính, khóa ngoại, hệ thống có thể quản lý ổn định hơn 50.000 đầu sách và xử lý hàng nghìn giao dịch mỗi ngày. Khi lượng truy cập tăng đột biến, hệ thống dễ dàng mở rộng theo chiều ngang (Scale-out) kết hợp cấu hình Redis Session Driver.
4. Quy trình bảo trì và sao lưu dữ liệu của hệ thống diễn ra như thế nào?
Quản trị viên có thể sử dụng công cụ dòng lệnh php artisan kết hợp cấu hình Cronjob trên máy chủ để tự động hóa việc sao lưu cơ sở dữ liệu (mysqldump) hàng ngày, lưu trữ bản backup an toàn tại các dịch vụ lưu trữ đám mây.
5. Website có hỗ trợ tối ưu hóa công cụ tìm kiếm (SEO) không?
Có. Cấu trúc CSDL đã được thiết kế sẵn các trường slug_category, pub_slug cho phép tạo ra các đường dẫn tĩnh (Clean/Friendly URLs) dạng /chi-tiet-san-pham/ten-cuon-sach, giúp các công cụ tìm kiếm như Google thu thập dữ liệu (crawl và index) nhanh chóng và chính xác.
Kết luận
Đồ án tốt nghiệp "Xây dựng website bán sách sử dụng Laravel" của sinh viên Nguyễn Hải Biên đã giải quyết trọn vẹn bài toán xây dựng một hệ sinh thái thương mại điện tử chuyên biệt cho cửa hàng sách "Book of Moon". Thông qua việc áp dụng chuẩn mực kiến trúc MVC, thiết kế cơ sở dữ liệu quan hệ chặt chẽ với 12 bảng liên kết và cơ chế bảo mật đa lớp của Laravel, đề tài không chỉ đạt được các mục tiêu nghiên cứu học thuật mà còn mang lại một sản phẩm phần mềm có tính ứng dụng thực tiễn cao, sẵn sàng triển khai phục vụ hoạt động sản xuất kinh doanh số.