Bối cảnh và vấn đề nghiên cứu
Trong khuôn khổ học phần Hệ cơ sở dữ liệu tại Khoa Khoa học và Kỹ thuật Máy tính – Trường Đại học Bách Khoa (Đại học Quốc gia Thành phố Hồ Chí Minh), đề tài "Thiết kế cơ sở dữ liệu & hiện thực Mô hình nhà sách trực tuyến (E-Book store)" được thực hiện bởi nhóm sinh viên gồm Nguyễn Hữu Khang (MSSV: 2011365), Nguyễn Hoàng Trí Viễn (MSSV: 2015043) và Đậu Xuân Thành (MSSV: 2014486), dưới sự hướng dẫn của giảng viên Đỗ Thanh Thái (hoàn thành vào tháng 10/2022, niên khóa 2022–2023).
Bối cảnh thực tiễn của đề tài xuất phát từ nhu cầu số hóa quy trình kinh doanh và quản lý phân phối ấn phẩm (sách, tạp chí) trên môi trường trực tuyến. Một hệ thống thương mại điện tử chuyên ngành sách đòi hỏi cơ sở dữ liệu phải đáp ứng đồng thời tính toàn vẹn dữ liệu, kiểm soát chặt chẽ các ràng buộc nghiệp vụ (tồn kho, khuyến mãi, độ tuổi người dùng), phân quyền người dùng nhiều cấp và tối ưu hóa hiệu năng truy vấn.
Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:
- Thiết kế và tạo lập cấu trúc lược đồ cơ sở dữ liệu quan hệ cho mô hình nhà sách trực tuyến; nạp dữ liệu mẫu vào các bảng thực thể.
- Xây dựng các hàm (Functions), thủ tục lưu trữ (Stored Procedures) và bộ kích hoạt (Triggers) để tự động hóa và ràng buộc các quy tắc nghiệp vụ phức tạp ở tầng cơ sở dữ liệu.
- Định nghĩa các nhóm người dùng và thiết lập ma trận phân quyền truy cập chức năng ở mức ứng dụng.
- Xác định kiến trúc phần mềm cho hệ thống dựa trên mô hình MVC và phân tích sự thích ứng của mô hình trong cài đặt thực tế.
- Xây dựng các sơ đồ thiết kế chi tiết theo chuẩn UML (Use Case, Activity, Sequence, Class Diagrams).
- Thực hiện phân tích và chuẩn hóa lược đồ quan hệ theo các dạng chuẩn 1NF, 2NF, 3NF và đạt chuẩn Boyce-Codd (BCNF).
- Phân tích so sánh việc lưu trữ dữ liệu bằng hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) với hệ thống tập tin văn bản (text files).
- Cài đặt chỉ mục (Indexing) và thực hiện đo đạc, đánh giá định lượng thời gian thực thi truy vấn trên tập dữ liệu mô phỏng quy mô lớn.
Đối tượng nghiên cứu là hệ thống quản lý dữ liệu cho nhà sách điện tử kinh doanh sách và tạp chí định kỳ. Phạm vi nghiên cứu tập trung vào mô hình hóa dữ liệu quan hệ, lập trình tầng dữ liệu bằng hệ quản trị MySQL/MariaDB và xây dựng giao diện ứng dụng web bằng ngôn ngữ PHP.
Cơ sở lý thuyết và phương pháp
Khung lý thuyết và mô hình áp dụng
- Lý thuyết cơ sở dữ liệu quan hệ: Áp dụng hệ thống khái niệm về mô hình thực thể quan hệ (ERD), khóa chính (Primary Key), khóa ngoại (Foreign Key), khóa dự tuyển (Candidate Key) và các quy tắc toàn vẹn tham chiếu.
- Lý thuyết chuẩn hóa dữ liệu: Sử dụng hệ thống lý thuyết về phụ thuộc hàm (Functional Dependency), phụ thuộc hàm đầy đủ, phụ thuộc hàm riêng phần và phụ thuộc bắc cầu để chuẩn hóa dữ liệu từ dạng chuẩn 1 (1NF) lên dạng chuẩn Boyce-Codd (BCNF).
- Mô hình kiến trúc phần mềm: Tiếp cận mô hình kiến trúc MVC (Model – View – Controller) trong kỹ thuật phần mềm nhằm phân tách giữa tầng dữ liệu, giao diện hiển thị và điều khiển logic.
- Ngôn ngữ mô hình hóa thống nhất (UML): Sử dụng các biểu đồ hành vi và cấu trúc bao gồm Use Case Diagram, Activity Diagram, Sequence Diagram và Class Diagram để đặc tả nghiệp vụ hệ thống.
Phương pháp nghiên cứu và kỹ thuật thực hiện
- Phương pháp phân tích và thiết kế hệ thống: Khảo sát các quy trình nghiệp vụ mua bán trực tuyến đặc thù của nhà sách (quản lý phân loại sản phẩm sách/tạp chí, giỏ hàng, đặt hàng, xử lý đơn hàng, đánh giá sản phẩm, quản lý mã giảm giá).
- Phương pháp lập trình cơ sở dữ liệu nâng cao: Hiện thực các khối lệnh logic nội tại trong DBMS bằng SQL (MySQL dialect) sử dụng con trỏ (
CURSOR), bộ xử lý ngoại lệ (HANDLER), phát sinh lỗi tùy biến (SIGNAL SQLSTATE) và biểu thức chính quy (REGEXP).
- Phương pháp thực nghiệm và đo đạc hiệu năng: Thiết lập môi trường thử nghiệm dữ liệu lớn để tiến hành đo lường, so sánh thời gian phản hồi giữa các câu truy vấn có sử dụng chỉ mục (Index) và không sử dụng chỉ mục.
Nguồn dữ liệu
Nguồn dữ liệu trong đồ án là dữ liệu thử nghiệm được nhóm tác giả tự sinh và nạp vào các bảng (account, product, book, magazine_seri, orders, order_detail, category, discount_code, author, writee, review, role) phục vụ kiểm thử đơn vị các hàm, thủ tục và ràng buộc toàn vẹn.
Thiết kế và triển khai
1. Kiến trúc hệ thống
Hệ thống được định hướng thiết kế theo mô hình MVC, tuy nhiên trong triển khai thực tế trên nền tảng ứng dụng web (PHP/MySQL), nhóm đã tổ chức lại thành 3 thành phần chính:
- Giao diện (View): Chịu trách nhiệm hiển thị dữ liệu tới người dùng thông qua mã HTML, CSS và gửi các yêu cầu tương tác lên máy chủ thông qua phương thức HTTP POST.
- Xử lý (Model + Controller kết hợp): Tiếp nhận dữ liệu từ giao diện, xử lý nghiệp vụ và thực thi các câu lệnh SQL để truy xuất hoặc cập nhật dữ liệu vào cơ sở dữ liệu (điển hình như trang
shop.php).
- Cơ sở dữ liệu (Database): Lưu trữ toàn bộ dữ liệu quan hệ, đồng thời đảm nhận một phần xử lý logic nghiệp vụ thông qua Triggers, Functions và Stored Procedures.
+-------------------------------------------------------------+
| Giao diện (View) |
| - HTML / CSS |
| - Gửi dữ liệu qua phương thức POST |
+------------------------------+------------------------------+
| (HTTP Request)
v
+-------------------------------------------------------------+
| Xử lý (Model + Controller) |
| - Tiếp nhận và xử lý yêu cầu |
| - Điều phối truy vấn SQL |
+------------------------------+------------------------------+
| (SQL Queries / Stored Routines)
v
+-------------------------------------------------------------+
| Cơ sở dữ liệu (Database) |
| - Bảng dữ liệu quan hệ |
| - Functions, Procedures, Triggers, Constraints |
+-------------------------------------------------------------+
2. Mô hình phân cấp thực thể và dữ liệu
Để phân biệt giữa hai loại sản phẩm chính trong hệ thống là sách và tạp chí, bảng product được thiết kế có thêm thuộc tính Typeproduct (với quy ước Typeproduct = 1 là Sách và Typeproduct = 2 là Tạp chí). Cấu trúc này cho phép quản lý các thuộc tính chung tại bảng product và các thuộc tính chuyên biệt tại bảng book (năm xuất bản, số lượng tồn kho, mã thể loại) và magazine_seri (chu kỳ phát hành).
3. Hiện thực các thành phần logic cơ sở dữ liệu
Hệ thống cài đặt danh mục các Stored Procedures, Functions và Triggers nhằm kiểm soát chặt chẽ toàn vẹn dữ liệu:
| Loại thành phần |
Tên hàm / thủ tục / trigger |
Bảng tác động |
Nghiệp vụ thực thi chính |
| Trigger |
book_AFTER_UPDATE |
book |
Tự động quét các đơn hàng trạng thái Processing; nếu số lượng sách đặt vượt quá lượng tồn kho mới sau cập nhật thì chuyển đơn hàng sang Canceled. |
| Trigger |
product_AFTER_INSERT / UPDATE |
product |
Tự động đồng bộ thêm khóa chính sản phẩm vào bảng con tương ứng (book nếu Typeproduct = 1, magazine_seri nếu Typeproduct = 2). |
| Trigger |
account_BEFORE_INSERT |
account |
Kiểm tra độ tuổi người dùng: Khách hàng (ROLE_NO = 4) phải $\ge 12$ tuổi; Nhân viên và Quản lý phải $\ge 18$ tuổi; vi phạm sẽ kích hoạt SIGNAL SQLSTATE '45000'. |
| Trigger |
NEWUSER_DISCOUNT |
account |
Tự động tạo một mã giảm giá 10% có thời hạn 30 ngày trong bảng discount_code ngay sau khi một tài khoản mới được đăng ký. |
| Trigger |
DELETE_USER_DISCOUNT |
account |
Tự động dọn dẹp và xóa toàn bộ các mã giảm giá thuộc quyền sở hữu của người dùng trước khi tài khoản bị xóa khỏi hệ thống. |
| Trigger |
DELETE_PRODUCT |
product |
Thực hiện xóa cứng đồng loạt các bản ghi phụ thuộc ở các bảng liên quan (writee, book, magazine_seri) khi một sản phẩm bị xóa. |
| Procedure |
topsachbanchay |
Đa bảng |
Trích xuất thông tin top 5 sách có số lượng tiêu thụ cao nhất từ các đơn hàng có trạng thái Completed. |
| Procedure |
insertaccount |
account |
Kiểm tra định dạng dữ liệu đầu vào bằng REGEXP (Số điện thoại, Mật khẩu $\ge 8$ ký tự, Email chuẩn, Họ tên chỉ chứa chữ cái) trước khi thực hiện chèn. |
| Procedure |
timsachtheoloai |
product, book, category |
Tra cứu danh mục sách theo thể loại hợp lệ và sắp xếp theo giá tăng dần; báo lỗi nếu thể loại không tồn tại trong hệ thống. |
| Procedure |
topkhachhang |
account, orders |
Thống kê khách hàng có số lượng đơn hàng hoàn thành nhiều nhất theo từng địa phương; xếp thứ tự ưu tiên theo tổng chi tiêu giảm dần. |
| Procedure |
SET_DISCOUNTPRICE |
product |
Điều chỉnh giá giảm cho sản phẩm theo hệ số P_FACTOR ($0 \le P_FACTOR \le 1.2$). |
| Procedure |
VIEW_PRICE_BY_ID |
product |
Truy xuất giá gốc và giá khuyến mãi của sản phẩm theo mã định danh; phát tín hiệu cảnh báo nếu mã sản phẩm không tồn tại. |
| Procedure |
INSERT_BOOK |
product, book, writee |
Thực hiện giao tác chèn sách đồng bộ trên 3 bảng kèm kiểm tra tính tồn tại của tác giả (Author_ID). |
| Function |
magiamgiachokhachvip |
account, orders, discount_code |
Cấp mã giảm giá 20% cho các khách hàng có tổng giá trị đơn hàng hoàn thành vượt mức ngưỡng chỉ định; trả về số lượng mã đã cấp. |
| Function |
tangmagiamgia |
account, orders, discount_code |
Tặng mã giảm giá 15% dịp lễ dựa trên số đơn thành công ($\ge 5$ đơn: tặng 3 mã; 2–3 đơn: tặng 2 mã; 1 đơn: tặng 1 mã); trả về tổng số mã đã phát hành. |
| Function |
sosanpham |
review |
Tính toán và trả về tổng số sản phẩm đạt điểm đánh giá trung bình từ khách hàng lớn hơn hoặc bằng giá trị tham số đầu vào. |
| Function |
SL_BOOK_BY_CATE |
book, category |
Tính tổng số lượng ấn phẩm tồn kho theo tên thể loại sách. |
| Function |
AdjustPrice_BY_CATE |
product, book |
Điều chỉnh tỷ lệ giá bán đồng loạt cho tất cả các sách thuộc một danh mục cụ thể; trả về trạng thái Boolean thành công/thất bại. |
Nội dung chính theo từng chương
Báo cáo kết quả nghiên cứu và hiện thực của đồ án có dung lượng 80 trang, được bố cục thành 8 nội dung chính:
1 Insert dữ liệu mẫu vào cơ sở dữ liệu
Chương này trình bày quá trình khởi tạo dữ liệu mẫu trên môi trường hệ quản trị cơ sở dữ liệu MySQL nhằm phục vụ kiểm thử. Nhóm tác giả thực hiện nạp dữ liệu vào các bảng trọng tâm như account, product (bổ sung trường Typeproduct để phân loại sách và tạp chí), orders, category, author... Kết quả kiểm tra hiển thị qua giao diện dòng lệnh và giao diện quản trị cho thấy các câu lệnh INSERT hoạt động chính xác, đảm bảo đúng kiểu dữ liệu và giá trị khóa.
2 Viết các Functions/Procedures/Assertions/Triggers
Chương 2 chiếm dung lượng lớn nhất trong báo cáo (từ trang 5 đến trang 36), phân chia nhiệm vụ lập trình cụ thể cho từng thành viên:
- Nguyễn Hữu Khang: Phụ trách cài đặt
book_AFTER_UPDATE (tự động hủy đơn hàng thiếu hàng tồn kho khi cập nhật số lượng sách) và Stored Procedure topsachbanchay (truy vấn top 5 sản phẩm bán chạy nhất dựa trên các đơn hàng có trạng thái Completed).
- Nguyễn Hoàng Trí Viễn: Phụ trách cài đặt Trigger phân luồng sản phẩm
product_AFTER_INSERT/UPDATE, Trigger kiểm tra giới hạn tuổi đăng ký tài khoản account_BEFORE_INSERT, các thủ tục kiểm tra hợp lệ dữ liệu insertaccount, tìm kiếm sách theo danh mục timsachtheoloai, thống kê topkhachhang và các hàm tặng mã giảm giá VIP magiamgiachokhachvip, tặng mã ngày lễ tangmagiamgia, hàm lọc đánh giá sosanpham.
- Đậu Xuân Thành: Phụ trách cài đặt Trigger cấp mã khuyến mãi cho người dùng mới
NEWUSER_DISCOUNT, Trigger dọn dẹp mã giảm giá DELETE_USER_DISCOUNT, Trigger xóa cascade sản phẩm DELETE_PRODUCT, các thủ tục điều chỉnh giá đơn lẻ SET_DISCOUNTPRICE, tra cứu giá VIEW_PRICE_BY_ID, thủ tục nghiệp vụ thêm sách INSERT_BOOK và các hàm tính tồn kho theo loại SL_BOOK_BY_CATE, cập nhật giá theo thể loại AdjustPrice_BY_CATE.
3 Định nghĩa các nhóm người dùng và phân quyền ở mức ứng dụng
Nhóm xác định mô hình quản trị gồm 4 nhóm người dùng (Roles) chính được phân biệt thông qua thuộc tính ROLE_NO liên kết tới bảng role:
- Khách hàng (Role 4): Quyền xem sản phẩm, tạo và chỉnh sửa tài khoản cá nhân, đặt hàng.
- Nhân viên kho (Role 3): Quyền xem sản phẩm, thêm và xóa sản phẩm trong kho dữ liệu.
- Nhân viên thường (Role 2): Quyền xem sản phẩm, xử lý đơn hàng và theo dõi thông tin tất cả các đơn hàng.
- Quản lý (Role 1): Toàn quyền quản trị hệ thống (quản lý tài khoản khách hàng, tài khoản nhân viên, thêm/xóa sản phẩm, xử lý và xem toàn bộ đơn hàng).
4 Định nghĩa kiến trúc cho ứng dụng
Nội dung chương làm rõ cơ sở lý thuyết của mẫu kiến trúc Model-View-Controller (MVC) và phân tích sự chuyển biến trong quá trình cài đặt thực tế. Do phát sinh các rào cản kỹ thuật trong quá trình phát triển web bằng PHP thuần, nhóm đã tích hợp lớp Model và Controller lại với nhau tại phần đầu mỗi tệp kịch bản (chứa các truy vấn SQL lấy và cập nhật CSDL), còn phần sau đóng vai trò View (chứa mã HTML, CSS và các biểu mẫu gửi qua POST). Kiến trúc được minh họa chi tiết qua luồng hoạt động của trang trưng bày sản phẩm shop.php.
5 Thiết kế chi tiết cho ứng dụng
Chương 5 cung cấp hệ thống tài liệu thiết kế phần mềm chi tiết sử dụng chuẩn UML bao gồm:
- Use Case Diagram: Mô hình hóa các ca sử dụng thuộc phân hệ Quản lý sản phẩm và Quản lý đơn hàng.
- Activity Diagram: Đặc tả quy trình luồng hoạt động khi thêm sách mới vào cửa hàng, quy trình khách hàng duyệt xem sản phẩm và quy trình khách hàng tạo lập đơn đặt hàng.
- Sequence Diagram: Mô hình hóa tương tác tuần tự thời gian cho chức năng tìm kiếm/xem chi tiết sách và chức năng đưa sách vào giỏ hàng.
- Class Diagram: Biểu diễn cấu trúc lớp đối tượng và các mối quan hệ liên kết trong ứng dụng.
6 Chuẩn hóa lược đồ về dạng chuẩn BCNF cho lược đồ quan hệ
Chương 6 trình bày các bước chuẩn hóa lược đồ quan hệ:
- Dạng chuẩn 1NF: Tất cả các bảng đều thỏa mãn do mọi thuộc tính đều chứa miền giá trị nguyên tử, không chứa thuộc tính đa trị hoặc quan hệ lồng nhau.
- Dạng chuẩn 2NF: Tất cả các bảng
account, author, book, magazine_seri, category, discount_code, orders đều đạt 2NF vì các thuộc tính không khóa phụ thuộc hàm đầy đủ vào khóa chính. Riêng bảng order_detail ban đầu chứa thuộc tính dẫn xuất Total_cost ($Total_cost = Price \times Quantity$) gây dư thừa, và thuộc tính Price phụ thuộc riêng phần vào PID trong khóa kết hợp (ORDERID, PID). Nhóm đã tiến hành loại bỏ Total_cost và hiệu chỉnh cấu trúc để đạt chuẩn.
- Dạng chuẩn 3NF và BCNF: Phân tích các phụ thuộc hàm không có tính bắc cầu và bảo đảm mọi vế trái của phụ thuộc hàm không tầm thường đều là siêu khóa (superkey).
7 So sánh dữ liệu trong cơ sở dữ liệu và dữ liệu trong các tập tin như text files khi phát triển ứng dụng cho đề tài của assignment
Chương này đi sâu vào phân tích lý thuyết và thực tiễn việc quản lý dữ liệu bằng RDBMS so với hệ thống tập tin tuần tự (Text files) trên các khía cạnh: tính toàn vẹn dữ liệu, kiểm soát truy cập đồng thời (concurrency control), tính bảo mật và phân quyền, khả năng phục hồi khi có sự cố, tính mềm dẻo khi truy vấn dữ liệu phức tạp thông qua ngôn ngữ SQL và chi phí tài nguyên phần cứng.
8 Cài đặt chỉ mục, minh họa đo đạc: so sánh thời gian thực thi chỉ mục với demo lớn
Chương cuối cùng tập trung vào kỹ thuật tối ưu hóa cơ sở dữ liệu. Nhóm tiến hành tạo lập các chỉ mục (Indexes) trên các trường thường xuyên tham gia vào mệnh đề tìm kiếm và kết nối dữ liệu, sau đó thực hiện đo đạc thời gian thực thi (execution time) của các câu lệnh truy vấn phức tạp trên một tập dữ liệu thử nghiệm lớn nhằm minh chứng sự cải thiện rõ rệt về hiệu năng truy xuất khi áp dụng Index.
Kết quả và đóng góp
1. Kết quả kỹ thuật đạt được
- Xây dựng thành công hệ thống cơ sở dữ liệu hoàn chỉnh với đầy đủ các bảng dữ liệu mô tả hoạt động của một sàn thương mại điện tử chuyên ngành sách và tạp chí.
- Thiết lập hệ thống ma trận phân quyền người dùng 4 cấp ở mức ứng dụng:
| Quyền hạn / Thao tác |
Khách hàng |
Nhân viên kho |
Nhân viên thường |
Quản lý |
| Xem sản phẩm của cửa hàng |
x |
x |
x |
x |
| Tạo và chỉnh sửa tài khoản khách hàng |
x |
|
|
x |
| Tạo và chỉnh sửa tài khoản nhân viên |
|
|
|
x |
| Thêm, xóa sản phẩm |
|
x |
|
x |
| Đặt hàng |
x |
|
|
|
| Xử lý các đơn hàng |
|
|
x |
x |
| Xem thông tin tất cả đơn hàng |
|
|
x |
x |
- Hoàn thiện bộ 6 Triggers, 7 Stored Procedures và 5 Functions giải quyết toàn diện các quy tắc nghiệp vụ: tự động kiểm tra định dạng dữ liệu (
REGEXP), tự động áp dụng chính sách giảm giá, quản lý vòng đời đơn hàng theo lượng tồn kho thực tế, bảo vệ tính nhất quán tham chiếu dữ liệu.
- Chuẩn hóa thành công toàn bộ các bảng quan hệ về dạng chuẩn BCNF, loại bỏ triệt để các thuộc tính dẫn xuất tính toán dư thừa (
Total_cost) và phụ thuộc hàm riêng phần.
2. Đóng góp của đề tài
- Đưa ra giải pháp mô hình hóa dữ liệu linh hoạt cho phép quản lý hỗn hợp nhiều chủng loại ấn phẩm (sách, tạp chí) trên cùng một cấu trúc bảng cha-con (
product - book/magazine_seri) thông qua cờ phân loại và trigger tự động đồng bộ.
- Đóng gói logic nghiệp vụ sâu vào tầng cơ sở dữ liệu (Database-level logic), giúp giảm thiểu tải xử lý cho tầng ứng dụng và ngăn ngừa việc sai lệch dữ liệu từ các thao tác trực tiếp trên DBMS.
- Cung cấp dữ liệu đo đạc thực nghiệm về hiệu năng của việc đánh chỉ mục trên cơ sở dữ liệu quan hệ so sánh với xử lý tập tin văn bản truyền thống.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế
- Kiến trúc mã nguồn: Việc triển khai thực tế trên ngôn ngữ PHP chưa tách biệt hoàn toàn ba lớp MVC theo đúng chuẩn thiết kế phần mềm lý thuyết, mã giao diện và mã truy vấn SQL vẫn còn kết hợp trong cùng tệp kịch bản (
shop.php).
- Phương thức xóa dữ liệu: Thao tác xóa sản phẩm trong trigger
DELETE_PRODUCT sử dụng phương thức xóa "cứng" (xóa vĩnh viễn dữ liệu khỏi cơ sở dữ liệu), có thể làm mất dấu vết lịch sử giao dịch nếu không có cơ chế sao lưu hoặc chuyển đổi sang xóa "mềm" (soft delete / cờ trạng thái).
- Tập dữ liệu kiểm thử chức năng ban đầu: Một số thủ tục thống kê (như
topsachbanchay) trong giai đoạn đầu kiểm thử hiển thị kết quả giới hạn do số lượng đơn hàng hoàn thành trong tập mẫu còn ít.
Hướng mở rộng
- Tái cấu trúc mã nguồn ứng dụng web để tách bạch triệt để các tầng Model, View và Controller thông qua việc áp dụng các khung làm việc (framework) hiện đại.
- Mở rộng các Stored Procedures để quản lý thêm các quy trình nghiệp vụ chuyên sâu như tích hợp cổng thanh toán trực tuyến, quản lý vận chuyển liên tỉnh và đề xuất sách dựa trên lịch sử mua sắm.
Giá trị tham khảo
Đồ án là tài liệu tham khảo thực tế và hữu ích cho:
- Sinh viên ngành Công nghệ Thông tin, Khoa học Máy tính và Hệ thống Thông tin: Tham khảo phương pháp xây dựng bài tập lớn môn Hệ cơ sở dữ liệu, quy trình chuẩn hóa lược đồ quan hệ từ 1NF đến BCNF, kỹ thuật viết Stored Procedures/Functions/Triggers có sử dụng Cursor, Signal State và Regular Expressions trong MySQL.
- Lập trình viên phát triển ứng dụng web thương mại điện tử: Tham khảo cách thiết kế cơ sở dữ liệu cho mô hình cửa hàng trực tuyến, cách thiết kế bảng phân quyền người dùng (RBAC) và phương pháp tối ưu hóa hiệu năng truy vấn thông qua Indexing.
Câu hỏi thường gặp
1. Hệ thống phân biệt giữa sản phẩm Sách và Tạp chí trong cơ sở dữ liệu như thế nào?
Hệ thống sử dụng thuộc tính Typeproduct trong bảng product với quy ước: giá trị 1 đại diện cho Sách và giá trị 2 đại diện cho Tạp chí. Khi một sản phẩm mới được chèn hoặc cập nhật, trigger product_AFTER_INSERT và product_AFTER_UPDATE sẽ tự động kiểm tra giá trị này để chèn khóa chính tương ứng vào bảng book hoặc magazine_seri.
2. Ràng buộc độ tuổi khi tạo tài khoản được kiểm soát như thế nào ở tầng cơ sở dữ liệu?
Độ tuổi được kiểm soát tự động thông qua trigger account_BEFORE_INSERT trên bảng account. Trigger tính toán khoảng cách năm giữa ngày sinh (Birthday) và ngày hiện tại (curdate()). Nếu tài khoản là Khách hàng (ROLE_NO = 4) có tuổi dưới 12, hoặc tài khoản Nhân viên/Quản lý có tuổi dưới 18, hệ thống sẽ kích hoạt lệnh SIGNAL SQLSTATE '45000' kèm thông báo lỗi và từ chối ghi dữ liệu.
3. Thủ tục topsachbanchay tính toán số lượng sách bán ra dựa trên điều kiện gì?
Thủ tục topsachbanchay tính tổng số lượng bán ra (SUM(O.Quantity)) của các cuốn sách từ bảng order_detail và chỉ tổng hợp dữ liệu từ những đơn hàng trong bảng orders đã chuyển sang trạng thái hoàn thành (Status LIKE '%Completed%'), sau đó hiển thị 5 sản phẩm có số lượng cao nhất.
4. Tại sao thuộc tính Total_cost trong bảng order_detail bị loại bỏ trong quá trình chuẩn hóa BCNF?
Thuộc tính Total_cost bị loại bỏ vì đây là một thuộc tính dẫn xuất, có thể suy ra trực tiếp bằng tích số giữa đơn giá và số lượng ($Price \times Quantity$). Việc lưu trữ thuộc tính dẫn xuất này gây dư thừa dữ liệu và vi phạm tính tối ưu của dạng chuẩn.
5. Kiến trúc MVC triển khai thực tế của nhóm có điểm gì khác biệt so với lý thuyết?
Về mặt lý thuyết, MVC chia tách độc lập 3 thành phần Model, View và Controller. Tuy nhiên trong thực tế triển khai ứng dụng, nhóm đã gộp phần xử lý (Model + Controller) vào phần đầu của tệp mã nguồn để tiếp nhận yêu cầu và thực thi câu lệnh SQL, phần sau của tệp đóng vai trò View chứa mã HTML/CSS để hiển thị giao diện.
Kết luận
Đề án "Thiết kế cơ sở dữ liệu & hiện thực Mô hình nhà sách trực tuyến (E-Book store)" đã hoàn thành toàn diện các mục tiêu đặt ra từ việc mô hình hóa thực thể, thiết lập quan hệ, chuẩn hóa lược đồ đạt dạng chuẩn BCNF cho đến hiện thực kỹ thuật trên hệ quản trị MySQL. Bằng việc tích hợp sâu các khối logic ràng buộc toàn vẹn dữ liệu qua Stored Procedures, Functions và Triggers, hệ thống đảm bảo vận hành nghiệp vụ bán hàng nhất quán và an toàn. Báo cáo cung cấp đầy đủ tài liệu thiết kế từ mô hình dữ liệu, biểu đồ UML cho đến thực nghiệm đo đạc chỉ mục, đóng vai trò là một tài liệu kỹ thuật có giá trị tham khảo cao trong giảng dạy và học tập chuyên ngành kỹ thuật dữ liệu.