Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh phát triển của cuộc cách mạng công nghiệp lần thứ tư, hoạt động thương mại điện tử và mua bán trực tuyến ngày càng trở nên phổ biến, thúc đẩy sự hình thành và mở rộng của các hệ thống trang web kinh doanh bán lẻ. Đối với các hệ thống thương mại điện tử, khối lượng dữ liệu phát sinh từ người dùng, đơn hàng, danh mục sản phẩm và tương tác giao dịch liên tục gia tăng, đặt ra yêu cầu phải thiết kế các kiến trúc cơ sở dữ liệu có khả năng phân tán, mở rộng và hỗ trợ đa mô hình lưu trữ.

Đề tài "Thiết kế cơ sở dữ liệu cho trang web bán hàng điện tử" được nhóm tác giả lựa chọn và thực hiện trong khuôn khổ học phần Cơ sở dữ liệu nâng cao tại Trường Đại học Sư phạm Thành phố Hồ Chí Minh, dưới sự hướng dẫn của TS. Văn Thế Thành. Đồ án tập trung giải quyết các bài toán về thiết kế cơ sở dữ liệu toàn cục, kỹ thuật phân mảnh dữ liệu phân tán và chuyển đổi mô hình dữ liệu sang các hệ quản trị NoSQL và đồ thị.

Mục tiêu cụ thể của đề tài bao gồm 4 nhiệm vụ kỹ thuật:

  1. Thiết kế cơ sở dữ liệu toàn cục (Master DB) phục vụ hệ thống trang web bán hàng điện tử và xây dựng bộ dữ liệu mẫu.
  2. Thực hiện phân mảnh dữ liệu (phân mảnh ngang, phân mảnh dọc, phân mảnh hỗn hợp) từ cơ sở dữ liệu toàn cục để tạo thành các cơ sở dữ liệu thành phần (Slaver DB), thiết lập các thao tác thêm, xóa, sửa, truy vấn, đồng thời cài đặt các Stored Procedure và Trigger kiểm soát ràng buộc.
  3. Chuyển đổi và xây dựng cơ sở dữ liệu tài liệu tương ứng trên hệ quản trị MongoDB từ các cơ sở dữ liệu thành phần, thực hiện các thao tác quản lý dữ liệu tài liệu (Document).
  4. Xây dựng mô hình cơ sở dữ liệu đồ thị trên hệ quản trị Neo4j tương ứng với cơ sở dữ liệu MongoDB và thực thi các thao tác cập nhật, thêm, xóa, truy vấn nút dữ liệu (Node).

Đối tượng nghiên cứu là cấu trúc dữ liệu của hệ thống thương mại điện tử bán đồ điện tử (điện thoại, máy tính xách tay và phụ kiện). Phạm vi triển khai là mô hình thử nghiệm phân tán trên máy chủ quản trị cục bộ, phân mảnh dữ liệu thành 6 cơ sở dữ liệu thành phần, kết hợp chuyển đổi sang MongoDB và Neo4j, được hoàn thành vào tháng 11 năm 2021.

Cơ sở lý thuyết và phương pháp

Đồ án ứng dụng các nền tảng lý thuyết và mô hình kỹ thuật trong lĩnh vực cơ sở dữ liệu nâng cao:

  • Mô hình dữ liệu quan hệ (Relational Data Model): Sử dụng làm nền tảng xây dựng lược đồ cơ sở dữ liệu toàn cục với các ràng buộc khóa chính, khóa ngoại, kiểu dữ liệu và toàn vẹn tham chiếu.
  • Kỹ thuật phân mảnh cơ sở dữ liệu phân tán (Database Fragmentation): Áp dụng phân mảnh ngang nguyên thủy dựa trên điều kiện thuộc tính định danh người dùng (TYPE), danh mục sản phẩm (CAT_ID) và phân mảnh dọc dựa trên việc tách các nhóm thuộc tính của bảng đơn hàng (ORDERS) phục vụ các mục đích quản lý riêng biệt. Kỹ thuật nhân bản dữ liệu được thiết lập thông qua cơ chế Publications và Subscriptions.
  • Mô hình cơ sở dữ liệu hướng tài liệu (Document-Oriented NoSQL): Ứng dụng hệ quản trị MongoDB để lưu trữ dữ liệu dưới định dạng JSON/BSON, tổ chức theo các Database, Collection và Document.
  • Mô hình cơ sở dữ liệu đồ thị (Graph Database): Ứng dụng hệ quản trị Neo4j với ngôn ngữ truy vấn Cypher, tổ chức dữ liệu theo các thành phần Nút (Nodes), Nhãn (Labels), Thuộc tính (Properties) và Quan hệ (Relationships).

