Bối cảnh và vấn đề nghiên cứu
Ngành công nghiệp chăm sóc và cung cấp dịch vụ thú cưng đang có những bước tăng trưởng rõ rệt nhờ sự gia tăng số lượng người nuôi thú cưng và xu hướng xem vật nuôi như thành viên chính thức trong gia đình. Xu hướng nhân bản hóa thú cưng thúc đẩy nhu cầu tìm kiếm các sản phẩm dinh dưỡng, phụ kiện chuyên biệt và dịch vụ chất lượng cao như vệ sinh, cắt tỉa lông (spa), khách sạn lưu trú và chăm sóc y tế. Tuy nhiên, trên thực tế, các cửa hàng vật lý truyền thống gặp giới hạn về không gian trưng bày và tốn thời gian di chuyển của khách hàng, trong khi các nền tảng thương mại điện tử đại trà chưa đáp ứng đầy đủ các nghiệp vụ chuyên biệt dành cho thú cưng.
Đề tài "Xây dựng website cửa hàng thú cưng" được nhóm tác giả lựa chọn nhằm giải quyết bài toán quản lý dữ liệu tập trung, tối ưu hóa quy trình bán hàng và đặt lịch dịch vụ trực tuyến. Các mục tiêu và nhiệm vụ nghiên cứu chính của đề tài bao gồm:
- Khảo sát thực tế hệ thống thương mại điện tử chuyên ngành hiện có để xác định yêu cầu nghiệp vụ.
- Phân tích và thiết kế mô hình dữ liệu mức quan niệm (ERD) và mức logic/quan hệ cho hệ thống quản lý cửa hàng thú cưng.
- Xây dựng hệ thống ràng buộc toàn vẹn, các đối tượng lập trình phía máy chủ cơ sở dữ liệu (Trigger, Stored Procedure, Function) để tự động hóa xử lý và bảo toàn tính toàn vẹn dữ liệu.
- Nghiên cứu lý thuyết giao tác, phân tích các hiện tượng bất thường khi truy xuất đồng thời và xây dựng kịch bản giải quyết xung đột bằng cơ chế khóa và mức cô lập dữ liệu.
- Hiện thực hóa hệ thống giao diện web phục vụ hai nhóm đối tượng: khách hàng mua sắm/đặt lịch và quản trị viên/nhân viên quản lý cửa hàng.
Đối tượng nghiên cứu của đồ án là cơ sở dữ liệu quan hệ và kiến trúc ứng dụng web thương mại điện tử cho ngành hàng thú cưng. Phạm vi nghiên cứu được thực hiện trong khuôn khổ môn học Hệ quản trị cơ sở dữ liệu (IS210.O23) tại Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM trong thời gian 2 tháng (học kỳ năm 2023).
Cơ sở lý thuyết và phương pháp
Đề tài áp dụng các nền tảng lý thuyết cốt lõi của môn học Hệ quản trị cơ sở dữ liệu:
- Mô hình hóa dữ liệu: Lý thuyết mô hình thực thể mối kết hợp (Entity-Relationship Model) và chuyển đổi sang mô hình dữ liệu quan hệ (Relational Model), chuẩn hóa dữ liệu và xác định các thuộc tính, khóa chính, khóa ngoại.
- Ràng buộc toàn vẹn (Integrity Constraints): Lý thuyết về các quy tắc toàn vẹn thực thể, toàn vẹn tham chiếu và toàn vẹn miền giá trị/nghiệp vụ; thiết lập bảng tầm ảnh hưởng (thao tác thêm, xóa, sửa) đối với từng ràng buộc.
- Lập trình cơ sở dữ liệu: Kỹ thuật xây dựng Trigger (kích hoạt tự động khi có biến động dữ liệu INSERT, UPDATE, DELETE), Stored Procedure (thủ tục lưu trữ xử lý nghiệp vụ phức tạp) và User-Defined Function (hàm tính toán trả về giá trị thống kê).
- Giao tác và xử lý đồng thời (Concurrency Control): Tính chất ACID của giao tác (Transaction); các hiện tượng mất nhất quán dữ liệu bao gồm mất cập nhật (Lost Update), đọc không lặp lại (Non-repeatable Read), đọc dữ liệu rác (Dirty Read), đọc bóng ma (Phantom Read) và khóa chết (Deadlock); các mức độ cô lập chuẩn (Read Uncommitted, Read Committed, Repeatable Read, Serializable) kết hợp cơ chế khóa dòng tường minh (
SELECT ... FOR UPDATE) và thiết lập ưu tiên xử lý Deadlock.
Phương pháp nghiên cứu được triển khai cụ thể:
- Phương pháp khảo sát hiện trạng: Phân tích quy trình thực tế của hệ thống thương mại điện tử thú cưng
paddy.vn để trích xuất ưu điểm (giao diện trực quan, đa dạng danh mục, thông tin chi tiết) và hạn chế (thiếu tính năng phản hồi/đánh giá tương tác, chưa tự động hóa cập nhật trạng thái đơn hàng sau thanh toán).
- Phương pháp thiết kế hệ thống: Phân rã yêu cầu thành các ca sử dụng, xây dựng sơ đồ dữ liệu bằng công cụ
dbdiagram.io, ánh xạ sang cấu trúc bảng vật lý.
- Phương pháp thực nghiệm kiểm thử: Thiết lập các kịch bản chạy đồng thời hai giao dịch (T1, T2) trên môi trường cơ sở dữ liệu để tái hiện lỗi xung đột dữ liệu và thực thi giải pháp kiểm soát bằng mức cô lập và cơ chế khóa.
Nguồn dữ liệu sử dụng trong đề tài gồm tài liệu bài giảng, bài thực hành môn học Hệ quản trị cơ sở dữ liệu và dữ liệu mô phỏng nghiệp vụ bán hàng, dịch vụ lưu trú/spa thú cưng.
Nội dung chính theo từng chương
Chương 1: Xác định và phân tích yêu cầu, Thiết kế CSDL
Chương này tập trung vào khảo sát thực tế và mô hình hóa dữ liệu cho hệ thống:
- Khảo sát hệ thống
paddy.vn để xác định yêu cầu chức năng (tìm kiếm/lọc sản phẩm, xem chi tiết, giỏ hàng, thanh toán, quản trị tài khoản, đánh giá/nhận xét, hỗ trợ khách hàng) và yêu cầu phi chức năng (giao diện hấp dẫn, bảo mật an toàn, đổi trả linh hoạt, kết nối cộng đồng).
- Xây dựng mô hình thực thể mối kết hợp (ERD) phân rã thành 4 phân hệ chính: quản lý người dùng và sản phẩm, quản lý lịch hẹn dịch vụ, quản lý đơn hàng và quản lý kho hàng.
- Thiết kế mô hình quan hệ gồm 20 bảng:
ROLES, USERS, PRODUCT, APPOINTMENT, APPOINTMENTSERVICE, CATEGORY, COSTSERVICE, DETAILIMPORTBILL, GALERY, IMPORTBILL, ORDERDETAIL, ORDERS, PET, SERVICES_PET, SLIDER, SUPPLIER, TAG, TAGPRODUCT, TYPEPRODUCT, BILL.
- Thiết lập bảng mô tả chi tiết kiểu dữ liệu, ràng buộc mặc định cho tất cả các trường dữ liệu và xây dựng danh mục 35 ràng buộc toàn vẹn kèm bảng tầm ảnh hưởng (20 ràng buộc khóa chính, 12 ràng buộc khóa ngoại và 3 ràng buộc logic nghiệp vụ về thời gian: ngày tạo đơn lớn hơn ngày sinh, ngày sinh nhỏ hơn ngày hiện tại, ngày đặt lịch hẹn phải lớn hơn ngày hiện tại).
Chương 2: Xây dựng giao tác
Chương này hiện thực hóa các đối tượng lập trình phía cơ sở dữ liệu để tự động hóa kiểm tra và xử lý số liệu:
- Cơ chế Trigger:
check_inventory_i và check_inventory: Kiểm tra số lượng tồn kho của sản phẩm không âm khi chèn mới hoặc cập nhật trong bảng PRODUCT, kích hoạt thông báo lỗi bằng SIGNAL SQLSTATE '45000'.
trg_update_customer_total_spending, trg_delete_bill_update_customer_spending, trg_update_bill_update_customer_spending: Tự động cập nhật tổng chi tiêu của khách hàng trong bảng USERS tương ứng khi có thao tác thêm, xóa hoặc sửa đổi giá trị hóa đơn ở bảng BILL.
before_insert_order_items, before_update_orderdetail: Tự động lấy đơn giá từ bảng PRODUCT và tính tổng tiền cho từng chi tiết đơn hàng trong bảng ORDERDETAIL trước khi lưu.
- Cơ chế Stored Procedure và Function:
- Định nghĩa cú pháp tạo thủ tục và hàm với các tham số
IN, OUT, IN OUT.
GetTotalRevenue: Hàm tính tổng doanh thu cửa hàng dựa trên tổng tiền các hóa đơn trong bảng BILL.
CountTotalBills: Hàm đếm tổng số lượng đơn hàng đã thực hiện của cửa hàng.
CountNewCustomersInCurrentMonth: Hàm đếm số lượng người dùng mới đăng ký với vai trò khách hàng trong tháng và năm hiện tại.
Chương 3: Xử lý đồng thời
Chương này nghiên cứu lý thuyết điều khiển giao tác và mô phỏng xử lý lỗi tranh chấp dữ liệu:
- Khái niệm giao tác, các câu lệnh điều khiển giao tác (
COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION, SET AUTOCOMMIT) và các bất thường dữ liệu khi thực thi đồng thời.
- Phân tích chi tiết 4 mức cô lập: Read Uncommitted (đọc dữ liệu chưa xác nhận), Read Committed (mặc định trong Oracle, giải quyết Dirty Read), Repeatable Read (giải quyết Non-repeatable Read bằng Shared Lock giữ suốt giao tác), Serializable (ngăn ngừa Phantom Read bằng Key Range Lock).
- Mô phỏng và xử lý kịch bản Lost Update: Tình huống hai giao dịch cùng cập nhật số lượng tồn kho của một sản phẩm (giá trị ban đầu 100, T1 cộng 10, T2 cộng 20 dẫn đến kết quả sai 120 thay vì 130). Nhóm đề xuất giải pháp sử dụng cơ chế khóa dòng với câu lệnh
SELECT ... FOR UPDATE trong T1 để buộc T2 phải chờ T1 hoàn thành.
- Mô phỏng và xử lý kịch bản Non-repeatable Read: Tình huống T1 đọc tồn kho để kiểm tra đặt hàng trong khi T2 cập nhật thay đổi số lượng kho giữa chừng. Nhóm xây dựng 2 Stored Procedure
PlaceOrder (T1) và Transaction_T2 (T2) với mức cô lập SERIALIZABLE (START TRANSACTION WITH CONSISTENT SNAPSHOT) kết hợp FOR UPDATE để đảm bảo thực thi tuần tự.
- Xử lý Deadlock: Phân tích nguyên nhân chu trình khóa giữa các giao dịch và triển khai cơ chế ưu tiên thông qua biến cấu hình
@deadlock_priority khi bắt đầu giao dịch.
Chương 4: Thiết kế giao diện
Chương này mô tả việc cài đặt môi trường và thiết kế các phân hệ giao diện website:
- Cấu hình môi trường phát triển phía máy chủ (Laravel Framework, phpMyAdmin) và phía máy khách (Visual Studio Code, Git/GitHub) trên nền tảng hệ điều hành Windows 10/11.
- Hiện thực hóa 28 màn hình giao diện người dùng và quản trị:
- Phân hệ khách hàng: Header/Footer chung, Đăng ký, Đăng nhập, Trang chủ, Trang cửa hàng (bộ lọc sản phẩm), Trang giới thiệu, Chi tiết sản phẩm (kèm đánh giá sao), Giỏ hàng, Thanh toán (hỗ trợ COD và chuyển khoản), Dịch vụ Spa, Dịch vụ Khách sạn thú cưng, Đặt lịch hẹn, Thông tin cá nhân, Lịch sử đơn hàng, Đổi mật khẩu.
- Phân hệ quản trị (Admin): Trang thống kê tổng quan (biểu đồ lượt truy cập, doanh số), Quản lý hóa đơn, Quản lý khách hàng, Quản lý đơn hàng (cập nhật trạng thái), Quản lý nhân viên, Quản lý sản phẩm và danh mục/loại sản phẩm, Quản lý slider banner, Quản lý lịch hẹn theo khung giờ.
Chương 5: Tổng kết
Tổng kết tiến độ thực hiện dự án, đánh giá kết quả đóng góp của từng thành viên (4 sinh viên tham gia đều đạt mức đánh giá 10/10), chỉ ra các mặt hạn chế còn tồn đọng và định hình phương hướng phát triển cho hệ thống và quy trình quản lý.
Thiết kế và triển khai
Môi trường và công nghệ triển khai
Hệ thống được xây dựng và kiểm thử dựa trên tập hợp công nghệ:
- Hệ điều hành: Windows 10, Windows 11.
- Phía Server: Laravel Framework (PHP), hệ quản trị cơ sở dữ liệu MySQL thông qua công cụ quản lý phpMyAdmin, đồng thời áp dụng các nguyên lý giao tác tương thích chuẩn Oracle/SQL Server.
- Phía Client: Giao diện web tương tác viết trên Visual Studio Code.
- Quản lý phiên bản và thiết kế: Git, GitHub, công cụ dbdiagram.io.
- Dịch vụ tích hợp: Hệ thống gửi email tự động xác thực và thông báo.
Cấu trúc bảng dữ liệu chính
Hệ thống phân chia 20 bảng quan hệ thành các nhóm chức năng rõ ràng:
| Phân nhóm dữ liệu |
Danh sách các bảng quan hệ |
| Người dùng & Phân quyền |
USERS, ROLES |
| Sản phẩm & Danh mục |
PRODUCT, CATEGORY, TYPEPRODUCT, TAG, TAGPRODUCT, GALERY |
| Bán hàng & Hóa đơn |
ORDERS, ORDERDETAIL, BILL |
| Dịch vụ & Lịch hẹn |
SERVICES_PET, COSTSERVICE, PET, APPOINTMENT, APPOINTMENTSERVICE |
| Kho hàng & Nhập xuất |
SUPPLIER, IMPORTBILL, DETAILIMPORTBILL |
| Giao diện & Tiện ích |
SLIDER |
Kết quả và đóng góp
Đồ án hoàn thành đầy đủ các yêu cầu kỹ thuật và nghiệp vụ đặt ra ban đầu với các kết quả cụ thể:
- Về mặt thiết kế CSDL: Xây dựng hoàn chỉnh mô hình dữ liệu quan hệ gồm 20 bảng, phân định rõ các trường khóa chính, khóa ngoại, kiểu dữ liệu và giá trị mặc định; đặc tả và kiểm soát chặt chẽ 35 ràng buộc toàn vẹn.
- Về mặt xử lý nghiệp vụ tự động: Xây dựng thành công 7 Trigger kiểm soát logic kho hàng, cập nhật biến động tổng chi tiêu khách hàng và giá chi tiết đơn hàng; hiện thực 3 Function thống kê doanh thu, số lượng đơn hàng và người dùng mới.
- Về mặt điều khiển đồng thời: Mô hình hóa và lập trình thành công các Stored Procedure (
PlaceOrder, Transaction_T2) giải quyết triệt để lỗi Lost Update và Non-repeatable Read bằng mức cô lập SERIALIZABLE kết hợp cơ chế khóa dòng FOR UPDATE.
- Về mặt ứng dụng thực tế: Triển khai đầy đủ 28 giao diện chức năng cho cả hai nhóm người dùng (khách hàng và quản trị viên), tích hợp từ khâu xem sản phẩm, đặt lịch spa/khách sạn thú cưng đến khâu thống kê báo cáo.
Hạn chế và hướng nghiên cứu tiếp
Nhóm tác giả đã chỉ rõ các hạn chế trong quá trình thực hiện đồ án:
- Hạn chế kỹ thuật và vận hành: Thời gian tổ chức họp nhóm chưa phân bổ đều đặn; thiếu các kênh giao tiếp và tương tác trực tiếp với khách hàng (chưa có live chat trực tiếp trên web); quy trình kiểm thử và xử lý lỗi chưa bao phủ toàn diện; tính năng hiển thị đáp ứng (responsive) trên các thiết bị di động có kích thước màn hình khác nhau còn gặp thách thức.
Các hướng phát triển tiếp theo được nhóm đề xuất bao gồm:
- Về hệ thống:
- Tăng cường bảo mật thông qua mã hóa dữ liệu, xác thực đa yếu tố và tuân thủ các quy định bảo vệ dữ liệu cá nhân.
- Tối ưu hóa tốc độ tải trang bằng công nghệ AMP (Accelerated Mobile Pages), cơ chế lazy loading và bộ nhớ đệm (cache) thông minh.
- Tích hợp trí tuệ nhân tạo (AI) và học máy (Machine Learning) để gợi ý sản phẩm cá nhân hóa, xây dựng chatbot tự động và phân tích dự đoán xu hướng tiêu dùng.
- Mở rộng tích hợp các cổng thanh toán điện tử, hệ thống CRM và các nền tảng mạng xã hội.
- Phát triển module tùy chỉnh phụ kiện thú cưng trực quan (trình chỉnh sửa 3D/thực tế ảo VR, thư viện mẫu).
- Bổ sung cơ chế tự động chặn người dùng vi phạm và ghi nhật ký hoạt động (logging) chi tiết.
- Về con người và quản lý:
- Cá nhân hóa trải nghiệm người dùng dựa trên lịch sử mua sắm và chăm sóc thú cưng.
- Xây dựng diễn đàn cộng đồng chia sẻ kinh nghiệm nuôi dưỡng thú cưng.
- Đào tạo nâng cao kỹ năng quản lý thương mại điện tử, chăm sóc khách hàng cho đội ngũ nhân viên vận hành.
- Sử dụng các công cụ phân tích web chuyên sâu để theo dõi hành vi và tối ưu hóa hiệu quả kinh doanh.
Giá trị tham khảo
Báo cáo đồ án là tài liệu tham khảo hữu ích cho sinh viên các ngành Hệ thống Thông tin, Kỹ thuật Phần mềm và Công nghệ Thông tin đang thực hiện các đồ án môn học hoặc khóa luận liên quan đến Hệ quản trị cơ sở dữ liệu và Thương mại điện tử. Các nội dung có giá trị tham khảo cao bao gồm:
- Bảng đặc tả 35 ràng buộc toàn vẹn kèm phương pháp phân tích bảng tầm ảnh hưởng cho từng thao tác thêm, xóa, sửa.
- Cấu trúc mã lệnh viết Trigger kiểm soát tồn kho không âm và cơ chế tự động cập nhật số liệu chi tiêu liên bảng trong MySQL/Oracle.
- Cách tiếp cận thực nghiệm giải quyết bài toán xung đột giao tác đồng thời (Lost Update, Non-repeatable Read) thông qua Stored Procedure và cấu hình mức cô lập
SERIALIZABLE.
Câu hỏi thường gặp
1. Nhóm tác giả giải quyết hiện tượng mất cập nhật (Lost Update) khi nhiều giao dịch cùng thao tác trên kho hàng như thế nào?
Nhóm áp dụng cơ chế khóa dòng thông qua câu lệnh SELECT ... FOR UPDATE khi đọc dữ liệu tồn kho trong giao dịch đầu tiên (T1). Khóa này giữ cho đến khi T1 hoàn tất COMMIT, buộc giao dịch thứ hai (T2) phải chờ đợi và chỉ được đọc dữ liệu sau khi T1 đã cập nhật thành công, ngăn chặn việc T2 ghi đè dữ liệu cũ lên kết quả của T1.
2. Trigger check_inventory_i ngăn chặn số lượng hàng tồn kho bị âm bằng kỹ thuật gì?
Khi có thao tác chèn bản ghi mới vào bảng PRODUCT, trigger check_inventory_i đọc giá trị trường tồn kho vào biến inv. Nếu inv < 0, trigger sẽ kích hoạt lệnh SIGNAL SQLSTATE '45000' kèm thông báo lỗi tùy chỉnh 'Số lượng sản phẩm âm', lập tức hủy bỏ thao tác chèn để bảo đảm tính toàn vẹn dữ liệu.
3. Nhóm đã xây dựng những hàm (functions) cơ sở dữ liệu nào để phục vụ trang thống kê của quản trị viên?
Hệ thống xây dựng 3 hàm: hàm GetTotalRevenue tính tổng doanh thu từ bảng BILL, hàm CountTotalBills đếm tổng số lượng đơn hàng, và hàm CountNewCustomersInCurrentMonth đếm số lượng tài khoản khách hàng mới đăng ký trong tháng và năm hiện tại.
4. Ràng buộc toàn vẹn nào được thiết lập để kiểm soát tính hợp lệ về mặt thời gian của đơn hàng và lịch hẹn?
Hệ thống thiết lập 3 ràng buộc logic: Ràng buộc 33 yêu cầu ngày tạo đơn hàng (created_at) phải lớn hơn ngày sinh của khách hàng (date_of_birth); Ràng buộc 34 yêu cầu ngày sinh của khách hàng phải nhỏ hơn ngày hiện tại (date_of_birth < SYSDAY); Ràng buộc 35 yêu cầu ngày đặt lịch hẹn dịch vụ phải lớn hơn ngày hiện tại (appointment_date > SYSDAY).
5. Điểm khảo sát thực tế nào từ website paddy.vn đã được nhóm chọn lọc để cải tiến cho hệ thống của mình?
Qua khảo sát paddy.vn, nhóm ghi nhận ưu điểm về giao diện trực quan và sự đa dạng mặt hàng, nhưng đồng thời chỉ ra nhược điểm là thiếu tính năng đánh giá/phản hồi tương tác từ người dùng và chưa tự động cập nhật trạng thái đơn sau thanh toán. Nhóm đã bổ sung chức năng đánh giá sao (VOTE), nhận xét (FEEDBACK) trong bảng ORDERDETAIL và tối ưu quy trình xử lý đơn hàng trên hệ thống mới.
Kết luận
Đồ án "Xây dựng website cửa hàng thú cưng" của nhóm sinh viên Trường Đại học Công nghệ Thông tin – ĐHQG-HCM đã hoàn thành tốt mục tiêu phân tích, thiết kế và cài đặt cơ sở dữ liệu cho một hệ thống thương mại điện tử chuyên ngành. Công trình nổi bật ở việc chuẩn hóa cấu trúc dữ liệu với 20 bảng quan hệ, thiết lập hệ thống 35 ràng buộc toàn vẹn, lập trình các trigger/function tự động và thực nghiệm xử lý tranh chấp đồng thời bằng các mức cô lập giao tác nghiêm ngặt. Đây là tài liệu mẫu mực về mặt phương pháp luận và kỹ thuật lập trình cơ sở dữ liệu ứng dụng trong phát triển phần mềm thực tế.