Phương pháp nghiên cứu chính là thiết kế hệ thống và thực nghiệm kỹ thuật, bao gồm quy trình phân tích thực thể - liên kết, cài đặt cơ sở dữ liệu trên máy chủ SQL Server phân tán, viết kịch bản truy vấn T-SQL (Stored Procedure, Trigger), chuyển đổi cấu trúc sang NoSQL MongoDB và ánh xạ sang cấu trúc đồ thị Neo4j.

Thiết kế và triển khai

Hệ thống cơ sở dữ liệu toàn cục bao gồm 10 bảng thực thể phục vụ đầy đủ các chức năng nghiệp vụ của trang web thương mại điện tử.

Tên bảng Khóa chính Khóa ngoại Mục đích lưu trữ
USERS USERS_ID Không có Tài khoản người dùng, email, mật khẩu, họ tên, phân loại tài khoản (TYPE)
USERS_INFOR USERS_INFOR_ID USERS_ID Địa chỉ, số điện thoại chi tiết của người dùng
CART CART_ID PRODUCT_ID, USERS_ID Giỏ hàng của từng khách hàng và số lượng sản phẩm chọn mua
MESSAGE MESSAGE USERS_ID1, USERS_ID2 Tin nhắn trao đổi giữa các tài khoản người dùng, nội dung tin nhắn
ORDERS ORDERS_ID USERS_ID Thông tin đơn đặt hàng, địa chỉ, người nhận, ngày đặt, phương thức, trạng thái, tổng tiền
ORDERS_DETAIL OD_DETAIL_ID ORDERS_ID, PRODUCT_ID Chi tiết mặt hàng, số lượng trong từng đơn hàng
PRODUCT PRODUCT_ID CAT_ID Thông tin sản phẩm, tên, số lượng tồn kho, giá bán
PRODUCT_DETAIL PRODUCT_DETAIL_ID PRODUCT_ID Thông số kỹ thuật sản phẩm: RAM, pin (BATTERY), vi xử lý (CHIP), bộ nhớ (ROM), xuất xứ
IMG Không có PRODUCT_ID Định danh hình ảnh (IMG_ID) và đường dẫn ảnh sản phẩm (PATH)
CAT_PRODUCT CAT_ID Không có Danh mục loại sản phẩm (CAT_NAME)

Hệ thống máy chủ phân tán được thiết lập từ Master DB tại địa chỉ ADMIN\QLBHDT phân mảnh sang 6 máy chủ thành phần (Slaver DB) thông qua Publications và Subscriptions:

  1. Máy chủ ADMIN\QLBHDT01 (QLBHDT_ADMIN): Quản trị viên (TYPE = 1), phân mảnh ngang các bảng USERS, USERS_INFOR, MESSAGE.
  2. Máy chủ ADMIN\QLBHDT02 (QLBHDT_CUSTOMER): Khách hàng (TYPE = 0), phân mảnh ngang các bảng USERS, USERS_INFOR, CART, MESSAGE.
  3. Máy chủ ADMIN\QLBHDT03 (QLBHDT_PHONE): Phân loại điện thoại (CAT_ID = 1), phân mảnh ngang các bảng CAT_PRODUCT, PRODUCT, PRODUCT_DETAIL, IMG.
  4. Máy chủ ADMIN\QLBHDT04 (QLBHDT_LAPTOP): Phân loại máy tính xách tay (CAT_ID = 2), phân mảnh ngang các bảng CAT_PRODUCT, PRODUCT, PRODUCT_DETAIL, IMG.
  5. Máy chủ ADMIN\QLBHDT05 (QLBHDT_THONGTINKHACHDATHANG): Quản lý thông tin người đặt, phân mảnh dọc bảng ORDERS (chỉ giữ thông tin khách hàng) và bảng ORDERS_DETAIL.
  6. Máy chủ ADMIN\QLBHDT06 (QLBHDT_THONGTINDONHANG): Quản lý thông tin tiến trình đơn, phân mảnh dọc bảng ORDERS (chỉ giữ thông tin mã đơn, trạng thái, thanh toán, tổng giá trị) và bảng ORDERS_DETAIL.

Nội dung chính theo từng chương

Phần 1. Chọn một project để thiết kế CSDL, mô tả tên đồ án, mục tiêu project

Nhóm tác giả trình bày tổng quan về nhu cầu thương mại điện tử trong bối cảnh công nghệ số. Nội dung xác định tên đồ án là "Thiết kế cơ sở dữ liệu cho trang web bán hàng điện tử", vạch rõ 4 mục tiêu nghiên cứu từ xây dựng CSDL toàn cục, phân mảnh phân tán, chuyển đổi MongoDB đến thiết lập đồ thị Neo4j.

Phần 2. Thiết kế CSDL toàn cục cho project, tạo và nhập dữ liệu mẫu cho CSDL

Chương này công bố lược đồ quan hệ toàn cục và bảng đặc tả chi tiết 10 thực thể dữ liệu. Mỗi trường dữ liệu đều được xác định rõ kiểu dữ liệu (Int, Varchar, Nvarchar, Date), kích thước bộ nhớ, khuôn dạng lưu trữ và các ràng buộc toàn vẹn khóa chính, khóa ngoại. Sau khi định nghĩa cấu trúc bảng, nhóm tiến hành nhập tập dữ liệu mẫu hoàn chỉnh vào hệ thống Master DB làm cơ sở cho các bước phân mảnh tiếp theo.

Phần 3. Phân mảnh (ngang, dọc, hỗn hợp) từ CSDL toàn cục (Master DB) để tạo thành các CSDL thành phần (Slaver DB), thực hiện các thao tác trên Slaver DB (thêm, xoá, sửa, truy vấn) và tạo các Trigger, Store Procedure

Nhóm tác giả triển khai phân chia dữ liệu toàn cục thành 6 CSDL thành phần chạy trên 6 máy chủ con từ ADMIN\QLBHDT01 đến ADMIN\QLBHDT06. Trên từng máy chủ, nhóm xây dựng các kịch bản thao tác dữ liệu:

  • QLBHDT_ADMIN: Cài đặt Stored Procedure THEMTAIKHOANADMIN, UPDATETAIKHOAN, XOATAIKHOAN; cài đặt Trigger kiểm tra trùng lặp email quản trị viên.
  • QLBHDT_CUSTOMER: Cài đặt Stored Procedure THEMTAIKHOAN, UPDATETAIKHOAN, XOATAIKHOAN; cài đặt Trigger DUYETMAIL chống trùng lặp tài khoản khách hàng.
  • QLBHDT_LAPTOPQLBHDT_PHONE: Cài đặt các Stored Procedure THEMSANPHAM, UPDATESANPHAM, XOASANPHAM; thiết lập Trigger ngăn chặn việc nhập trùng tên sản phẩm.
  • QLBHDT_THONGTINDONHANG: Cài đặt Stored Procedure UPDATETHONGTINDONHANG, XOATHONGTINDONHANG và câu truy vấn lọc trạng thái đơn hàng (STATUS) theo mã người dùng (USERS_ID).
  • QLBHDT_THONGTINKHACHDATHANG: Cài đặt Stored Procedure UPDATETHONGTINNGUOIDAT, XOATHONGTINNGUOIDAT.

Phần 4. Tạo CSDL MongoDB tương ứng với các Slaver DB và thực hiện các thao tác trên MongoDB

Nhóm tác giả ánh xạ 6 CSDL thành phần sang 6 cơ sở dữ liệu trên MongoDB gồm QLBHDT_ADMIN, QLBHDT_CUSTOMER, QLBHDT_LAPTOP, QLBHDT_PHONE, QLBHDT_THONGTINDONHANGQLBHDT_THONGTINKHACHHANG.

Cú pháp lệnh thực thi:

  • Tạo và chuyển ngữ cảnh CSDL: use database_name
  • Hiển thị danh sách CSDL và tập hợp: show dbs, show collections
  • Chèn tài liệu: db.collection.insert({"key": value, ...})
  • Xem tài liệu: db.collection.find()

Các truy vấn thực nghiệm tiêu biểu được tiến hành:

  • Lọc danh sách điện thoại có giá bán từ 13.000 trở lên trong database QLBHDT_PHONE.
  • Cập nhật thông tin họ tên (FULLNAME) của khách hàng từ "Nguyễn Văn Vũ" thành "Nguyễn Tấn Vũ" trong database QLBHDT_CUSTOMER.
  • Truy vấn danh sách hóa đơn đã hoàn tất thanh toán (STATUS = 1) trong database QLBHDT_THONGTINDONHANG.

Phần 5. Tạo CSDL đồ thị tương ứng với các CSDL MongoDB và thực hiện các thao tác trên Neo4j

Toàn bộ dữ liệu tài liệu được mô hình hóa thành mạng lưới đồ thị trên Neo4j:

  • QLBHDT_ADMIN: Tổ chức 2 node quản trị viên ("Huỳnh Thị Thu Thảo", "Nguyễn Văn Minh") gán nhãn USERS.
  • QLBHDT_CUSTOMER: Tổ chức các node khách hàng ("Phùng Duy Phước", "Nguyễn Văn Vũ") gán nhãn USERS và liên kết với các node tin nhắn (1, 3) gán nhãn MESSAGE.
  • QLBHDT_PHONE: Node danh mục "Điện Thoại" (nhãn CAT_PRODUCT) liên kết đến các node sản phẩm con ("Iphone 14 Promax", "OppoReno8", "BlachShark"), mỗi sản phẩm liên kết với node chi tiết thông số kỹ thuật (node 3) và 3 node ảnh minh họa đường dẫn.
  • QLBHDT_LAPTOP: Node danh mục "Laptop" liên kết tới các node sản phẩm ("DELL E7450", "Thinkpad X1 Carbon"), node chi tiết cấu hình (node 4) và 3 node ảnh minh họa.
  • QLBHDT_THONGTINKHACHDATHANG: Tổ chức các node đơn hàng gắn tên khách đặt ("Phùng Duy Phước", "Nguyễn Văn Vũ") thuộc nhãn ORDER và các node chi tiết đơn (2, 3) thuộc nhãn ORDERS_DETAIL.
  • QLBHDT_THONGTINDONHANG: Tổ chức các node đơn hàng (1, 2) thuộc nhãn ORDERS.

Các thao tác bằng ngôn ngữ Cypher trên Neo4j bao gồm:

  • Cập nhật thuộc tính họ tên khách hàng từ "Nguyễn Văn Vũ" sang "Nguyễn Tấn Vũ".
  • Thêm node mới đại diện cho sản phẩm "Sạc Dự Phòng" thuộc nhãn CAT_PRODUCT với các thuộc tính CAT_ID = 3, CAT_NAME = 'Sạc Dữ Phòng'.
  • Xóa node vừa khởi tạo.
  • Truy vấn node sản phẩm theo điều kiện PRODUCT_NAME = 'Iphone 14 ProMax' và kết xuất đồ thị liên kết.

Kết quả và đóng góp

Đồ án hoàn thành việc xây dựng và kiểm thử hệ thống cơ sở dữ liệu đa mô hình, đạt được các kết quả cụ thể:

  • Thiết lập hoàn chỉnh lược đồ quan hệ toàn cục gồm 10 bảng dữ liệu với đầy đủ ràng buộc toàn vẹn thực thể và dữ liệu mẫu.
  • Phân mảnh thành công CSDL toàn cục thành 6 CSDL thành phần (4 CSDL phân mảnh ngang, 2 CSDL phân mảnh dọc) trên 6 máy chủ con thông qua cơ chế nhân bản (Replication).
  • Xây dựng 10 Stored Procedure quản lý dữ liệu cho các máy chủ thành phần và cài đặt các Trigger kiểm soát tính duy nhất của email và tên sản phẩm.
  • Chuyển đổi cấu trúc thành công sang hệ quản trị NoSQL MongoDB với 6 Database độc lập, cài đặt đầy đủ các Document và kiểm thử các thao tác tìm kiếm, cập nhật dữ liệu JSON.
  • Xây dựng hoàn chỉnh mô hình biểu diễn dữ liệu đồ thị trên Neo4j, mô tả rõ ràng các mối quan hệ đa tầng (Danh mục -> Sản phẩm -> Chi tiết / Ảnh minh họa; Khách hàng -> Đơn hàng -> Chi tiết đơn) và thực thi chính xác các câu lệnh Cypher thêm, xóa, sửa, lọc node.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế: Hệ thống được triển khai trên quy mô máy chủ cục bộ thử nghiệm (localhost với các instance QLBHDT01 - QLBHDT06), chưa triển khai trên môi trường mạng diện rộng phân tán thực tế. Dữ liệu mẫu phục vụ mục đích kiểm thử chức năng còn ở mức cơ bản, chưa đo lường hiệu năng chịu tải hay thời gian trễ đồng bộ dữ liệu giữa các node mạng.
  • Hướng nghiên cứu tiếp: Mở rộng phạm vi nghiên cứu bằng việc tích hợp cơ chế đồng bộ tự động thời gian thực giữa hệ cơ sở dữ liệu quan hệ SQL Server với MongoDB và Neo4j; đồng thời xây dựng giao diện ứng dụng web hoàn chỉnh kết nối trực tiếp với các phân vùng dữ liệu để kiểm thử toàn diện hiệu năng truy vấn.

Giá trị tham khảo

Tài liệu là nguồn tư liệu học tập và tham khảo kỹ thuật hữu ích đối với:

  • Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm và Hệ thống thông tin đang học tập các học phần Cơ sở dữ liệu nâng cao, Cơ sở dữ liệu phân tán hoặc Cơ sở dữ liệu NoSQL.
  • Người làm đề tài tham khảo phương pháp phân mảnh ngang, phân mảnh dọc cụ thể trên Microsoft SQL Server thông qua Publications và Subscriptions.
  • Lập trình viên cần tài liệu mẫu về quy trình chuyển đổi lược đồ từ mô hình CSDL quan hệ sang mô hình tài liệu NoSQL (MongoDB) và mô hình đồ thị (Neo4j).

Câu hỏi thường gặp

1. Đồ án thiết kế tổng cộng bao nhiêu bảng trong CSDL toàn cục và gồm những bảng nào? Hệ thống CSDL toàn cục gồm 10 bảng: USERS, USERS_INFOR, CART, MESSAGE, ORDERS, ORDERS_DETAIL, PRODUCT, PRODUCT_DETAIL, IMG, và CAT_PRODUCT.

2. CSDL toàn cục được phân mảnh thành bao nhiêu máy chủ con và theo những tiêu chí nào? Dữ liệu được phân mảnh thành 6 CSDL con trên 6 máy chủ:

  • ADMIN\QLBHDT01: Phân mảnh ngang bảng người dùng theo TYPE = 1 (Admin).
  • ADMIN\QLBHDT02: Phân mảnh ngang bảng người dùng theo TYPE = 0 (Khách hàng).
  • ADMIN\QLBHDT03: Phân mảnh ngang sản phẩm theo CAT_ID = 1 (Điện thoại).
  • ADMIN\QLBHDT04: Phân mảnh ngang sản phẩm theo CAT_ID = 2 (Laptop).
  • ADMIN\QLBHDT05: Phân mảnh dọc bảng ORDERS lưu thông tin khách đặt và ORDERS_DETAIL.
  • ADMIN\QLBHDT06: Phân mảnh dọc bảng ORDERS lưu trạng thái/tổng tiền đơn và ORDERS_DETAIL.

3. Những Stored Procedure và Trigger nào được cài đặt trên các phân mảnh sản phẩm? Trên các máy chủ QLBHDT_PHONEQLBHDT_LAPTOP, các tác giả đã xây dựng 3 Stored Procedure gồm THEMSANPHAM, UPDATESANPHAM, XOASANPHAM và cài đặt Trigger để đảm bảo không xảy ra hiện tượng trùng tên sản phẩm giữa các bản ghi.

4. Dữ liệu trên Neo4j được tổ chức như thế nào cho phân vùng sản phẩm điện thoại? Trong cơ sở dữ liệu đồ thị QLBHDT_PHONE, có 1 node danh mục mang nhãn CAT_PRODUCT ("Điện Thoại"), liên kết tới các node sản phẩm ("Iphone 14 Promax", "OppoReno8", "BlachShark"). Nút "Iphone 14 Promax" liên kết với node chi tiết sản phẩm (node 3) và 3 node hình ảnh minh họa đường dẫn.

5. Thao tác cập nhật thông tin khách hàng được nhóm thực nghiệm trên những hệ quản trị nào? Thao tác cập nhật họ tên khách hàng từ "Nguyễn Văn Vũ" thành "Nguyễn Tấn Vũ" được thực hiện bằng Stored Procedure UPDATETAIKHOAN trên SQL Server, cập nhật tài liệu trên MongoDB trong CSDL QLBHDT_CUSTOMER, và thực thi lệnh cập nhật thuộc tính Node bằng ngôn ngữ Cypher trên Neo4j.

Kết luận

Báo cáo đồ án cuối kỳ "Thiết kế cơ sở dữ liệu cho trang web bán hàng điện tử" của nhóm sinh viên Trường Đại học Sư phạm TP.HCM đã hoàn thành trọn vẹn quy trình phân tích, thiết kế và cài đặt cơ sở dữ liệu phân tán cho hệ thống bán lẻ trực tuyến. Công trình hiện thực hóa thành công việc phân mảnh 6 CSDL thành phần trên nền tảng Microsoft SQL Server thông qua cơ chế Replication, đồng thời chuyển đổi và thao tác dữ liệu đồng bộ trên hai hệ quản trị NoSQL hiện đại là MongoDB và Neo4j. Đây là tài liệu tham khảo chi tiết về mặt kỹ thuật triển khai cho các nghiên cứu và đồ án thực hành trong môn Cơ sở dữ liệu nâng cao.